4 回答
TA贡献1872条经验 获得超3个赞
你声明了两次。将第二个声明更改为仅分配给它,您应该没问题:confirm
confirm = userInput.next().charAt(0); // No datatype, so you aren't declaring confirm, just assigning to it
TA贡献1817条经验 获得超6个赞
似乎除了重新声明变量之外,还有一个或多个问题 -confirm
问题 1:
后。它不会提示输入国家/地区,而是提示 。int age = userInput.nextInt()
Press Y to continue or N to start over
此问题的原因:
由于您使用的是扫描仪,因此只会从输入中获取整数值,并且将跳过换行符。int age = userInput.nextInt();
\n
修复
作为解决方法,我在之后添加了这样,它将在之后消耗字符。userInput.nextLine();
int age = userInput.nextInt();
\n
nextInt()
问题 2:
在第 1 次迭代后,此行将导致问题。confirm = userInput.next().charAt(0);
此问题的原因:
在第 2 次迭代中,您不会收到输入名称的提示,因为该行将采用上次迭代作为输入,并将跳过并提示 age 。String name = userInput.nextLine();
\n
How old are you?
修复
作为一种解决方法,我在之后添加了这样一个,它将在之后使用字符,并且下一次迭代将按预期进行。userInput.nextLine();
confirm = userInput.next().charAt(0);
\n
userInput.next().charAt(0)
问题 3:
这个逻辑只期望和在,但在这里你是期望和两者。if (confirm !='y' || confirm !='n')
y
n
lowercase
while(confirm == 'Y'|| confirm == 'y')
y
Y
修复 - 我已经在下面的代码中添加了必要的更改,但建议您将其更改为开关盒。
注意:
不建议在每次输入后都这样做,您可以简单地解析它。有关详细信息,请参阅此处。
userInput.nextLine()
我不推荐它,但这会让你的程序工作
Scanner userInput = new Scanner(System.in);
char confirm;
do {
System.out.println("Welcome to the story teller");
System.out.println("What is your name?");
String name = userInput.nextLine();
System.out.println("How old are you?");
int age = userInput.nextInt();
userInput.nextLine(); //adding this to retrieve the \n from nextint()
System.out.println("What country would you like to visit?");
String country = userInput.nextLine();
System.out.println("Great! So your name is " + name + ", you are " + age
+ "years old and you would like to visit " + country + " ?");
System.out.println("Press Y to continue or N to start over");
confirm = userInput.next().charAt(0);
userInput.nextLine(); //adding this to retrieve the \n this will help in next iteration
System.out.println(name + " landed in " + country + " at the age of " + age + ".");
if (confirm == 'y' || confirm == 'Y') {
continue; // keep executing, won't break the loop
} else if (confirm == 'n' || confirm == 'N') {
break; // breaks the loop and program exits.
} else {
System.out.println("Sorry that input is not valid, please try again");
// the program will exit
}
} while (confirm == 'Y' || confirm == 'y');
}
建议您使用 switch case 而不是 if 比较并解析字符和整数输入并删除任意添加作为解决方法。confirmationuserInput.nextLine()
TA贡献1853条经验 获得超9个赞
修复的另一个选项是删除不必要的声明char confirm;
并仅在需要时使用
char confirm = userInput.next().charAt(0);
根据@ScaryWombat建议,您需要更改变量的作用域(当前作用域与while
do
)
添加回答
举报