如果语句意外运行。我该如何调试?

时间:2014-06-19 22:13:32

标签: java while-loop

此应用程序的目的是获取用户的全名,并将其拆分。打印结果。

if(nameParts.length < 2|| nameParts.length > 3)在第二次或更长时间运行之后以某种方式从循环中获得控制权。我认为namenameParts应该再次为它们分配值。为什么会发生这种情况,我该如何解决这个问题?

   public static void main(String[] args)
        {
            Scanner sc = new Scanner(System.in);
            String choice = "y";

            System.out.println("Welcome to the name parser.\n");

            while(choice.equalsIgnoreCase("y")) {

                System.out.print("Enter a name: ");

                String name = sc.nextLine();
                String[] nameParts = nameSeperate(name);

                if(nameParts.length < 2|| nameParts.length > 3) {
                    System.out.println("Please enter your full name or your first and last name.");
                    continue;
                }
                else if(nameParts.length == 2) {
                    System.out.println("First Name: " + nameParts[0]);
                    System.out.println("Last Name: " + nameParts[0]);
                }
                else {
                    System.out.println("First Name: " + nameParts[0]);
                    System.out.println("Middle Name: " + nameParts[1]);
                    System.out.println("Last Name: " + nameParts[2]);
                }
                System.out.println("Would you like to enter another name? (y/n)");    
                choice = sc.next();
            }            
        }

这是输出:

Welcome to the name parser.

Enter a name: Alfons Pineda
First Name: Alfons
Last Name: Pineda
Would you like to enter another name? (y/n)
y
Enter a name: Please enter your full name or your first and last name.
Enter a name: Alfons Pineda
First Name: Alfons
Last Name: Pineda
Would you like to enter another name? (y/n)
n

1 个答案:

答案 0 :(得分:0)

我不确定,但是对于第一次扫描,您使用sc.nextLine(),而第二次扫描只使用sc.next()。也许在第二个语句中使用sc.nextLine()会有所帮助。可能是\n未读取sc.next()

因此,在第二个循环中,第一次扫描只会读取换行符。