2015-04-28 45 views
1

我该如何摆脱无效方法并回到切换方法?如何摆脱无效的方法,如果没有“返回”;

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语句,应该不会带来我回到开关方法?

+0

你的代码正在做你在问什么 - 问题是什么?有些方法阻止? –

+0

你实际上不需要'return;',一旦存在'decrypt',它就会返回到被调用的地方。此外,您可能希望将菜单和“选择”输入放入“do-while”循环中 – MadProgrammer

+2

它如何保持?你能更真实地描述真正发生的事情吗? – khajvah

回答

6

把能力添加到循环中的另一种选择。您目前正在进入无限循环,因为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循环来调节。

+0

呃,非常感谢@Makoto,我真的应该去睡觉! – recycledElectrons

+0

你错过了这个:'while(!choice.equals(“4”));'。 –

2

你有一个循环进入无限循环,因为选择只读一次。你输入3次,并进入条件为choice != '4'的循环,并且始终如此,因为你不改变你的选择。所以你的功能被一次又一次地调用。 (它的确触发了函数的,但它被一次又一次地调用)将输入线放入循环中。