如何制作2D阵列并打印它们

时间:2013-06-03 12:04:48

标签: java arrays

好的,所以这个程序......我不知道如何制作它,更不用说让它成功了。该程序的目标是接受用户INT值放入2d数组(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也需要输出平均值。

6 个答案:

答案 0 :(得分: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());
顺便说一句,我建议你在这里使用循环...

答案 1 :(得分: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( );
}

答案 2 :(得分: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;
    }

}

答案 3 :(得分:0)

你声明了int [] [] datArray = new int [5] [4]这意味着一个包含5行和4列的二维数组,你在datArray [0] [4]插入指向第1行和第5列因此这个异常,将其更改为int [] [] datArray = new int [5] [5]并且它将起作用

答案 4 :(得分: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。

答案 5 :(得分:0)

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