Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.out.println重复自身_Java_Eclipse - Fatal编程技术网

Java System.out.println重复自身

Java System.out.println重复自身,java,eclipse,Java,Eclipse,有谁能告诉我正确的方向,为什么当我使用for循环时,println函数在输出中出现两次。谢谢 public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Enter the number of employees to calculate:"); int numberEmployees = scan.nextInt();

有谁能告诉我正确的方向,为什么当我使用for循环时,println函数在输出中出现两次。谢谢

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    System.out.println("Enter the number of employees to calculate:");
    int numberEmployees = scan.nextInt();

    for(int i=0; i<numberEmployees; i++){               
            System.out.println("Enter First Name:");
            name = scan.nextLine();
            System.out.println("Enter Last Name:");
            last = scan.nextLine();
            System.out.println("Enter Document #:");
            document = scan.nextInt();
            System.out.println("Enter Basic Salary");
            basicSalary = scan.nextInt();
            System.out.println("Enter # of Hours");
            hours = scan.nextInt();
    }
}

第一次输入后,换行符似乎仍保留在输入中。当请求下一个输入时,扫描仪会看到一个换行符,并将其解释为输入的结束。这使得它似乎跳过了其他每一个输入请求。我建议查看Java API文档,了解
Scanner
方法的确切行为。

问题是,当您使用新行输入
1
时,
nextInt()
函数不会删除您在1中输入的新行。将调用更改为
scan.nextInt()
Integer.parseInt(scan.nextLine())
,它的行为应该符合您的要求

进一步解释;下面是来自JavaAPI的内容

扫描仪使用分隔符模式将其输入拆分为标记, 默认情况下与空白匹配。由此产生的代币可以是 使用不同的next转换为不同类型的值 方法

next()和hasNext()方法及其原语类型伴侣 方法(如nextInt()和hasNextInt())首先跳过 匹配分隔符模式,然后尝试返回下一个 代币hasNext和next方法都可能阻止等待进一步的操作 输入


因此,显然发生了什么(我没有在页面上看到任何东西来确认它)是在
next()
hasNext()
,以及它们的相关方法读入令牌之后,它们立即返回它,而不在它后面占用分隔符(在我们的例子中是空格)。因此,在读入1后,换行符仍然存在,因此下面对
nextLine()
的调用有一个换行符要gobble并执行了。

或者,您可以向
scan.nextLine()
添加额外的调用,或者找到更优雅的方法来忽略换行符。就我个人而言,我尽量不交错
nextLine()
使用类似于
nextInt()
的东西,因为这样我就不得不担心扫描仪将在哪里读取下一个标记。因为我们希望每行只需要一件事,所以一次读取/解析一整行就容易多了。这一点很好。我只是想给你一些选择。我没有看过API,但是你可能会认为开发人员/设计人员会添加一种方便的方法,在这种情况下清除无关字符,尤其是空格;我将用其中的内容更新答案,以进一步解释发生了什么。这已经被问了很多次了。见:
Enter the number of employees to calculate:
1
Enter First Name:
Enter Last Name:
daniel
Enter Document #: