Switch语句不会中断

时间:2014-02-11 00:55:55

标签: java switch-statement do-while

我正处于Java 7软件设计学习开关()的开头,并且做... while()和什么不是。

当我在Intelli J IDEA 13中编译并运行程序时,它编译并运行正常,但是当语句完成时,什么都不会中断。

例如,当程序运行时,在案例2中,当我输入3个等级(90,90,90,-1)后输入-1时,它给出了平均值(270),但随后重复...

它应该断开并返回到开关菜单的开头。即使我在菜单中输入3,它也只是显示“No Code Here ...”到无穷大,即使有一个break语句(即使break语句已经过时)。

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);
}
}

2 个答案:

答案 0 :(得分:5)

您输入一次,然后在输入不是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;

答案 1 :(得分:0)

因此,它总是会再次循环并再次点击开关的原因是因为您再也不会更改choice的值。 break语句只是突破switch语句,而不是循环本身。完成switch后,您需要再次询问用户是否要选择其他选项,或者是否要输入4来退出。

break陈述只会突破最内层的......群体?声明?我不确定正确的单词是什么,但它只会突破一个级别,而不是一直都是。

只是为了说出来,永远记住你有一个循环的四个部分:Initialization,Condition,Body和Changer。

初始化:在条件中为变量分配其初始值;这可能发生在do...while();的情况下循环内部,并且可能有多个位置

条件:决定你的循环是否会继续的部分

正文:反复循环的代码

更换者:(这是最经常错过的,我注意到的)一个点或点,其中你的条件中的变量的值已经改变;可能有多个位置和多个变量受到影响