Как правильно добавить значения в 3D-массив в Java - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь создать трехмерный массив, который выводит как:

[1,2,3], [1,2,3], [1,2,3], [1,2,3]
[1,2,3], [1,2,3], [1,2,3], [1,2,3]
[1,2,3], [1,2,3], [1,2,3], [1,2,3]
[1,2,3], [1,2,3], [1,2,3], [1,2,3]
[1,2,3], [1,2,3], [1,2,3], [1,2,3]

Вот код, который я придумал:

public class Triples {

    public static void main(String[] args) {

        int[][][] triplet = new int[5][4][3];

        for (int i = 0; i < triplet.length; i++) 
        {
            for (int j = 0; j < triplet[i].length; j++) 
            {
                System.out.print("[");
                for (int k = 0; k < triplet[i][j].length; k++) 
                {
                    triplet[i][j][k] = i+1;
                    System.out.print(triplet[i][j][k] + "," + "");
                }
                System.out.print("]");
            }
            System.out.println();
        }
    }
}

Результат у меня выглядит так:

[1,1,1,][1,1,1,][1,1,1,][1,1,1,]
[2,2,2,][2,2,2,][2,2,2,][2,2,2,]
[3,3,3,][3,3,3,][3,3,3,][3,3,3,]
[4,4,4,][4,4,4,][4,4,4,][4,4,4,]
[5,5,5,][5,5,5,][5,5,5,][5,5,5,]

Моя проблема в том, что я не уверен, как увеличивать значения в третьем цикле для перехода в 1, 2 и 3. Я пробовал разные комбинации, но они привели либо к тому же, либо к неправильному результату. Какие-нибудь советы?

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Вам нужно инициализировать значение сумматора во втором цикле, а затем добавить значение на 1 внутри более глубокого цикла.Попробуйте это:

public class Triples {

    public static void main(String[] args) {

        int[][][] triplet = new int[5][4][3];

        for (int i = 0; i < triplet.length; i++) 
        {
            for (int j = 0; j < triplet[i].length; j++) 
            {
                System.out.print("[");
                for (int k = 0; k < triplet[i][j].length; k++) 
                {
                    triplet[i][j][k] = k+1;
                    System.out.print(triplet[i][j][k] + "," + "");
                }
                System.out.print("]");
            }
            System.out.println();
        }
    }
}
0 голосов
/ 24 января 2019
public class Triples {

    public static void main(String[] args) {

        int[][][] triplet = new int[5][4][3];

        for (int i = 0; i < triplet.length; i++) 
        {
            for (int j = 0; j < triplet[i].length; j++) 
            {
                System.out.print("[");
                for (int k = 0; k < triplet[i][j].length; k++) 
                {
                    triplet[i][j][k] = k+1;
                        if(k==triplet[i][j].length-1) 
                            System.out.print(triplet[i][j][k] );
                        else
                            System.out.print(triplet[i][j][k] + ",");
                }
                if(j==triplet[i].length-1) 
                    System.out.print("]");
                else
                    System.out.print("], ");
            }
            System.out.println();
        }
    }
}
0 голосов
/ 24 января 2019

Просто присвойте значение k+1.Вот и все

Объяснение: (Я не очень хорош в этом.) Значения i и j не изменятся в цикле k.Так что они вам не нужны.Но значение ok k меняется на каждой итерации.Также он будет сбрасываться на 0 каждый раз.Но мы не хотим 0, поэтому измените его на k+1.Поместите отладку println в ваше утверждение.Они очень помогают.

triplet[i][j][k] = k+1;

При этом новый внутренний цикл for выглядит следующим образом:

for (int k = 0; k < triplet[i][j].length; k++) 
{
    triplet[i][j][k] = k+1;

    //Don't put the comma after last digit.
    if(k==triplet[i][j].length-1) {
        System.out.print(triplet[i][j][k] );
    }else {
        System.out.print(triplet[i][j][k] + "," + "");
    }

}    
...