1. ホーム
  2. java

[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]

2022-02-25 17:03:45

質問

最初の入力をするとすぐにプログラムがクラッシュし、次のようなメッセージが表示される問題があります。

文字列のインデックスが範囲外です。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 がそれをカバーする彼の答えを追加しました。