Java 创建一个简单的;购物车“;程序

Java 创建一个简单的;购物车“;程序,java,while-loop,Java,While Loop,我正在尝试使用ArrayList类创建一个购物车程序。我的问题是,当用户完成购物后,我似乎不知道如何退出while循环。项目作为价格输入。以下是我迄今为止的代码: import java.util.Scanner; import java.util.ArrayList; ** * */ public static void shoppingCart() { Scanner inputReader = new Scanner(System.in); Scanner itemRea

我正在尝试使用ArrayList类创建一个购物车程序。我的问题是,当用户完成购物后,我似乎不知道如何退出while循环。项目作为价格输入。以下是我迄今为止的代码:

import java.util.Scanner;
import java.util.ArrayList;
**
* 
*/
public static void shoppingCart()
{
    Scanner inputReader = new Scanner(System.in);
    Scanner itemReader = new Scanner (System.in);
    System.out.print("Would you like to input items? (y/n)");
    String input = inputReader.next();
    ArrayList<Double> items = new ArrayList<Double>();
    while (!input.equals("y") && !input.equals("n"))
    {
        System.out.print("Sorry, we need a (y/n): ");
        input = inputReader.next();
    }

    while (input.equals("y"))
    {
        while (!items.equals("-1"))
        {
            System.out.print("Please enter an item price, or -1 to exit: $");
            items.add(itemReader.nextDouble());
        }
    }
}
import java.util.Scanner;
导入java.util.ArrayList;
**
* 
*/
公共静态void shoppingCart()
{
扫描仪输入读取器=新扫描仪(System.in);
Scanner itemReader=新扫描仪(System.in);
系统输出打印(“是否要输入项目?(y/n)”;
字符串输入=inputReader.next();
ArrayList items=新建ArrayList();
而(!input.equals(“y”)和&!input.equals(“n”))
{
System.out.print(“对不起,我们需要(是/否):”;
input=inputReader.next();
}
while(input.equals(“y”))
{
而(!items.equals(“-1”))
{
System.out.print(“请输入商品价格,或-1退出:$”;
items.add(itemReader.nextDouble());
}
}
}

您只需从用户处获得额外的输入:

while (input.equals("y"))
{
    while (!items.equals("-1"))
    {
        System.out.print("Please enter an item price, or -1 to exit: $");
        items.add(itemReader.nextDouble());
    }

    // get the user's input here and set the input variable with it.

}

我将只使用一个连接到系统的扫描仪。我看没有理由使用两个。

现在,您的循环比实际需要的要多得多。试试这样的。 当您运行这样一个程序时,用户必须输入一个值才能退出该程序,这就是while循环应该基于的,这样它将保持在循环中,直到提供close命令为止

while(!input.equals("-1")){
    //do your stuff here..
    if(!input.equals("y") || !input.equals("n")){
        //Try again...
        //input check
    }else{
        //do your stuff here...
        //input check
    }
}
if(input.equals("-1"){
    //Exit...
}

我应该这样做


“y”检查仅用于检查是否应循环并接受输入。但是,当您完成输入时,您不希望循环并重新开始。if语句是包含循环的所有必要语句。

这段代码中有几个问题:

while (input.equals("y")) //input never changes in the loop so the loop will never end
    {
        while (!items.equals("-1")) //you're comparing ArrayList to a string. You need to 
        //compare list item (such as items.get(items.length()-1) to double (i.e. price)
        {
            System.out.print("Please enter an item price, or -1 to exit: $");
            items.add(itemReader.nextDouble());// there is no way to check what user 
            //entered because you add it to collection right away
        }
    }
你真正想要的是这样的东西:

if (input.eqals("y")) {
  while (true) {
    System.out.print("Please enter an item price, or -1 to exit: $");
    double price = itemReader.nextDouble();
    if (price < 0) {
     break;
    }
    items.add(price);
  }
}
if(input.eqals(“y”)){
while(true){
System.out.print(“请输入商品价格,或-1退出:$”;
double price=itemReader.nextDouble();
如果(价格<0){
打破
}
项目。添加(价格);
}
}

items.equals(“-1”)
-这是什么意思?;)虽然这样做有效,但当用户输入“-1”退出时,您为什么要求他们输入更多信息?当然他们现在只想退出。告诉我while循环如何完成并有
输入。equals(“-1”)
为false。我不确定我是否理解您为什么认为它为false?这不是错的,它只是上下文中的一个输入命令。循环在命令不是“-1”时运行。当输入命令为“-1”时,它将跳出循环并退出程序。对不起,我说的完全错误,它是真的还是假的。while循环条件表示if(不是-1)so if(输入!=-1),它将返回true并继续运行。如果(输入==-1),那么如果(不是-1)返回false并退出。我宁愿
而(价格<0)
,并将if语句更改为
如果(价格>=0)项。添加(价格)
。我喜欢带断点的无限循环,但当你能轻松避免它们时,最好还是谢谢你。在进行了建议的更改后,当我输入-1时,我仍然无法退出while循环。@user2930063啊,这是因为您正在执行items.equals,但您需要先获取最后一项进行检查。查看我的新代码。现在应该可以了。
while (input.equals("y")) //input never changes in the loop so the loop will never end
    {
        while (!items.equals("-1")) //you're comparing ArrayList to a string. You need to 
        //compare list item (such as items.get(items.length()-1) to double (i.e. price)
        {
            System.out.print("Please enter an item price, or -1 to exit: $");
            items.add(itemReader.nextDouble());// there is no way to check what user 
            //entered because you add it to collection right away
        }
    }
if (input.eqals("y")) {
  while (true) {
    System.out.print("Please enter an item price, or -1 to exit: $");
    double price = itemReader.nextDouble();
    if (price < 0) {
     break;
    }
    items.add(price);
  }
}