use*_*743 4 java string exception
我有这个问题,一旦我输入我的第一个输入程序崩溃,我得到
字符串索引超出范围:0
我看了别处并试图找到我的错误,但我发现了不同的问题,而不是我的问题.有人可以告诉我哪里出错了?
感谢您的帮助,以下是代码:
import java.util.Scanner;
public class Assignment1Q2 {
public static void main(String[] args) {
System.out.println("Thank you for your call,\nPlease take some time to answer a few questions");
collectData();
}//end of main
public static void collectData() {
Scanner userInput = new Scanner(System.in);
int age;
char gender;
char show;
int over30MY = 0, over30FY = 0, under30MY = 0, under30FY = 0;
int over30MN = 0, over30FN = 0, under30MN = 0, under30FN = 0;
System.out.println("\nWhat is your age?\n");
age = userInput.nextInt();
System.out.println("Male or Female (Enter M or Y)");
gender = userInput.nextLine().charAt(0);
gender = Character.toLowerCase(gender);
System.out.println("Do you watch the show regularly? (Enter Y or N)");
show = userInput.nextLine().charAt(0);
show = Character.toLowerCase(show);
if((age > 30) && (gender == 'm') && (show == 'y')) {
over30MY++;
}
else if((age > 30) && (gender == 'f') && (show == 'y')) {
over30FY++;
}
else if((age < 30) && (gender == 'm') && (show == 'y')) {
under30MY++;
}
else if((age < 30) && (gender == 'f') && (show == 'y')) {
under30FY++;
}
else if((age > 30) && (gender == 'm') && (show == 'n')) {
over30MN++;
}
else if((age > 30) && (gender == 'f') && (show == 'n')) {
over30FN++;
}
else if((age < 30) && (gender == 'm') && (show == 'n')) {
under30MN++;
}
else if((age < 30) && (gender == 'f') && (show == 'n')) {
under30FN++;
}//end of if else
}//end of collectData
}// end of class
Run Code Online (Sandbox Code Playgroud)
And*_*tin 12
你的问题在于这一行:
userInput.nextLine().charAt(0);
Run Code Online (Sandbox Code Playgroud)
所述nextLine()方法扫描在当前行一切,然后前进指针过去的该行.因此,当您调用charAt()方法时,您在下一行(即空格)上调用它,因此发生错误.
而是将此行更改为:
userInput.next().charAt(0)
Run Code Online (Sandbox Code Playgroud)
请注意,这意味着您的代码的其他部分也需要更改.
编辑:
即将编辑我的解决方案,但@ Marc-Andre添加了他的答案,涵盖了它,所以只是把目光投向它.
你正在做的问题age = userInput.nextInt();是你可能输入一个数字4然后按Enter键.
因此,当您正在呼叫时,扫描仪会读取4 nextInt但新线路不会消耗.这意味着当你这样做时:userInput.nextLine().charAt(0);你正在使用新行,所以nextLine()它将返回一个空字符串.由于您正在chartAt使用空字符串,因此它会为您提供异常.
你可以这样做:
age = userInput.nextInt();
userInput.nextLine();
Run Code Online (Sandbox Code Playgroud)
这将使用新行,因此流应为空.所以你不会有例外,你可以要求下一个输入.
| 归档时间: |
|
| 查看次数: |
24113 次 |
| 最近记录: |