我需要帮助让这个循环起作用。可能是因为我真的不知道如何使用循环或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进行循环
答案 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();