Java 为什么要使用scan.nextLine();将字符串与整数一起扫描的步骤

Java 为什么要使用scan.nextLine();将字符串与整数一起扫描的步骤,java,Java,嗨,我有个问题解决了,但我不知道原因: import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args) { int i = 4; double d = 4.0; String s = "Hello ";

嗨,我有个问题解决了,但我不知道原因:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

public static void main(String[] args) {
    int i = 4;
    double d = 4.0;
    String s = "Hello ";

    Scanner scan = new Scanner(System.in);

    int a;
    String c;
    a= scan.nextInt();
    scan.nextLine();
    c = scan.nextLine();
    System.out.println(i + a);
    System.out.println(s + c);
    scan.close();
    }
}
input:
4
World! How are you!!
当我删除行
scan.nextLine()时
before
c=scan.nextLine()我得到一个错误。谁能告诉我原因吗

我用过:

String a;
String c;
a = scan.nextLine();
int b = Integer.parseInt(a);
c = scan.nextLine();
System.out.println(i + a);
System.out.println(s + c);
但答案是:

44
Hello World! How are you

scan.nextLine在输入4后读取回车键

没有它,c被设置为回车键,程序完成

public static void main(String[] args){
    int i = 4;
    String s = "Hello ";

    Scanner scan = new Scanner(System.in);

    int a;
    String c;
    a = Integer.parseInt(scan.nextLine());
    c = scan.nextLine();
    System.out.println(i + a);
    System.out.println(s + c);
    scan.close();
}
输入为“4”和Doug时,输出为:

8
Hello Doug

如果删除行
scan.nextLine(),表示在一行中输入两个数据(变量a和c)。编译器很难决定应该解决哪一个问题,两个输入将以不同的行进行编译,并将正常运行。

原始代码的问题

scan.nextLine();
a = Integer.parseInt(scan.nextLine());
c = scan.nextLine();
System.out.println(i + a);
System.out.println(s + c);
这是第一行。您必须放弃第一行输入

考虑你的意见

4
你好吗

第一行由您的第一个用户读取

scan.nextLine();
因此,第一行

四,

被丢弃

然后,下一行代码是

a = Integer.parseInt(scan.nextLine());
它首先执行
scan.nextLine()
。这是你的第二行

你好吗

并尝试使用
Integer.parseInt()
将其转换为一个数字,该操作失败,出现异常


在你的解决方案中

a= scan.nextInt();
scan.nextLine();
c = scan.nextLine();
第二行是必需的,因为
scan.nextInt
不会删除换行符

再考虑一下输入

4
你好吗

第一行
a=scan.nextInt()读取

四,

并且只有
4
,将输入保留为


你好吗

如果现在执行
c=scan.nextLine()
直接,
c
将被分配空字符串,它仍然是第一行。 因此,第二行删除空行,并将输入保留为空

你好吗

现在可以使用
c=scan.nextLine()读取它
以获取所需的字符串



如果您还有更多问题,请尝试通过调试器和手动模拟代码的执行,甚至可能是在纸上。这有助于您了解实际发生的情况。

什么错误?你想用它做什么?
nextInt()
不使用新行字符。我建议始终使用
nextLine()
获取用户输入,然后进行解析,例如
Integer.parseInt(scan.nextLine())
。我按照您的建议进行了操作,但仍然出现错误。