【问题标题】:how to break out of a void method, if not with "return;"如果不使用“return”,如何突破 void 方法;
【发布时间】:2015-04-28 04:22:28
【问题描述】:

如何跳出 void 方法并返回 switch 方法?

    public static void decrypt() throws FileNotFoundException {
    Scanner kbrd = new Scanner(System.in);
    System.out.println("Enter Key-file name: ");
    String filename = kbrd.nextLine();
    System.out.println("Enter Message-filename: ");
    String mssgFilename = kbrd.nextLine();
    String[] keyArray = loadMessage(filename);
    String[] message = loadMessage(mssgFilename);
    String[] cipher = xor2(message, keyArray);
    String readable = showText(cipher);
    System.out.println("The text:" + readable);
    return;
}

然后这里是切换方法

    System.out.println("Encrypt  1.");
    System.out.println("Decrypt  2.");
    System.out.println("Make Key 3.");
    System.out.println("Quit     4.");
    Scanner scan = new Scanner(System.in);
    String choice = scan.nextLine();

    do {
        switch (choice) {
        case "1":
            encrypt();
            break;
        case "2":
            decrypt();
            break;
        case "3":
            makeKey();
            break;

        }

    } while (choice != "4");

问题是,尽管最后有 return 语句,但无论我选择什么,它都会保留在该方法中,这不应该让我回到 switch 方法吗?

【问题讨论】:

  • 您的代码正在执行您的要求 - 有什么问题?是否有方法阻塞?
  • 您实际上并不需要return;,一旦decrypt 存在,它将返回到它被调用的位置。此外,您可能希望将菜单和 choice 输入放入 do-while 循环
  • 它是如何保持的?您能否更详细地描述实际发生的情况?
  • 请指定所需的行为。
  • 是的,假设我选择了“decript”,我希望它执行一次,然后返回到 switch 语句以进行另一个选择,但它在完成后仍处于 decript 状态。

标签: java switch-statement break


【解决方案1】:

将添加另一个选择的能力放入循环中。您当前正在进入无限循环,因为 choice 没有改变。

String choice;
do {
    choice = scanner.nextLine();
    switch (choice) {
        case "1":
            encrypt();
            break;
        case "2":
            decrypt();
            break;
        case "3":
            makeKey();
            break;
    } 
} while (!choice.equals("4"));

请注意,这与被调用的方法无关;这完全由 do...while 循环调节。

【讨论】:

  • 你错过了这个:while (!choice.equals("4"));.
【解决方案2】:

你有一个无限循环的循环,因为选择只读一次。您输入 3 一次,它会进入条件为 choice != '4' 的循环,并且它始终为真,因为您不会更改您的选择。所以你的函数被一遍又一遍地调用。 (它确实打破了函数,但它被一遍又一遍地调用)将输入行放入循环中。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    相关资源
    最近更新 更多