在 switch 语句崩溃后,我在 Java 中的 while 循环在下一步中不起作用。用户可以选择要绘制的图形,然后选择一些参数。绘制后,菜单应该再次出现,但绘制后的所有操作都将代码从开关盒扔到默认情况下,我不能再在控制台中写了
Scanner input = new Scanner(System.in);
Boolean isValid = true;
while (isValid) {
System.out.println("Welche Figur möchten Sie eingeben? ");
System.out.println("(Auswahl: Rechteck, Dreieck oder Kreis)");
String choosenFigure = input.nextLine();
switch (choosenFigure.toLowerCase()) {
case "reechteck":
itsARectangle(input);
break;
case "dreieck":
itsATriangle(input);
break;
case "kreis":
itsACircle(input);
break;
default:
System.out.println("Keine gueltige Figur!");
break;
}
}
测试用例:
Welche Figur möchten Sie eingeben?
(Auswahl: Rechteck, Dreieck oder Kreis)
Kreis
Geben Sie den Mittelpunkt an:
X: 50
Y: 50
Geben Sie die Anzahl der Segmente an:
10
Geben Sie den Radius an:
50
Flaecheninhalt:
22.21441469079183
Welche Figur möchten Sie eingeben?
(Auswahl: Rechteck, Dreieck oder Kreis)
Keine gueltige Figur! // not what i want
Welche Figur möchten Sie eingeben?
(Auswahl: Rechteck, Dreieck oder Kreis)
// cant write anymore
我期望发生的是在内部itsACircle
,您正在调用nextInt
或nextDouble
在input
Scanner 对象上。这样做是从控制台读取下一个数值,但不读取数值后面的换行符。因此,当您退出时itsACircle
,循环返回,然后input.nextLine
第二次调用时,用户输入一个数字并点击“Return”时仍在输入流中的换行符会导致该调用返回一个空行,而没有您在终端输入任何东西。
对此的解决方案是nextLine
在读取数字后调用额外的时间,然后再调用nextLine
并使用结果。这将从输入流中删除额外的换行符,以便当您nextLine
再次调用以获取一行输入时,您的程序将等待来自使用的输入并正确执行。这是使用 Scanner 从控制台读取输入时遇到的常见问题。
为了清楚起见,这里有一个例子:
String aString = input.nextLine();
int aNumber = input.nextInt();
int anotherNumber = input.nextInt();
input.nextLine();
String anotherString = input.nextLine();
如果没有第 4 行,第 5 行将不会因用户输入而停止,并且会导致anotherString
包含一个空字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句