簡體   English   中英

切換語句不會中斷

[英]Switch statement won't break

我正在學習Java 7軟件設計的開始switch()並做... while()而不是什么。

當我在Intelli J IDEA 13中編譯並運行該程序時,它可以編譯並正常運行,但是在語句完成后不會中斷任何操作。

例如,當程序在第2種情況下運行時,當我輸入3個等級(90、90、90,-1)后輸入-1時,它會給出平均值(270),但隨后會重復...

它應該會中斷並返回到切換菜單的開頭。 即使我在菜單上輸入3,即使使用break語句(即使break語句已過時),它也只會顯示“ No Code Here ...”為無窮大。

import java.util.Scanner;
public class TestingPlatform {
public static void main(String[] args) {   

Scanner input = new Scanner(System.in);
    System.out.println("Enter 1 to set percentage of total for new grades, 2 to enter new      grades, 3 to get average, and 4 to quit: ");
    int choice = input.nextInt();

    do {
        switch (choice) {
            case 1:
                System.out.println("Enter percent to multiply by: ");
                double percent = input.nextDouble();
                System.out.println("You entered " + percent);
                break;
            case 2:
                int total;
                int gradeCounter;
                int grade;
                double average;
                total = 0;
                gradeCounter = 0;

                System.out.println("Enter grade or -1 to quit: ");
                grade = input.nextInt();

                while (grade != -1) {
                    total = total + grade;
                    gradeCounter = gradeCounter + 1;
                    System.out.println("Enter grade or -1 to quit: ");
                    grade = input.nextInt();
                }
                if (gradeCounter != 0) {
                    average = (double) total / gradeCounter;

                    System.out.printf("\nTotal of the %d grades is %d\n", gradeCounter, total);
                    System.out.printf("Class average is %.2f\n", average);
                } else
                    System.out.println("No grades were entered.");
                break;
            case 3:
                System.out.println("No code here yet....");
                break;

        }
    } while (choice != 4);
}
}

您只獲取一次輸入,然后在輸入未為4時循環。由於輸入永不更改,因此將永遠存在。

break開關內剛跳出的switch 然后,您繼續循環。

將這些行:

System.out.println("Enter 1 to set percentage of total for new grades, 2 to enter new      grades, 3 to get average, and 4 to quit: ");
choice = input.nextInt();

do循環內部,而不是外部。 然后,您將在每次循環時請求新的輸入。

但是,您必須在循環外聲明choice ,因為您在底部的while引用了它。

將此行放在do循環上方:

int choice;

因此,它總是會再次循環並再次按下開關的原因是,您再也不會更改choice的值了。 break語句僅脫離switch語句,而不是循環本身。 完成switch您需要再次詢問用戶是否要選擇其他選項,或者是否要輸入四個退出選項。

break語句只會跳出最里面的...組? 聲明? 我不知道正確的詞是什么,但是它只會分解出一個層次,而不是全部。

只是為了說一下,請始終記住循環包含四個部分:初始化,條件,主體和轉換器。

初始化:為條件中的變量分配初始值; do...while();的情況下,這可能會在循環內發生do...while(); 而且可能有多個位置

條件:決定循環是否繼續的部分

正文:不斷循環的代碼

換器:(這是我注意到的最常錯過的地方)一個或多個斑點,您的狀態中的變量的值正在更改; 可能有多個位置和多個變量受到影響

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM