创建ArrayList Grocery列表并在表中显示结果

时间:2013-04-13 21:07:03

标签: java arraylist

我已经做了几个星期的工作,需要一些帮助。请不要将我推荐给JavaDocs,因为我已经无数次地审阅过它,并且无法找到我的程序的解决方案。 这就是我需要做的事情:

  1. 根据用户输入的内容,一次添加一个项目到ArrayList。系统将提示用户输入要存储在ArrayList中的String,然后按Enter键。用户将能够继续向ArrayList添加项目,直到他们只是按Enter键而不键入任何内容。
  2. 一旦用户执行此操作(点击输入而不键入任何内容),程序将在表中显示ArrayList的所有元素,包括索引和字符串值。它将通过单个循环

    完成此操作

    这是我到目前为止的代码:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Scanner;
    import java.util.ArrayList;
    
    // declares a name for the class
    public class GroceryList2 {
        /**
         * Allows the program to be run and throws the Input-Output exception
         * error
         */
        public static void main(String[] args) throws IOException {
            BufferedReader userInput =
               new BufferedReader( new InputStreamReader(System.in));
            Scanner in = new Scanner(System.in);//allows for input
            // declares the ArrayList to be a String
            ArrayList<String> myArr = new ArrayList<String>();
            myArr.add("Milk");
            myArr.add("Cheese");
            myArr.add("Eggs");
            myArr.add("Bread"); //the values of the ArrayList already entereed
           // the loop that allows the criteria to run
            while(true) {
               if(myArr.isEmpty()== false ) {
                  System.out.println("Enter the items for the grocery list: ");
                  String item = in.next();//asks and allows for input
                  myArr.add(item);
               }
               else if(myArr.isEmpty()== true ) {
                  for (int i=0; i<myArr.size(); i++ ) {
                     // displays the list after the input
                     System.out.print(
                        "The Grocery List "+ i+ ": "+ myArr.get(i));
                  }
               }
            }
         }
      }
    

    代码编译,但是当我按下回车时,它没有显示购物清单,它等待另一个条目。

2 个答案:

答案 0 :(得分:0)

更改if语句中的条件,只需交换它们。或者通过

更好地改进
if(myArr.isEmpty())

然后在第二个

if(!myArr.isEmpty())

答案 1 :(得分:0)

@Cece在while循环内你实际上并没有按照自己的意愿行事。

首先,在每次迭代时,条件myArr.isEmpty()== false都将被验证(因为您的myArr数组永远不会为空,因为您在进入while循环之前已填充它),所以代码的执行将始终到达相同的条件分支。正如旁注,您可以更优雅地写出这样的内容:!myArr.isEmpty

其次,您正在从用户那里读取字符串,但您所做的就是将它们添加到数组中。由于永远不会到达else分支,因此永远不会转储数组的内容。正如旁注,if语句之后的else语句是多余的。你可以安全地删除它。

第三,您的代码的问题是您永远不会检查用户输入是否为空。相反,你检查的是杂货阵列是否为空。

这就是我写while循环的方法:

while(true){
    String item = in.next();
    if(item.isEmpty()){
        System.out.println("The Grocery List: ");
        for(int i=0; i<myArr.size(); i++) {
             System.out.println(i + ": "+ myArr.get(i));
        }
        break;
    }
    else{
        myArr.add(item);
    }
}

如果您不理解我的代码的任何部分,请告诉我。