Java 字符串索引超出范围 : 0

标签 java string exception

<分区>

我有这个问题,当我输入第一个输入时,程序崩溃了,我得到了

String index out of range: 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

最佳答案

您的问题出在这一行:

userInput.nextLine().charAt(0);

nextLine() 方法扫描当前行上的所有内容,然后将指针前进过去 该行。所以当你调用 charAt() 方法时,你是在下一行调用它,这是空白,因此会发生错误。

相反,将此行更改为:

userInput.next().charAt(0)

请注意,这意味着您的代码的其他部分也需要更改。

编辑:

正要编辑我的解决方案,但@Marc-Andre 添加了涵盖它的答案,所以也请将目光投向它。

关于Java 字符串索引超出范围 : 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18364648/

相关文章:

java - 如何正确计算年份方法

java - 运行spring boot项目时bean名称冲突

java - 如何在java中格式化整数数组

c - malloc 不存在的物理地址错误

python - 缺少外部依赖项的哪个异常?

java - 如何以更具体的方式处理 NumberFormatException?

java - Ant 失败 : Exception in thread “main” java. lang.NoClassDefFoundError org/apache/tools/ant/launch/Launcher

java - 如何在java中将TimeSeries和TimeSeriesCollection分别更改为XYSeries和XYCollection?

python - 按空格拆分列表列表中的字符串

斯卡拉 future 。如果其中一个失败则采取行动