【问题标题】:How to add elements from several arrays to a new static array without ArrayList?如何在没有 ArrayList 的情况下将多个数组中的元素添加到新的静态数组?
【发布时间】:2016-04-27 19:10:03
【问题描述】:

对于一项学校作业,我成功创建了一个存储食谱(名称、成分、说明)的程序。我现在需要添加一个购物清单功能,它将从我添加的食谱中获取成分并将它们存储在一个新的静态字符串数组中。

我被要求创建大小为 20 的成分字符串数组,并将 shoppingList 创建为大小为 40 的静态字符串数组:

private String[] ingredients = new String[20];
private static String[] shoppingList = new String[40]; 

我将两个数组的所有元素都初始化为一个空字符串。

我还在我的测试程序中硬编码了两个食谱,如下所示:

rcp1.setIngredients(0, "Butter");
rcp1.setIngredients(1, "Garlic");
rcp1.setIngredients(2, "Parsley");
rcp1.setIngredients(3, "Bread");
rcp1.setIngredients(4, "Cheese");

rcp2.setIngredients(0, "Biscuits");
rcp2.setIngredients(1, "Pepperoni");
rcp2.setIngredients(2, "Pizza sauce");

这就是我被难住的地方:

public void setIngredients(int loc, String ingredient) {
    ingredients[loc] = ingredient;

        for (int i=0; i<shoppingList.length; i++){
            if (shoppingList[loc] == "") {
            shoppingList = ingredients;
            } 
        }      
}

因为 rcp1 和 rcp2 的成分都使用成分位置 [0, 1, 2],尝试使用 [loc] 将成分添加到静态 shoppingList 会导致它覆盖第一个配方的那些位置。

我创建了 for 循环,因此它可以正确显示第一个配方的成分;但是,我不确定如何继续查找下一个空字符串的位置,以便列出第二个配方的成分。我在想我必须使用 else if 语句,然后想办法找到下一个空字符串在哪里,这样我就可以从那时开始添加下一个食谱的成分..?

有没有其他可能更简单的方法可以让我从 rcp2 中获取成分并将它们放置在 shoppingList 中 rcp1 的成分之后?

我想我一直在过度分析这个问题,但我还没有找到解决方案,所以如果有人能指出我正确的方向,我将不胜感激。谢谢!

【问题讨论】:

  • setIngredients() 函数的目的是什么?里面的 for 循环是没用的 - 你不要在 body 中使用迭代变量 i
  • 你在说什么让我觉得你只需要将两个食谱的成分连接到另一个数组shoppingList,对吗?

标签: java arrays iteration


【解决方案1】:

您遇到了很多人为的限制,这是意料之中的,因为这是一项课程作业。您的主要问题是 - 显然 - 您不知道每个食谱或购物清单中有多少成分。通常,数组的大小适合内容,因此您将拥有arr.length 中的项目数。否则将使用集合框架中的类之一,例如 ArrayList。

但是,您使用的是固定大小的缓冲区,这意味着除了 容量 之外,您还需要跟踪列表的 当前大小,这就是 @ 987654322@给你。有两种方法可以做到:

  • 明确地,通过具有在概念上与数组相关联的int 变量来表示“第一个未使用的元素”。当您添加新元素时,您将从该索引开始,并为添加到列表中的每个新成分增加该变量。这就是 ArrayList 的作用。
  • 隐含地,通过某种“标记”字符串表示“未使用”。这可以是一个适当的 String 实例,或者只是 null。这基本上就是 C 对 '\0' 字符串终止符所做的事情。

每个选项都有不同的权衡,需要不同的实现,我没有在这里添加,因为您需要将它作为课程的一部分考虑!不过,如果您再次遇到困难,请随时询问更多信息。

【讨论】:

    猜你喜欢
    • 2016-07-06
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2015-09-16
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多