Java:在完成 Switch 案例后,我的 while 循环崩溃了

凯文拉姆

在 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,您正在调用nextIntnextDoubleinputScanner 对象上。这样做是从控制台读取下一个数值,但不读取数值后面的换行符。因此,当您退出时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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章