1

さて、このプログラムは... どうやって作るのか、ましてや機能させるのかさえわかりません。このプログラムの目的は、ユーザーの INT 値を受け入れて 2 次元配列 (5 行、4 列) に入れ、配列を出力し、各行の平均値を与えることです。それを機能させて短縮するための助けをいただければ幸いです。

import java.io.*;
class largeArray
{
    public static void main(String[] args) throws IOException
    {
    InputStreamReader inStream = new InputStreamReader (System.in);
    BufferedReader userInput = new BufferedReader (inStream);

    System.out.println("Welcome to the array making program.");
    System.out.println("Please enter the first 4 numbers:");

    int[][] datArray = new int[5][4];
    datArray[0][0] = Integer.parseInt(userInput.readLine());
    datArray[0][1] = Integer.parseInt(userInput.readLine());
    datArray[0][2] = Integer.parseInt(userInput.readLine());
    datArray[0][3] = Integer.parseInt(userInput.readLine());


    System.out.println("Please enter in the next 4 numbers:");
    datArray[1][0] = Integer.parseInt(userInput.readLine());
    datArray[1][1] = Integer.parseInt(userInput.readLine());
    datArray[1][2] = Integer.parseInt(userInput.readLine());
    datArray[1][3] = Integer.parseInt(userInput.readLine());


    System.out.println("Please enter in the third set of 4 numbers:");
    datArray[2][0] = Integer.parseInt(userInput.readLine());
    datArray[2][1] = Integer.parseInt(userInput.readLine());
    datArray[2][2] = Integer.parseInt(userInput.readLine());
    datArray[2][3] = Integer.parseInt(userInput.readLine());


    System.out.println("Please enter in the fourth set of numbers:");
    datArray[3][0] = Integer.parseInt(userInput.readLine());
    datArray[3][1] = Integer.parseInt(userInput.readLine());
    datArray[3][2] = Integer.parseInt(userInput.readLine());
    datArray[3][3] = Integer.parseInt(userInput.readLine());


    System.out.println("Please enter in the last set of numbers:");
    datArray[4][0] = Integer.parseInt(userInput.readLine());
    datArray[4][1] = Integer.parseInt(userInput.readLine());
    datArray[4][2] = Integer.parseInt(userInput.readLine());
    datArray[4][3] = Integer.parseInt(userInput.readLine());


    for(int row = 0; row < datArray.length; row++)
        { System.out.print("Row " + row + ": ");
        for (int column = 0; column < datArray[row].length; column++)
            System.out.print(datArray[row][column] + " ");
        System.out.println( );
        }
    }
}

現在の問題: 行内のすべての値を簡単に平均化するにはどうすればよいですか? IT も平均を出力する必要があります。

4

6 に答える 6

5

配列に 5 つのオブジェクトを保持する場合は、次を使用します。

int[][] datArray = new int[5][5];

エラーは、長さを次のように設定したことです。

int[][] datArray = new int[5][4];

したがって、すべての内部配列の長さは 4 (インデックス 0-3) であり、次のインデックス 4 に値を設定することはできません。

datArray[0][4] = Integer.parseInt(userInput.readLine());

ところで、ここでループを使用することをお勧めします...

于 2013-06-03T12:06:06.623 に答える
1

短いバージョン:

import java.io.*;

class LargeArray {
    /**
     * Arrays dimension.
     */
    private static final int ARRAY_DIM_X = 4;
    private static final int ARRAY_DIM_Y = 5;

    public static void main(String[] args) throws IOException {
        BufferedReader tempReader = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Welcome to the array making program.");

        int[][] tempDatArray = new int[ARRAY_DIM_Y][ARRAY_DIM_X];

        for (int x = 0; x < ARRAY_DIM_Y; x++) {
            System.out.println(String.format("Please enter %1$s numbers:", ARRAY_DIM_X));
            for (int y = 0; y < ARRAY_DIM_X; y++) {
                tempDatArray[x][y] = Integer.parseInt(tempReader.readLine());
            }
        }

        printArray(tempDatArray);
    }

    private static void printArray(int[][] anArray) {
        for (int row = 0; row < anArray.length; row++) {
            System.out.print("Row " + row + ": ");
            for (int column = 0; column < anArray[row].length; column++) {
                System.out.print(anArray[row][column] + " ");
            }
            // now calculate the avrg ...
            System.out.println(" = " + calculateAverage(anArray[row]));
        }
    }

    private static float calculateAverage(int[] anArray) {
        float tempSum = 0f;
        for (int i = 0; i < anArray.length; i++) {
            tempSum += anArray[i];
        }
        return tempSum / anArray.length;
    }

}
于 2013-06-03T12:23:37.530 に答える
0

明確にするために:

int[][] datArray = new int[5][4];

dataArray[0][0] から dataArray[4][3] に移動します。

[5][4] は、最初の 5 桁と最初の 4 桁を取ることを意味します。Java では、0 から 4 および 0 から 3 になることを意味します。Java では、最初の数字は 1 ではなく 0 から始まります。

于 2013-06-03T12:12:17.193 に答える
0

int[][] datArray = new int[5][4] を宣言しました。これは、5 行と 4 列の 2 次元配列を意味し、1 行目と 5 列目を指す datArray[0][4] に挿入しています。したがって、この例外は、これを int[][] datArray = new int[5][5] に変更すると機能します

于 2013-06-03T12:10:43.810 に答える
0

配列は 1 ではなくインデックス 0 から始まります。このコードでは、int[][] datArray = new int[5][4]; 5 行と 4 列にバインドしています。しかし、インデックスが利用できない5番目の列を試しています。したがって、 ArrayIndexOutOfBoundsException がスローされます。

于 2013-06-03T12:16:48.703 に答える