我只有几周的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()有关。如果有人能指出我正确的方向,我将不胜感激!谢谢:))
答案 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.