如何在Java的while循环中使用hasNext()和Scanner?

时间:2015-02-01 20:59:16

标签: java java.util.scanner

我只有几周的Java经验,而且我在我的Intro to Java课程中遇到了一项任务问题。作业是编写一个程序,允许用户输入一个字母,并确定该字母是元音还是辅音。我为其编写的代码工作正常,但是当我尝试添加while循环以便用户可以输入尽可能多的字母时,该程序不再有效。我的教授说循环应该持续到EOF,我按照他给出的轮廓但我仍然遇到麻烦。这是整个代码:

import java.util.Scanner;

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

       String w;

       while(in.hasNext())
       {
            w = in.next();

            System.out.print("Enter a letter: ");
            char letter = in.nextLine().charAt(0);

            int ascii;
            ascii =((int) letter);

            Boolean valid = true; 

            if (ascii < 65 || ((ascii > 90) && (ascii < 97)) || ascii > 122)
            {
                    System.out.println(letter + " is an invalid input");
                     valid = false;
            }
            else if(valid)
            {
                    System.out.print(letter + " is a ");

                    switch (ascii)
                    {
                            case 'a' : 
                            case 'A' : System.out.println("vowel");
                                       break;
                            case 'e' : 
                            case 'E' : System.out.println("vowel");
                                       break;
                            case 'i' : 
                            case 'I' : System.out.println("vowel");
                                       break;
                            case 'o' : 
                            case 'O' : System.out.println("vowel");
                                       break;
                            case 'u' : 
                            case 'U' : System.out.println("vowel");
                                       break;
                            default  : System.out.println("consonant");  
                    }
            }

       }
    }
}            

当我按原样运行代码时,控制台只是保持空白,如果我输入任何内容(只是试图让它做某事),我得到一个错误,说明&#34;线程中的异常&#34;主&#34; java.lang.StringOutOfBoundsException:字符串索引超出范围:0。&#34; 代码在没有while循环的情况下工作,它也可以使用计数器的while循环,所以我知道我的错误与hasNext()有关。如果有人能指出我正确的方向,我将不胜感激!谢谢:))

1 个答案:

答案 0 :(得分:0)

您忽略w并阅读另一行,您尚未检查是否有要阅读的行或您所阅读的行不是空的。你可以用

这样的东西来做
if (in.hasNextLine()) { // <-- check if there is a line.
    String line = in.nextLine(); // <-- read the line.
    if (!line.isEmpty()) { // <-- make sure there is at least one character.
        char letter = line.charAt(0); // <-- get the first character.