【发布时间】:2023-04-01 00:59:02
【问题描述】:
对于案例“1”,它似乎只是循环而不是跳转到drunkSong();。如果用户选择案例“2”,它将正常工作并要求用户输入数字以返回 int“BeerNum”。
案例“1”需要接受默认值 99,而案例“2”需要接受用户输入。
我附上了代码,如果你能指出我的错误或我哪里出错了。
package PartOne;
import java.util.Scanner;
public class View {
public void begin() {
BeerSong.drunkSong();
}
private int setBeerNum() {
return beerNum;
}
private int beerNum;
public Integer Menu() {
Scanner in = new Scanner(System.in);
// print menu
for (int i = 1; i <= 3; i++)
System.out.println(i + ". Menu item #" + i);
System.out.println("0. Quit");
// handle user commands
boolean quit = false;
int menuItem;
do {
System.out.print("Choose menu item: ");
menuItem = in.nextInt();
switch (menuItem) {
case 1:
System.out.println("Default ");
begin();
while (true)
try {
//where I have made a mistake
beerNum = 99;
this.beerNum = setBeerNum();
break;
} catch (NumberFormatException BecauseIsaidSo) {
System.out.print("Try again: ");
}
//working
case 2:
System.out.println("Enter your number to play the song: ");
Scanner scan = new Scanner(System.in);
while (true)
try {
beerNum = Integer.parseInt(scan.nextLine());
this.beerNum = setBeerNum();
return beerNum;
} catch (NumberFormatException BecauseIsaidSo) {
System.out.print("Try again: ");
}
case 0:
quit = true;
break;
default:
System.out.println("Invalid choice.");
}
}
while (!quit) ;
System.out.println("Bye-bye!");
return null;
}
}
【问题讨论】:
-
您是否尝试添加中断;每种情况?
-
@SomasundaramSekar 这不会有丝毫不同。
-
drunkSong是做什么的?此外,您应该为您的 switch case 使用常量或枚举。setBeerNum对于 getter 来说也是一个很奇怪的名字。您可以提高此代码的可读性,干净的代码是无错误代码的第一步。 -
另外,您的代码无法编译:
setBeerNum()与正确的签名不匹配。你能提供实际可编译和可执行的代码吗? -
修正编译问题,复制粘贴错误,抱歉。我有一段时间没想到会有回应,我想我会有时间整理一下。抱歉第一次发帖。
标签: java loops switch-statement java.util.scanner