5

最初の入力を入力するとすぐにプログラムがクラッシュし、

文字列インデックスが範囲外です: 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
4

2 に答える 2

13

あなたの問題はこの行にあります:

userInput.nextLine().charAt(0);

nextLine() メソッドは、現在の行のすべてをスキャンしてから、ポインターをその行を超えて進めます。そのため、charAt() メソッドを呼び出すと、空白の次の行で呼び出しているため、エラーが発生しています。

代わりに、この行を次のように変更します。

userInput.next().charAt(0)

これは、コードの他の部分も変更する必要があることを意味します。

編集:

私のソリューションを編集しようとしていましたが、@ Marc-Andreがそれをカバーする彼の回答を追加したので、それにも目を向けてください。

于 2013-08-21T18:07:08.290 に答える