重置嵌套在While循环中的ArrayList中的值

时间:2017-12-03 05:30:58

标签: java arraylist while-loop

我编写了代码来存储用户输入的美元金额的值。每当程序提示用户时,"您想要输入项目 - 是/否?"然后,用户可以输入存储在ArrayList中的值。

初始提示如下。它似乎工作,因为我能够输入没有明显错误的值。

    System.out.print("Would you like to input item/s - y/n: ");
    String response = textReader.nextLine();
    System.out.println();
    // create while loop to restrict responses to single characters
    while ((!response.equalsIgnoreCase("y")) && (!response.equalsIgnoreCase("n")))
    {
        System.out.print("Sorry - we need a y/n: ");
        response = textReader.nextLine();
        System.out.println();
    }

但是当我第二次输入值时,我注意到程序没有清除第一次输入的值。我写的用于提示用户输入另一个值集的代码与我为初始提示编写的代码相同。我在由用户选择" y"触发的while循环中嵌套了这些第二个提示。到最初的提示。

while ((response.equalsIgnoreCase("y")))
    {
       System.out.print("Please enter an item price, or -1 to exit: $");
       double values = numberReader.nextDouble();
       while ((values > (-1)))
       {
           cartItems.add(values);
           System.out.print("Please enter another item price, or -1 to exit: $");
           values = numberReader.nextDouble(); 
       }
       System.out.println();
       System.out.println("********** Here are your items **********");

       // I omitted the code here to make this more concise.

       // prompt the user to input a second round of values
       System.out.print("Would you like to input item/s - y/n: ");
       response = textReader.nextLine();
       System.out.println();
       // create while loop to restrict responses to single characters
       while ((!response.equalsIgnoreCase("y")) && (!response.equalsIgnoreCase("n")))
       {
           System.out.print("Sorry - we need a y/n: ");
           response = textReader.nextLine();
           System.out.println();
       }
    }

我的输出如下。当我第二次收到提示时,我会选择' y'添加更多项目。但是,我新添加的项目$ 3.00将从第一个提示添加到列表中。无论如何都要刷新或擦除ArrayList,以便每次用户想要输入新值时它都是全新的? My output

3 个答案:

答案 0 :(得分:3)

您无法重置ArrayList

完成处理后,您可以调用cartItems.clear(),然后循环播放下一轮(在outter底部)。

       ...
       while ((!response.equalsIgnoreCase("y")) && (!response.equalsIgnoreCase("n")))
       {
           System.out.print("Sorry - we need a y/n: ");
           response = textReader.nextLine();
           System.out.println();
       }
       cartItems.clear();
    }

答案 1 :(得分:2)

cartItems.clear();

将结果打印到控制台后,将其放在循环结束处。 它将刷新列表并删除其中的所有元素。

答案 2 :(得分:1)

在while循环中创建列表实例

List<Double> cartList = new ArrayList<Double>();

所以现在每当用户选择yes时,程序进入while循环,然后创建一个没有任何值的新列表实例。如果要将值存储在上一个列表中,请在创建新的列表实例之前将其写入文件或数据库等持久性存储。

或者,您也可以使用

cartList.clear();

但是,我不建议这样做。它可以给你垃圾值并花费更多的时间。 clear方法基本上迭代了list的所有元素,并且像这样将它们变为null。

for(int i = 0; i < cartList.size(); i++){
    cartList.get(i) = null;
}