【问题标题】:Java String automatically assigned null value [duplicate]Java String自动分配空值[重复]
【发布时间】:2014-01-17 22:05:59
【问题描述】:

在下面的代码中,在第一个 for 循环的第一次迭代中,box[a] 被自动分配了一个空值。

其余的迭代都很好(接受用户输入)。只有第一个存在自动分配空值的问题。

有人知道为什么会这样吗?谢谢。

package testing;

import java.util.Scanner;


public class Testing {


public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    Scanner in2 = new Scanner(System.in);

    int boxNumber;

    boxNumber = in.nextInt();
    String[] boxes = new String[boxNumber];

    System.out.println(boxNumber);

    for(int a=0; a <= boxes.length - 1; a++){

        boxes[a] = in.nextLine();
        System.out.println(boxes[a]);
    }

    int packageNumber;

   packageNumber = in2.nextInt();
   String[] packages = new String[packageNumber];

   System.out.println(packageNumber);

   for(int n=0; n <= packageNumber - 1; n++){

        packages[n] = in.nextLine();
        System.out.println(packages[n]);

    }

}

}

【问题讨论】:

  • in.nextInt() 之后添加in.nextLine(); 以使用'\n'in2.nextInt() 也一样。这将在之后工作(还有为什么要使用两个扫描仪?)。
  • 同时删除第二个扫描器对象 (in2)。它不是必需的,在某些情况下可能会有害。

标签: java string


【解决方案1】:

适合描述所发生情况的场景是,当您在第一行输入一个数字,然后其余行是框的字符串。

但是nextInt() 方法不会超过第一个换行符,所以第一次调用nextLine() 时,它会匹配行的其余部分,直到第一个换行符""(不是@987654324 @)。

在对nextInt() 的调用之后,在for 循环之前插入对newLine() 的调用以绕过第一个换行符。

String firstNewLine = in.nextLine();
for(int a=0; a <= boxes.length - 1; a++){

【讨论】:

    【解决方案2】:

    当您在输入第一个数字和空行后确实按回车时,这就是 nextLine() 返回空字符串的原因,您可以使用此 boxNumber = in2.nextInt();相反,但我建议考虑另一种方式,通常您不需要两个 Scanner 实例

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2015-11-21
      • 2012-12-14
      • 2020-11-05
      • 2014-08-28
      • 2019-01-08
      • 2012-10-11
      • 1970-01-01
      相关资源
      最近更新 更多