有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用for循环将字符串存储在锯齿数组中

我遇到了这个question并想重新创建它,但用字符串数组而不是整数填充它。我想使用数组,而不是ArrayList,只是因为我是一个初学者,希望更多地练习数组。我几乎复制了代码,但输出中不断出现错误。这是我的密码:

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循环还是字符串的工作方式?如能对代码进行解释和帮助,将不胜感激。谢谢


共 (2) 个答案

  1. # 1 楼答案

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

     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;
       }
    
  2. # 2 楼答案

    问题就在于这种投入。nextInt()没有抓住新词。如果你坚持输入。每个输入后面的nextLine()。nextInt()行,应该可以用