繁体   English   中英

如何在不使用ArrayList的情况下将几个数组中的元素添加到新的静态数组中?

[英]How to add elements from several arrays to a new static array without ArrayList?

对于学校作业,我已经成功创建了一个存储配方(名称,配料,说明)的程序。 现在,我需要添加一个购物清单功能,该功能将从我添加的食谱中提取食材并将其存储在新的静态字符串数组中。

我被要求创建一个大小为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中提取配料并将其放在rcp1的配料之后放在shoppingList中吗?

我想我已经对这个问题进行了过多的分析,但是我还没有找到解决方案,所以如果有人可以向我指出正确的方向,我将不胜感激。 谢谢!

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

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

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

每个选项都有不同的权衡取舍,并且需要不同的实现方式,在此不再赘述,因为您需要在课程中认真考虑一下! 不过,请不要犹豫,再问一遍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM