【发布时间】:2014-03-19 04:54:31
【问题描述】:
当我运行这段代码时,这是一个包含许多不同选项的菜单。它由许多循环组成。其中一些我还没有做。我的抛硬币模拟器有问题。虽然我有一个 for 循环,但循环只循环一次,而不是直到用户选择“0”退出程序并返回主菜单,但我的另一个问题是如果 0 是模拟器不会返回主菜单选择。到底是怎么回事???这是我的麻烦的一个例子。
输入种子值:3
===== CS302工具箱=====
T > 抛硬币模拟器
G > 等级估算器
C > 颜色挑战
问>退出 输入代码字母供您选择:t
抛硬币模拟器
输入 0 退出。扔了多少? 4
3.0 正面和 1.0 反面意味着 75.0% 是正面
然后模拟器不问“输入0退出。扔了多少?”再次。事实上,如果我按另一个数字,比如 3,我会得到这个。零也不会结束模拟器并再次提示主菜单。
3 不是一个有效的选择。
===== CS302工具箱=====
T > 抛硬币模拟器
G > 等级估算器
C > 颜色挑战
问>退出
System.out.println("");
System.out.println( "===== CS302 TOOL BOX =====\nT > COIN TOSS SIMULATOR\nG > GRADE ESTIMATOR\nC > COLOR CHALLENGE\nQ > QUIT");
{
Scanner anotherScanner = new Scanner(System.in);
boolean usersSelection = false;
String c;
while (!usersSelection)
{
{
System.out.print(""+ "Type code letter for your choice: ");
}
if (anotherScanner.hasNext("q|Q"))
{
c = anotherScanner.next();
usersSelection = true;
System.out.println(""
+ ""
+ "Good-Bye");
break;
}
if (anotherScanner.hasNext("t|T")){
c = anotherScanner.next();
usersSelection = true;
System.out.println("");
System.out.println("COIN TOSS SIMULATOR");
System.out.println("");
System.out.println("Enter 0 to quit. How many tosses?");
Random rand = new Random();
Scanner insideScanner = new Scanner(System.in);
int feeble = insideScanner.nextInt();
double heads = 0;
double tails = 0;
boolean headsvsTails;
headsvsTails = rand.nextBoolean();
for (int i =0; i < feeble; i++)
{
headsvsTails = rand.nextBoolean();
if (headsvsTails == true){ heads++;}
else {tails++;}
}
System.out.println(heads + " heads and " + tails + " tails means " + (heads/(heads+tails)*100 + "% were heads"));
}
if (anotherScanner.hasNext("g|G"))
{
c = anotherScanner.next();
usersSelection = true;
System.out.println("");
System.out.println("GRADE ESTIMATOR");
Scanner gradeE = new Scanner(System.in);
double exam1;
double possiblePts;
double programPts;
double programPossible;
double avg;
double avge;
double avrg;
System.out.print("Enter exam points earned (int): ");
exam1=gradeE.nextDouble();
if (exam1<0)
{System.out.print("Enter exam points earned (int): ");
exam1=gradeE.nextDouble();}
System.out.print("Enter exam points possible (int): ");
possiblePts=gradeE.nextDouble();
if (possiblePts<0) {System.out.print("Enter exam points possible (int): ");
possiblePts=gradeE.nextDouble();}
System.out.print("Enter program points earned (int): ");
programPts=gradeE.nextDouble();
if (programPts<0) {System.out.print("Enter program points earned (int): ");
programPts=gradeE.nextDouble();}
System.out.print("Enter program points possible (int): ");
programPossible=gradeE.nextDouble();
if (programPossible<0) {System.out.print("Enter program points possible (int): ");
programPossible=gradeE.nextDouble();}
avge = exam1+programPts;
avrg = possiblePts+programPossible;
avg = avge/avrg*100;
if (avg<60)
System.out.println("Grade estimate for " +avg+ "% is a F");
else if (avg<70)
System.out.println("Grade estimate for " +avg+ "% is a D");
else if (avg<80)
System.out.println("Grade estimate for " +avg+ "% is a C");
else if (avg<90)
System.out.println("Grade estimate for " +avg+ "% is a B");
else if (avg>=90)
System.out.println("Grade estimate for " +avg+ "% is a A");
}
【问题讨论】:
-
你的格式太糟糕了。您需要缩进您的代码,以便更容易理解。此外,您可能想学习如何创建自己的方法和对象。将所有代码都放在 main() 中并不是一个好主意。
-
我没有其他方法...
-
我的格式有什么问题?我是编程菜鸟。
-
缩进。在每个 if 语句或
for/while循环之后,您需要将代码缩进约 4 个空格。它使阅读更容易。 -
唯一的问题是抛硬币的次数是相加的,而不是独立的。另外 0 不会重定向到主菜单,有什么想法吗?例如投币模拟器 输入 0 退出。扔了多少? 3 2.0 正面和 1.0 反面意味着 66.66666666666666% 是正面 输入 0 退出。扔了多少? 3 4.0 正面和 2.0 反面意味着 66.66666666666666% 是正面 输入 0 退出。扔了多少? 0
标签: java loops menu user-input options-menu