为什么我的Java for / if / else语句输出重复项

时间:2014-10-28 18:28:09

标签: java if-statement for-loop

我正在练习在Java中使用循环,我创建了这个if / else循环来不断询问是否有其他客户,如果用户输入是

  • "Yes"然后它要求客户收费。
  • "No"然后我将总结账单(我还没有为此编写代码,所以忽略了那部分)。

我遇到的问题是在我输入初始账单金额之后,代码询问是否有其他客户应该这样,但是过早地询问他们的账单金额然后再询问是否有另一位客户第二次?

我的主要问题是,我是否构造错误?我怎么能让循环不输出两次和/或过早的东西?

Scanner input = new Scanner(System.in);
double total;

System.out.println("Please enter your bill amount.");
double bill0 = input.nextDouble();

for(int c = 0; c > -1; c++) {
    System.out.println("Is there another customer?");
    String customer = input.nextLine();

    if (customer.equalsIgnoreCase("Yes")) {
        System.out.println("Please enter their bill.");
        double bill = input.nextDouble();
    } else {
        System.out.println("Okay, let's total your bill amount.");
    }
}

4 个答案:

答案 0 :(得分:6)

for(int c = 0; c > -1; c++) 

这个循环将(基本上)永远运行,因为c总是大于-1。 (实际上这个循环将一直运行,直到溢出发生,因为c的值太大而不适合分配给这个整数的可用存储空间。你可以在这里参考更多信息:http://en.wikipedia.org/wiki/Integer_overflow

更简洁的结构方法是做一些事情:

String answer = "Yes";
while (answer.equals("Yes"))
{
    System.out.println("Please enter your bill amount.");
    double bill0 = input.nextDouble();

    System.out.println("Is there another customer? (Yes or No)");
    answer = input.nextLine();    
}  

当然,如果用户输入了您不期望的输入,则需要添加错误处理。此外,这比真正的实现更多伪代码。

在此之后,while循环是您想要总计金额的时间。此外,在while循环中,您可能希望有一个变量来保持总量。类似的东西:

total += bill0; 

行后:

double bill0 = input.nextDouble(); 

可能会成功。

答案 1 :(得分:0)

马特琼斯是正确的 - 你的循环(基本上)永远运行 - (溢出意味着它不会真正永远运行,但它足够接近)。

一旦用户输入“否”,您似乎正试图打破循环。这意味着您不知道需要多少次迭代,因此while循环比for循环更适合此任务。所以让我们使用while循环来做到这一点。

Scanner input = new Scanner(System.in);
double total;

System.out.println("Please enter your bill amount.");
double bill0 = input.nextDouble();

//loop until the user enters the phrase "No".
while(true) {
    System.out.println("Is there another customer?");
    String customer = input.nextLine();

    if (customer.equalsIgnoreCase("Yes")) {
        System.out.println("Please enter their bill.");
        double bill = input.nextDouble();
    } else if(customer.equalsIgnoreCase("No") {
        System.out.println("Okay, let's total your bill amount.");
        break; //End the loop
    } else{
        System.out.println("Sorry, unrecognized input. Please enter yes or no.");
    }
}
//Do post-loop totaling and stuff.

答案 2 :(得分:0)

我会使用while循环

    while (scannerInput.equals("yes")) 
        //do your thing
    }

一旦扫描仪输入不等于"是"它将退出while并执行其他操作

for循环更多地迭代一组数据,而不是等待状态变化的while

答案 3 :(得分:0)

Scanner input = new Scanner(System.in);
double total;

System.out.println("Please enter your bill amount.");
double bill0 = input.nextDouble();

System.out.println("Is there another customer?");

while((String customer = input.nextLine()).equalsIgnoreCase("Yes")) {

     System.out.println("Please enter their bill.");
     double bill = input.nextDouble();

}

System.out.println("Okay, let's total your bill amount.");