Java菜单循环问题;程序循环太快了?

时间:2012-12-09 04:02:19

标签: java loops menu

我正在进行一项任务,我必须编写一个程序来加密和解密Caeser密码。我遇到麻烦的部分不是加密或解密,而是另外一个要求,即我必须提供一个菜单,以便用户可以选择加密,解密或退出。此外,程序应该继续提示使用,直到用户选择退出。到目前为止我的代码是:

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方法都是完全正常的。

2 个答案:

答案 0 :(得分:1)

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

特别是

  

不要尝试使用nextLine()扫描文本;在使用相同扫描仪的nextInt()之后!它与Java Scanner不兼容,许多Java开发人员选择只使用另一个Scanner for integers

答案 1 :(得分:0)

混合不同类型的扫描时,Scanner类会出现问题,然后使用与nextLine相同的扫描程序实例。

当您遇到此类问题时,请尝试创建新的Scanner实例。一个简单的方法是使用1个扫描仪来使用nextLine而另一个扫描仪用于其他所有内容。

过去我在使用扫描仪nextnextLine时遇到了问题,我的治疗方法就是坚持只使用nextLine