Java循环:为什么这个循环没有按预期停止?

时间:2014-02-08 06:04:12

标签: java loops

我需要帮助让这个循环起作用。可能是因为我真的不知道如何使用循环或if语句。但是我认为在10号之后接受免费酸奶时我需要使用If语句。

import java.util.Scanner;

public class Foothill {
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        int numPurchases, totalPurchased;
        boolean correct;
        String menu;
        numPurchases = 0;
        totalPurchased = 0;
        correct = false;
        while(!correct) 
        {
            System.out.println("Menu:");
            System.out.println("  P (Process Purchase)");
            System.out.println("  S (Shut down)");
            menu = scanner.nextLine();
            if (menu.charAt(0)=='S' || menu.charAt(0)=='s'){
                System.exit(0);
            } else if (menu.charAt(0)=='P' || menu.charAt(0)=='p'){
                continue;
            }
            System.out.println("Your choice: " + menu.charAt(0));
            System.out.println("How many yougurts would you like to buy?");
            numPurchases = scanner.nextInt();
            totalPurchased += numPurchases;
            if (totalPurchased > 0 || totalPurchased < 10){
                System.out.println("you have purchased " + totalPurchased + " yogurts");
            } else if (totalPurchased >= 10){
                System.out.println("Congradulations you have recieve a free Yogurt");
                System.out.println("Remainding yogurt credits: " + (totalPurchased-10));
            }
        }
    }
}

我真的不知道如何使用循环,这可能是我的问题,因为我从来没有使用false和true进行循环

3 个答案:

答案 0 :(得分:0)

只需删除以下语句,然后循环就可以了:

else if (menu.charAt(0)=='P' || menu.charAt(0)=='p'){
                continue;
            }

答案 1 :(得分:0)

您的代码存在许多问题。 这是解决方案:

import java.util.Scanner;

public class Foothill {
    public static void main(String args[]){
          Scanner scanner = new Scanner(System.in);
          int numPurchases, totalPurchased;
          boolean correct;
          String menu;
          numPurchases = 0;
          totalPurchased = 0;
          correct = false;
          while(!correct){
              System.out.println("Menu:");
              System.out.println("  P (Process Purchase)");
              System.out.println("  S (Shut down)");
              menu = scanner.next();
              if (menu.charAt(0)=='S' || menu.charAt(0)=='s'){
                System.exit(0);
              }
              else if (menu.charAt(0)=='P' || menu.charAt(0)=='p'){
                  System.out.println("Your choice: " + menu.charAt(0));
                  System.out.println("How many yougurts would you like to buy?");
                  numPurchases = scanner.nextInt();
                  totalPurchased += numPurchases;
              }

              if (totalPurchased > 0 && totalPurchased < 10){
                 System.out.println("you have purchased " + totalPurchased + " yogurts");
              }
              else if (totalPurchased >= 10){
                 System.out.println("Congradulations you have recieve a free Yogurt");
                 System.out.println("Remainding yogurt credits: " + (totalPurchased-10));

              }
          }
          scanner.close();
      }
  }

如上所述,您可能需要通过将正确设置为true来摆脱while循环。

答案 2 :(得分:0)

正如user2357112在评论中所述,||运算符不适合测试数字是否在给定范围内,因为该条件对于任何数字都是正确的。

您可以将条件更改为使用&&,但我不知道为什么您只在某种情况下显示该消息。您可以在每次购买结束时打印它,然后在用户收到免费赠品时打印额外的消息。

System.out.println("you have purchased " + totalPurchased + " yogurts");

if (totalPurchased >= 10){
    System.out.println("Congradulations you have recieve a free Yogurt");
    System.out.println("Remainding yogurt credits: " + (totalPurchased-10));
}

您还需要知道来自用户输入的Scanner#nextInt() does NOT consume the trailing new-line character。但是,Scanner#nextLine()会从读取输入中修剪此字符。因此,您在购买后将获得StringIndexOutOfBoundsException,因为在菜单中用户选择的Scanner#nextLine()读取将占用尾随的新行字符,并且您的程序将尝试获取空字符串的第一个字符。

如链接线程中所述,您可以通过在读取整数输入后再次调用Scanner#nextLine()来解决此问题,以便从缓冲区中删除换行符,如下所示:

numPurchases = scanner.nextInt();
scanner.nextLine();