【问题标题】:Switch Statement not exiting loop. (Java)Switch 语句未退出循环。 (爪哇)
【发布时间】:2016-03-22 17:27:21
【问题描述】:

我有一个简单的菜单系统设置,用户点击 8 离开。但是由于某种原因,当我在测试期间达到 8 时,它只是回到循环的顶部,就像什么都没发生一样。

package potluck;
import java.util.*;

import potluck.*;

public class Controller {
private Scanner input;


private final static int USER_LOGIN = 0;
private final static int CREATE_MEMBER = 1;
private final static int CREATE_ADMIN = 2;
private final static int CREATE_RECIPE = 3;
private final static int COMMENT = 4;
private final static int DELETE_RECIPE = 5;
private final static int EXIT = 8;

public Controller(){
    input = new Scanner(System.in);
    startUp();//no better name to be thought of
}

public void startUp() {
    // TODO Auto-generated method stub
    int choice;
    do {
        this.displayMenu();
        choice = input.nextInt();
        input.nextLine();// clears carriage return

        //depending on choice takes to a different menu
        switch (choice) {

        case CREATE_MEMBER: 
            Member member = new Member();
            break;
//     case CREATE_ADMIN: 
//      member.addAdmin();
//              break;
        case CREATE_RECIPE:
            Recipe.addRecipe();
            break;
        case COMMENT:
            Recipe.addComment();
            break;
        case DELETE_RECIPE:
            Recipe.deleteRecipe();
            break;
        case EXIT:
            System.out.println("Thanks for using our software");
            break;
        default:
            System.out.println("Error, Invalid selection.");
        }
    } while (choice != 8); //choice 8 exits
}
private void displayMenu() {
    System.out.println("1 Create Member");
    System.out.println("2 Create Admin Member");
    System.out.println("3 Create Recipe");
    System.out.println("4 Leave Comment");
    System.out.println("5 Delete Recipe");
    System.out.println("8 Exit");
    System.out.println("Please enter menu option, to exit enter 8");
    }
}

在测试中它声称选择是 8,这应该会破坏 do while...但不会...

更新:在复制代码时,我留下了一些被告知不要使用的解决方法。我在选项 8 下有 system.exit,但被告知这是错误代码

【问题讨论】:

  • 它之前做了一个System.exit(choice);
  • 我测试了你的代码,用 8 执行 System.exit 并终止程序
  • @gfelisberto 你是如何测试它的? MemberRecipe 是 Java 中的类吗?
  • Sam Murdock,您可能在重新编译之前忘记保存文件了。或者干脆忘记重新编译它。
  • @Gendarme 刚刚评论了这些行。唯一需要测试的部分是查看输入的键盘是否被读取。

标签: java loops switch-statement do-while


【解决方案1】:

对不起大家。我是个白痴。在我启动它的主要地方,我实例化了一个新控制器(这是您正在查看的类),它在构造函数中启动菜单。然后我调用了 startup() 方法。这意味着它运行良好,它只运行了两次,因为我很笨。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Controller cntlr = new Controller();    
    cntlr.startUp();
}


public Controller(){
    input = new Scanner(System.in);
    startUp();//no better name to be thought of
}

public void startUp() {
    // TODO Auto-generated method stub
    int choice;
    do {
        this.displayMenu();
        choice = input.nextInt();
        input.nextLine();// clears carriage return

        //depending on choice takes to a different menu
        switch (choice) {

        case CREATE_MEMBER: 
            Member member = new Member();
            break;
        case CREATE_ADMIN: 
            member.addAdmin();
            break;
        case CREATE_RECIPE:
            Recipe.addRecipe();
            break;
        case COMMENT:
            Recipe.addComment();
            break;
        case DELETE_RECIPE:
            Recipe.deleteRecipe();
            break;
        case EXIT:
            System.out.println("Thanks for using our software");

            break;
        default:
            System.out.println("Error, Invalid selection.");
        }
    } while (choice != 8); //choice 8 exits
}
private void displayMenu() {
    System.out.println("1 Create Member");
    System.out.println("2 Create Admin Member");
    System.out.println("3 Create Recipe");
    System.out.println("4 Leave Comment");
    System.out.println("5 Delete Recipe");
    System.out.println("8 Exit");
    System.out.println("Please enter menu option, to exit enter 8");
    }
}

TL;博士。我很笨,构造函数是我应该多注意的东西。

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 2020-04-13
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2013-12-20
    相关资源
    最近更新 更多