Входная строка в двумерный массив в Java - PullRequest
0 голосов
/ 23 сентября 2019

Я абсолютный новичок, у меня ввод данных, например,

3
B B S
S B F
B B F

3 показывает, сколько строк символов будет там, и я пытаюсь поместить символы в строки (первая строка: BBS,вторая строка: SBF, третья строка: BBF).И я хочу использовать 2D массив для этого, как мне это сделать?вот мой код

Scanner str = new Scanner(System.in);
int num = str.nextInt();
String dice[][] = new String[5][num];

for (int i = 0; i < 5; i++) {
   for (int j = 0; j < num; j++) {
      dice[i][j] = str.nextLine();
   }
}

Где я делаю не так?

1 Ответ

0 голосов
/ 23 сентября 2019

Ваше решение близко, но вы используете nextLine() на Сканере, который будет одновременно использовать все данные String.

Я немного изменил ваш код и выдал следующий вывод:

[[B, B, S], [S, B, F], [B, B, F], [3, null, null], [null, null, null]]

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

  • определить Scanner для использования указанного вами ввода (вместо запроса на него)
  • переименовать переменную Scannerот str до scanner;делает остальной код более читабельным
  • переименовывает num переменную в charactersPerLine, улучшенную читаемость
  • используйте scanner.next() вместо nextLine(), таким образом вы получите "B", затем" B ", затем" S "и т. д., каждое в виде отдельного строкового значения
  • добавляет защиту, если сканер пуст, затем извлекается;это, вероятно, то, что вам не нужно сохранять, но я добавил его, чтобы мой пример работал
  • в конце вывести весь массив
public static void main(String[] args) {
    Scanner scanner = new Scanner("3 B B S S B F B B F 3");
    int charactersPerLine = scanner.nextInt();
    String[][] dice = new String[5][charactersPerLine];

    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < charactersPerLine; j++) {
            if (!scanner.hasNext()) {
                break;
            }
            dice[i][j] = scanner.next();
        }
    }

    System.out.println(Arrays.deepToString(dice));
}

Обновить : После ввода этого ответа добавлен ввод с разделителями новой строки в OP, но он не меняет поведения.Независимо от того, есть ли новые строки, scanner.next() все равно вернет следующее значение.Этот ввод - который включает переводы строки - все еще производит то же поведение:

Scanner scanner = new Scanner("3\n" +
        "B B S\n" +
        "S B F\n" +
        "B B F");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...