1

好的,所以这个程序......我不知道如何制作它,更不用说让它工作了。该程序的目标是接受用户 INT 值放入二维数组(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 回答
3

如果您定义int[][] datArray = new int[5][4];不能使用位置 datArray[x][4],则它超出范围。您要的是 25 个数字而不是您想要的 20 个数字,每行数字的位置为 0,1,2,3,4,应该是 0,1,2,3。

要计算每行的平均值,您可以:

float[] avg = new float[5];

for(int i=0 ; i < 5 ; i++)
{
    float sum = 0;
    for(int j=0 ; j < 4 ; j++)
    {
        sum  += datArray[i][j];
    }
    avg[i] = sum/4;
}

您可以通过以下方式将此信息添加到输出消息中:

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.print("Row Average value: " + avg[row]);
    System.out.println( );
}
于 2013-06-03T12:08:57.427 回答
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] 这意味着具有 5 行和 4 列的二维数组,并且您在 datArray[0][4] 处插入,它指向第一行和第 5 列因此这个异常,将其更改为 int[][] datArray = new int[5][5] 它将起作用

于 2013-06-03T12:10:43.810 回答
0

说清楚:

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

它从 dataArray[0][0] 到 dataArray[4][3];

[5][4] 表示你取前 5 位和前 4 位,这在 Java 中意味着它从 0 到 4 和 0 到 3。在 Java 中,第一个数字从 0 开始,而不是 1。

于 2013-06-03T12:12:17.193 回答
0

数组从索引 0 而不是 1 开始。在这段代码中, int[][] datArray = new int[5][4]; 您将绑定到 5 行和 4 列。但是您正在尝试索引不可用的第 5 列。所以它抛出 ArrayIndexOutOfBoundsException 。

于 2013-06-03T12:16:48.703 回答