Як зрабіць 2D масівы і друкаваць іх

Добра, так што гэтая праграма ... Я паняцця не маю, як зрабіць гэта, не кажучы ўжо зрабіць яго працу. Мэтай гэтай праграмы з'яўляецца, каб прыняць значэння 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( );
        }
    }
}

Бягучы выпуск: Як я магу атрымаць усе значэння ў радку, у сярэднім у кароткай руцэ спосабам? Акрамя таго, неабходна вывесці сярэдняе значэнне.

1
Вы вызначана будзеце жадаць, каб змясціць тыя ўваходныя падказкі ў завесах.
дададзена аўтар Egg, крыніца
вашыя памеры масіва з'яўляюцца няправільнымі. другое вымярэнне мае даўжыню чатыры (індэкса: 0,1,2,3), а ў радку 17 вы рашэнне індэкса 4, які не існуе, і вырабляе ArrayIndexOutOfBoundsException.
дададзена аўтар Arno Mittelbach, крыніца

6 адказы

Калі вы хочаце, каб масівы для захоўвання 5 аб'ектаў, выкарыстоўвайце:

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

Ваша памылка ў тым, што вы ўсталявалі даўжыню да:

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

Такім чынам, усе ўнутраныя масівы маюць даўжыню 4 (індэкс 0-3), і вы не можаце ўсталяваць значэнне па індэксе 4 у:

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

Дарэчы, я прапаную вам выкарыстоўваць пятлю тут ...

5
дададзена
Такім чынам, вы не можаце змясціць пяты элемент у ім.
дададзена аўтар BobTheBuilder, крыніца
Так, я злавіў, што, як толькі вы згадалі, цяпер задача асерадненні кожнай радкі з.
дададзена аўтар Anthony Owen, крыніца
Не, не, гэта сетка 20 масіва, а не 25.
дададзена аўтар Anthony Owen, крыніца

Калі вы вызначаеце ИНТ [] [] datArray = новы INT [5] [4]; вы не можаце выкарыстоўваць пазіцыю datArray [х] [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( );
}
3
дададзена
Вы хочаце, каб вылічыць сярэдняе значэнне кожнага радка?
дададзена аўтар Jorge Martins, крыніца
Я проста адрэдагаваў мой адказ, гэта адпавядаць вашым патрэбам?
дададзена аўтар Jorge Martins, крыніца
Гэтак жа, як вы зрабілі з datArray. Пар [х] пар з datArray [х] [0] да [х] [3] значэння.
дададзена аўтар Jorge Martins, крыніца
дададзена аўтар Jorge Martins, крыніца
На жаль, я не магу. Інтэрнэт-блокі маёй школы ён. Але праграма працуе нармальна зараз, дзякуй!
дададзена аўтар Anthony Owen, крыніца
Шчыра кажучы, я выкарыстаў гэты блок лінію-для-радкі з маіх нататак. Я не ведаю, як пераўтварыць яго. Println функцыя не працуе, так што я сапраўды не ведаю, як гэта зрабіць.
дададзена аўтар Anthony Owen, крыніца
Э-э ... Від. Мне трэба, каб гэта было мець выхад, і яго альбо я мозг мёртвы, ці я проста не магу зразумець, як выкарыстоўваць гэты код для вываду сярэдніх значэнняў кожнага радка.
дададзена аўтар Anthony Owen, крыніца
Так. Мне трэба зрабіць гэта для кожнага радка ([0] [0] [0] [4] і г.д. і да т.п.)
дададзена аўтар Anthony Owen, крыніца
Так, я злавіў, што, як толькі гэта было сказана. Але цяпер мне трэба знайсці скарочаны спосаб асерадніць кожную радок ...
дададзена аўтар Anthony Owen, крыніца

Скарочаны варыянт:

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;
    }

}
1
дададзена
Ах, я забыўся згадаць, прыклад Цяпер раздрукаваць у сярэднім для кожнай радкі: Радок 0: 1 2 3 4 = 2.5 Радок 1: 5 6 4 3 = 4.5 Радок 2: 1 1 1 1 = 1,0 Шэраг 3: 3 4 3 4 = 3.5 Радок 4: 5 6 7 7 = 6,25
дададзена аўтар Marcin, крыніца
Ах да, вы можаце прытрымлівацца! Вы ўжо выкарысталі пятлю (для) у вашым прыкладзе, каб надрукаваць масіў, я зрабіць тое ж самае для ўводу, нічога больш не менш;)
дададзена аўтар Marcin, крыніца
Для таго, каб быць 100% сумленныя, што блок кадавання быў скапіяваны з маіх нататак у асноўным лініі для лініі.
дададзена аўтар Anthony Owen, крыніца
Я .. Гэты ўзровень кадавання, па агульным прызнанні, з'яўляецца той, што я не магу прытрымлівацца. Мы не вучылі некаторыя з функцый у гэтай кадоўцы яшчэ, так што я крыху цяністым пра гэта.
дададзена аўтар Anthony Owen, крыніца

Вы абвясцілі ИНТ [] [] datArray = новы INT [5] [4], што азначае двухмерную матрыцу з 5 радкоў і 4 слупкоў і вы insertin ў datArray [0] [4], які паказвае на 1-га радка і 5-й калонцы такім чынам, гэта выключэнне, змяніць гэта ИНТ [] [] datArray = новы Int [5] [5], і ён будзе працаваць

0
дададзена

Масіў пачынаецца з індэкса 0, а не 1. У гэтым кодзе,     INT [] [] datArray = новы INT [5] [4]; вы абмяжоўваюць 5 радкоў і 4 слупкоў. але вы паспрабуйце для 5-га слупка, у якім індэкс не даступны. Так ён кідае ArrayIndexOutOfBoundsException.

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.

0
дададзена