-2

我已经为这项任务工作了数周,需要一些帮助。请不要让我参考 JavaDocs,因为我已经无数次查看它们并且无法找到我的程序的解决方案。这是我需要做的:

  1. 根据用户键入的输入,一次将项目添加到 ArrayList。将提示用户将字符串存储在 ArrayList 中,然后按 Enter。用户将能够继续向 ArrayList 添加项目,直到他们直接按 Enter 键而无需输入任何内容。

一旦用户执行此操作(无需键入任何内容就按 Enter),程序将在表格中显示 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));
              }
           }
        }
     }
  }

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

4

2 回答 2

0

更改 if 语句中的条件,只需交换它们即可。最好通过做来提高

if(myArr.isEmpty())

然后进入第二个

if(!myArr.isEmpty())
于 2013-04-13T21:09:11.693 回答
0

@Cece 在while循环内部,您实际上并没有做您应该做的事情来达到您的目的。

首先,在每次迭代中myArr.isEmpty()== false都会验证条件(因为您的myArr数组永远不会为空,因为您在进入while循环之前已经填充了它),因此代码的执行将始终转到相同的条件分支。顺便说一句,您可以像这样更优雅地写这个:!myArr.isEmpty.

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

第三,您的代码的问题是您从不检查用户输入是否为空。相反,您检查的是 groceries 数组是否为空。

这就是我编写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);
    }
}

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

于 2013-11-10T15:51:06.840 回答