Как получить доступ к многомерной строке за строкой? - PullRequest
1 голос
/ 21 сентября 2019

Я пытаюсь получить доступ к многомерной строке за строкой в ​​Java, но я не могу этого достичь.

У меня есть этот код, но он выводит массив столбец за столбцом:

for(int i = 0; i<array.length; i++) {
    for(int j = 0; j<array[i].length; j++) {
        System.out.print(array[i][j]);
    }
}

Так, например, если у меня есть этот массив:

[["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]

Как я могу распечатать его таким образом?

adg
beh
cfi

Полный код:

import java.util.Scanner;

public class forcabruta {
    public static void main (String[] args) {
        Scanner keyboard = new Scanner(System.in);
        char[] words = new char[] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '};
        String text;
        System.out.print("Enter a text to decode: ");
        text = keyboard.nextLine();
        char[][] combinations = new char[text.length()][words.length];
        for(int i = 0; i<text.length(); i++) {
            for(int j = 0; j<words.length; j++) {
                if(words[j] == text.charAt(i)) {
                    for(int k = 1; k<words.length; k++) {
                        combinations[i][k] = words[Math.floorMod(j-k, 27)];
                    }

                }
            }
        }
        for(int i = 0; i<combinations.length; i++) {
            for(int j = 0; j<combinations[i].length; j++) {
                System.out.print(combinations[j][i]);
            }
        }
    }
}

Ответы [ 3 ]

1 голос
/ 21 сентября 2019

Будьте осторожны при переключении индекса!

Например, это может привести к ошибке.

String[][] array = {{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}, {"j", "k"}};

for(int i = 0; i<array.length; i++) {
    for(int j = 0; j<array[i].length; j++) {
       System.out.print(array[j][i]);
    }
    System.out.println();
}

Лучше так:

String[][] array = {{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}, {"j", "k"}};

int maxColCount = 0;
int i = -1;
do {
    i++;
    for(int j = 0; j < array.length; j++) {
       if (array[j].length > i) {
          System.out.print(array[j][i]);
       }
       if (array[j].length > maxColCount) {
          maxColCount = array[j].length;
       }
    }
    System.out.println();
} while (i < maxColCount);

Основная идея состоит в том, чточто вы не знаете, сколько у вас столбцов, вам придется выяснить это самостоятельно, выполняя работу.Но вы также должны каждый раз проверять, есть ли в текущей строке так много столбцов или нет, прежде чем обращаться к ней.

Если количество столбцов всегда одинаковое, этого должно быть достаточно.

String[][] array = {{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}};
for(int i = 0; i < array[0].length; i++) {
    for(int j = 0; j < array.length; j++) {
        System.out.print(array[j][i]);
    }
    System.out.println();
}
1 голос
/ 21 сентября 2019

Необходимо убедиться, что ArrayOutOfBoundException не выброшено, если не смешивать индексы строк и столбцов.Вы должны начать свой цикл по индексу столбца, а затем вложить цикл rowIndex в этот цикл индекса столбца.Вот как это работает.

String[][] array = {{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}, {"j", "k", "l"}};
    for(int colIndex= 0; colIndex < array[0].length; colIndex++){
        for(int rowIndex = 0; rowIndex < array.length; rowIndex++){
            System.out.print(array[rowIndex][colIndex]);
        }
    }
1 голос
/ 21 сентября 2019

Ты почти сделал это.Просто замените:

System.out.print(array[i][j]);

на это:

System.out.print(array[j][i]);

UPD 1:
Таким образом, ваш код становится:

String[][] array = {{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}};
for(int i = 0; i < array.length; i++) {
    for(int j = 0; j < array[i].length; j++) {
        System.out.print(array[j][i]);
    }
    System.out.println();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...