Java InputMismatchException在我的程序idk中为某些输入抛出,为什么会抛出[重复]

brvekthn  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(88)

此问题在此处已有答案

Scanner doesn't see after space(7个答案)
昨天就关门了。
代码:

import java.util.*;
public class InputInJava {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);

        String name = sc.next();

        String fName = sc.nextLine();

        int number =  sc.nextInt();

        float Fnumber = sc.nextFloat();

        double Dnumber = sc.nextDouble();

        short Snumber = sc.nextShort();

        byte Bnumber = sc.nextByte();

        long Lnumber = sc.nextLong();

        System.out.println(name);
        System.out.println(fName);
        System.out.println(number);
        System.out.println(Fnumber);
        System.out.println(Dnumber);
        System.out.println(Snumber);
        System.out.println(Bnumber);
        System.out.println(Lnumber);

    }
}

字符串
输入:

String String 1 1
1


我检查了溢出和其他几个网站,其中弹出了谷歌我尝试了不同的输入,如输入2:

String String 1
1
1
1
1
1
1


输出为:

String
 String 1
1
1.0
1.0
1
1
1


那么,为什么它只阅读nextLine的输入,直到1个空格,然后读取下一个输入呢?

zpgglvta

zpgglvta1#

您面临的问题与Java中Scanner类的工作方式有关。当您使用sc.next()时,它只从输入中读取一个标记(由空格分隔的字符序列)。另一方面,当您使用sc.nextLine()时,它读取整行,包括直到行尾的所有空格。
在您的示例中,当您输入“String String 1 1 1”时,sc.next()读取“String”,然后sc.nextLine()读取该行的其余部分,即“String 1 1 1”。这就是为什么您在尝试读取下一个输入时会看到意外行为的原因。
一种方法是这样的:

String name = sc.next();
// Consume the newline character left in the buffer
sc.nextLine();

字符串

相关问题