2017-09-22 44 views
1

我遇到了这个question并且想要重新创建它,但是用一串字符串而不是整数填充它。我想使用数组而不是ArrayList,仅仅因为我是初学者,并且想用数组练习更多。我几乎复制了代码,但我一直在输出中出现错误。这里是我的代码:使用for循环将字符串存储在锯齿状数组中

Scanner input = new Scanner(System.in); 
    System.out.print("Enter number of arrays: "); 
    int x = input.nextInt(); 
    String [][] array = new String[x][0]; 

    for(int i = 0; i < x; i++){ 
     System.out.print("Enter number of elements for array: "); 
     int s = input.nextInt(); 
     array[i] = new String[s]; 

     for(int j = 0; j < s ; j++){ 
      System.out.print("Enter string: "); 
      String word = input.nextLine(); 
      array[i][j] = word; 
     } 
    } 

我的输出是:

Enter number of arrays: 2 
Enter number of elements for array: 3 
Enter string: Enter string: hello 
Enter string: hi 
Enter number of elements for array: 2 
Enter string: Enter string: goodbye 

为什么它打印 “输入字符串” 两次,每次?逻辑对我来说很有意义,所以我不确定是什么导致了错误的输出。它是for循环还是只是字符串的工作方式?将不胜感激代码的解释和帮助。谢谢

回答

1

逻辑是正确的,但nextInt()方法只读取数字,而不是您键入的“输入”字符,因此当您调用nextLine()方法时,第一次在循环中读取'enter '字符,第二个读取您的输入,所以第三个。 为了避免这个问题,你可以在nextInt()后调用nextLine(),而不将其分配给一个变量,所以thath它读取等待的字符:

for(int i = 0; i < x; i++){ 
    System.out.print("Enter number of elements for array: "); 
    int s = input.nextInt(); 
    input.nextLine(); 
    array[i] = new String[s]; 

    for(int j = 0; j < s ; j++){ 
     System.out.print("Enter string: "); 
     String word = input.nextLine(); 
     array[i][j] = word; 
    } 
1

的问题仅仅是input.nextInt()没有按” t抓住换行符。如果你在每个input.nextInt()行之后插入input.nextLine(),它应该可以工作。

相关问题