2016-06-17 2 views
0

Я хочу, чтобы ввести эту структуру, но после ввода 3 - и нажав Enter Я получил ошибки ввода:Введите строки на 2d массива

--- -m- p--

и мой код: `

import java.util.Scanner; 

public class Test { 
public static void main(String[]args){ 
    Scanner in = new Scanner(System.in); 
    int n = in.nextInt(); 
    String[][] matrix = new String[n][n]; 
    for (int i=0 ; i<n ; i++){ 
     for (int j=0 ; j<n ; j++){ 
      matrix[i][j] = in.nextLine(); 
     } 
    } 

    for (int i=0 ; i<n ; i++){ 
     for (int j=0 ; j<n ; j++){ 
      System.out.println(matrix[i][j]); 
     } 
     System.out.println(); 
    } 
    } 
} 

и ошибка, которую я получил, это:

E xception в теме «main» java.util.InputMismatchException на java.util.Scanner.throwFor (Неизвестный источник) на java.util.Scanner.next (Неизвестный источник) на java.util.Scanner.nextInt (Неизвестный источник) в java.util.Scanner.nextInt (Unknown Source) в Test.main (Test.java:6)

Как это исправить и как вводить строки в массив

+1

но сначала вы берете ввод «n». поэтому предоставьте это первым. – Kaushal28

+0

@ Kaushal28 Моя ошибка, но результат - это что-то еще. –

+0

Исключение входного несоответствия было связано с тем, что «n» – Kaushal28

ответ

0
int n = in.nextInt(); 

в эту строку вы вводите свой ввод строки вместо ввода значения в целое число n. Во-первых, вы должны ввести свой целочисленный ввод в n. (в этом случае его 3)

+0

В вопросе: «Я хочу ввести эту структуру, но после ввода 3 - и нажав Enter, я получил сообщение об ошибках:« Я думаю, что число 3 перед первым тире (-) должно быть первым входом. Он просто не отформатирован должным образом. Поэтому я сомневаюсь, что это проблема –

0

У вас есть исключение после int n = in.nextInt() ;, не так ли? Также обратите внимание, что после этого, когда вы вызываете in.nextLine() в первый раз, у вас не будет значения.

Попробуйте этот код:

public static void main(String[]args){ 
     Scanner in = new Scanner(System.in); 
     String s = in.nextLine(); 
     int n = Integer.parseInt(s); 
     String[][] matrix = new String[n][n]; 
     for (int i=0 ; i<n ; i++){ 
      for (int j=0 ; j<n ; j++){ 
       matrix[i][j] = in.nextLine(); 
      } 
     } 

     for (int i=0 ; i<n ; i++){ 
      for (int j=0 ; j<n ; j++){ 
       System.out.println(matrix[i][j]); 
      } 
      System.out.println(); 
     } 
     } 
    } 
+0

Моя ошибка; Я забыл сначала ввести номер 3, но когда я ввожу его, это не остановится. Мне нужно ввести более 20 элементов для печати, но я ожидал всего 9 элементов. –

0

Я думаю, ваша проблема заключается в использовании: int n = in.nextInt(). После выполнения этого вызова, вы должны потреблять следующую строку перед использованием сканера снова по телефону

//consume nextLine() 
in.nextLine(); 

Причины вы должны сделать это потому, что такие функции, как nextInt(), следующий(), и так не потребляют '\ n' вашего ввода, поэтому, когда вы нажимаете enter после ввода вашего ввода, функция принимает все до этого и оставляет там \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Надеюсь, что это решает!

Также: nextline() читает по строке не по символу; если вы вводите входы, как вы изображаете в вопросе:

--- '\n' 
-m- '\n' 
p-- '\n' 

Программа не собирается работать. Программа ожидает 9 входов, но вы даете ей всего три. После того, что вы потребляете следующую строку после приема в целом, просто добавив следующую строку:

//consume nextLine() 
in.nextLine(); 

после линии int n = in.nextInt().Программа будет ожидать ввод необходимо ввести следующим образом:

3 входа - введите - введите - введите - введите м введите - введите р ввести - введите - введите

После этого начнется печать. Если это то, чего ты хочешь, хорошо! В противном случае, пожалуйста, сообщите нам больше о проблеме, которую вы пытаетесь решить.

Смежные вопросы