2012-12-09 36 views
0

我正在做一个任务,我必须编写一个程序来加密和解密Caeser密码。我遇到困难的部分不是加密或解密,而是另一个需求,那就是我必须提供一个菜单,以便用户可以选择加密,解密或退出。此外,程序应该继续提示使用,直到使用选择退出。到目前为止我的代码是:Java菜单循环问题;程序循环过快?

import java.util.*; 
public class CaeserShiftTester 
{ 
    public static void main (String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     String choice = ""; 

     while (!choice.equalsIgnoreCase("C")) 
     { 

     System.out.println("\nPlease select an option"); 
     System.out.println("[A] Encrypt Code"); 
     System.out.println("[B] Decrypt Code"); 
     System.out.println("[C] Quit"); 

     choice = in.next(); 

     if(choice.equalsIgnoreCase("A")) 
     { 
      System.out.println("Please enter your key:"); 

      final int KEY = in.nextInt(); 
      System.out.println(CaeserShiftEncryption.shiftAlphabet(KEY)); 

      System.out.println("\nPlease enter your message:"); 
      String message = in.nextLine(); 

      System.out.println(CaeserShiftEncryption.encryptCode(message,KEY)); 


     } 

     if(choice.equalsIgnoreCase("C")) 
     { 
      System.out.println(); 
     } 
    } 


    } 

} 

我的问题是,在打印后的“新字母”到屏幕上,程序返回到开始的时候,要求用户选择A,B,或C 。使用永远不会有机会输入要加密的消息。不幸的是,我需要打印生成的新字母,并且我无法想象这里可能会出现什么问题。我希望你们能帮助我。

此外,shiftAlphabet和encryptCode方法都具有完整的功能。

+1

回到最初应该询问用户的选择,对吧?否则,用户在加密某些内容后无法解密,反之亦然。 – Jimmt

+0

Put System.out.println(choice);在第一个身体,看看你得到什么。 – DrinkJavaCodeJava

回答

1

把这个网站看看:http://www.java-made-easy.com/java-scanner.html

特别

不要试图扫描文字与nextLine();在使用相同的扫描仪后使用nextInt()!它不与Java扫描器和许多Java开发人员以及工作选择只使用另一个扫描仪的整数混合不同类型的扫描时,然后使用相同的扫描实例与nextLineScanner类发生

+0

谢谢!我甚至没有注意到我为他们使用了相同的扫描仪。该程序现在工作正常。 – user1888863

0

问题。

当您遇到这样的问题时,尝试创建一个新的扫描器实例。一个简单的治疗方法是使用1台扫描仪使用nextLine,另一台使用其他设备。

在过去,我已经受够了在使用扫描仪的问题,当它来到nextnextLine,治愈我是简单地坚持只使用nextLine