java:我的while循环在完成switch case之后崩溃了

moiiocjp  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(356)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

23天前关门了。
改进这个问题
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
anauzrmj

anauzrmj1#

我所期待的是发生在里面 itsACircle ,你在打电话吗 nextInt 或者 nextDoubleinput 扫描仪对象。这样做是从控制台读取下一个数值,但不读取数值后面的换行符。所以当你离开的时候 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 包含空字符串。

相关问题