1

ここの初心者。だから私は配列をテストしています。これは、私が読んでいるチュートリアルの次のトピックです。取得または入力する数値の数を指定する簡単なプログラムを作成しました。問題は getArray() メソッドにあります。表示できないようです。スレッドエラーで例外が発生しています。どんな助けやアドバイスも大歓迎です。:)初心者の質問で申し訳ありません。:)) コードは次のとおりです。

import java.util.Scanner;

public class ArrayNumbers {

Scanner input = new Scanner(System.in);
int totalNum, counter, count = 0, display;
double arrayNum[];

public void setArrayNum() {
    System.out.print("How many numbers?: ");
    totalNum = input.nextInt();
    double arrayNum[] = new double[totalNum];

    for (counter = 0 ; counter < arrayNum.length ; counter++) {
        System.out.print("Num "+(count = counter + 1)+": ");
        arrayNum[counter] = input.nextInt(); 
    }
}

public void getArray() {
    System.out.print("What number to display?: ");
    display = input.nextInt();

    System.out.print(arrayNum[display]);
}
}

import java.util.Scanner;

public class MainProgram {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    Numbers NumbersObject = new Numbers();
    ArrayNumbers ArrayNumbersObject = new ArrayNumbers();
    String name;
    int choice;

    System.out.print("Enter name: ");
    name = input.nextLine();
    System.out.println("Menu");
    System.out.println("1. Math Operations");
    System.out.println("2. Grade Computation");
    System.out.println("3. Counting Numbers");
    System.out.println("4. Array Numbers");
    System.out.print("Enter choice: ");
    choice = input.nextInt();

    switch(choice) {

    case 1:
        System.out.println("Choose Operation");
        System.out.println("1. Addition");
        System.out.println("2. Subtraction");
        System.out.println("3. Multiplication");
        System.out.println("4. Division");
        System.out.print("Enter choice: ");
        choice  = input.nextInt();

        NumbersObject.setNum();

        if (choice == 1)
            System.out.println("The answers is "+(NumbersObject.getNum1() + NumbersObject.getNum2()));
        else if (choice == 2)
            System.out.println("The answers is "+(NumbersObject.getNum1() - NumbersObject.getNum2()));
        else if (choice == 3)
            System.out.println("The answers is "+(NumbersObject.getNum1() * NumbersObject.getNum2()));
        else if (choice == 4)
            System.out.println("The answers is "+(NumbersObject.getNum1() / NumbersObject.getNum2()));
        else
            System.out.print("Invalid Input!");
        break;

    case 2:
        NumbersObject.setNum();
        System.out.println("Your average grade is "+((NumbersObject.getNum2() + NumbersObject.getNum2()) / 2));
        break;

    case 3:
        System.out.println("Welcome to Counting Numbers!");
        System.out.println("Enter 2 numbers to start and end!");
        NumbersObject.setNum();

        for (int counter = (int) NumbersObject.getNum1() ; counter <= NumbersObject.getNum2() ; counter++) {
            System.out.println(counter);
        }

        System.out.println("End!");
        break;

    case 4:
        ArrayNumbersObject.setArrayNum();
        ArrayNumbersObject.getArray();
        break;

    default:
        System.out.println("Mr/Ms "+name+" you entered an Invalid Choice!");
        break;
    }//end of switch    
}// end of main
}// end of class

申し訳ありませんが、メインが含まれていません。

そして、ここにエラーがあります:

Exception in thread "main" java.lang.NullPointerException
at ArrayNumbers.getArray(ArrayNumbers.java:23)
at MainProgram.main(MainProgram.java:67)

みんな、私が持っている唯一の問題は getArray() にあります。配列内のどの番号を見たいかを尋ねますが、それを入力すると、スレッドエラーで例外が発生します。唯一の問題は、配列 [指定した番号] をどのように表示するかです。初心者の質問で申し訳ありません。

4

3 に答える 3

2

サイズ表示の配列を作成し、表示位置に要素を出力しようとしましたが、配列は Java でインデックス付けされた 0 ベースであるため、例外がスローされます。

この図は役に立つはずです:

ここに画像の説明を入力

想像してみてくださいdisplay = 10

double arrayNum[] = new double[display]; //create an array that can holds 10 elements
System.out.print(arrayNum[display]); //try to access at the 10th element of the array but it doesn't exists !

arrayNumクラスで作成した に数値を表示したいので、新しい配列を作成する必要はありません。

public void getArray() {
    System.out.print("What number to display?: ");
    display = input.nextInt();
    System.out.print(arrayNum[display]);
}

また、要素にアクセスする前displayに、が正しい境界範囲内にあるかどうかを確認する必要があります。[0,...,displayNum.length-1]

編集 :

setArrayNum()置き換えdouble arrayNum[] = new double[totalNum];arrayNum = new double[totalNum];

于 2013-11-04T11:15:43.340 に答える
0

配列は 0 ベースです。したがって、サイズの配列を作成すると、displayインデックスにアクセスできます0..display-1

于 2013-11-04T11:16:10.843 に答える
0

メソッドdouble arrayNum[] = new double[display];内でローカル配列を作成してい ます。getArray()

メソッドdouble arrayNum[] = new double[display];から削除する必要があります。getArray()

その後、以下のような方法。

public void getArray() {
    System.out.print("What number to display?: ");
    display = input.nextInt();
    if(display >0 && display <=arrayNum.length){
            System.out.print(arrayNum[display-1]);
    }else{
         System.out.print(display + " is out of range");
    }
}
于 2013-11-04T11:16:41.830 に答える