java—如果不使用“return

nsc4cvqm  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(566)

如何从一个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方法吗?

bis0qfac

bis0qfac1#

您有一个无限循环,因为选项是只读的。你输入3一次,它就会进入一个循环 choice != '4' ,这永远是真的,因为你不会改变你的选择。所以你的函数被反复调用(它确实中断了函数,但它被反复调用)将输入行放入循环中。

xdyibdwo

xdyibdwo2#

将添加另一个选项的能力放入循环中。你正在进入一个无限循环,因为 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循环调节。

相关问题