如何重新启动do语句?

时间:2016-01-29 03:30:21

标签: java validation

我真的不知道怎么解释这个,但我们走了。

我正在测试一些我必须制作的更大程序的东西。在程序中,我必须验证来自用户的输入,以查看它是否被接受为有效答案。

我有代码,如果输入无效,它会说出来但如果我试图输入另一个字母,代码会因此错误而崩溃:

Enter a letter:
f
Your answer is not valid.
A
Enter a letter:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:695)
    at example.main(example.java:18)

以下是代码:

import java.util.Scanner;

public class example
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);


        boolean UserInput;

        do
        {
                char user_answer = 0;


                System.out.println("Enter a letter:");
                user_answer=input.nextLine().charAt(0);

                if ( user_answer == 'A')
                {

                    UserInput = true;
                }
                else if (user_answer == 'B')
                {

                    UserInput = true;
                }
                else if (user_answer == 'C')
                {

                    UserInput = true;
                }
                else if (user_answer == 'D')
                {

                    UserInput = true;
                }
                else
                {
                    System.out.println("Your answer is not valid.");
                    UserInput = false;
                    input.next();
                }


        }

        while   (!UserInput);


    }

}       

3 个答案:

答案 0 :(得分:0)

删除input.next();,它会正常工作。原因是当您使用input.next()时,它会读取用户键入的下一个字符,而不会退出该行。然后当input.nextLine()执行时,它会读取同一行,但会在数字后面读取。由于数字后面没有任何内容,因此它不会读取任何内容,而charAt(0);会超出范围。

答案 1 :(得分:0)

删除input.next()或将其更改为input.nextLine() 发生的事情是input.next()将捕获您输入的A。然后你回到do的开头并重新开始,然后input.nextLine()但你已经按enter输入AA是由input.next()消耗。

答案 2 :(得分:0)

 import java.util.Scanner;

  public class Example
   {
      public static void main(String[] args)
      {
            Scanner input = new Scanner(System.in);


     boolean UserInput;

     do
      {
            char user_answer = 0;


            System.out.println("Enter a letter:");
           // user_answer=input.nextLine().charAt(0);
           user_answer=input.next().charAt(0);

            if ( user_answer == 'A')
            {

                UserInput = true;
            }
            else if (user_answer == 'B')
            {

                UserInput = true;
            }
            else if (user_answer == 'C')
            {

                UserInput = true;
            }
            else if (user_answer == 'D')
            {

                UserInput = true;
            }
            else
            {
                System.out.println("Your answer is not valid.");
                UserInput = false;
               // input.next();
            }


       }

        while(!UserInput);

     }

   }