当调用nextLine() - 方法时,为什么我不能在Scanner(System.in)中输入字符串?

use*_*373 8 java user-input java.util.scanner

这个程序实际上如何工作......?

import java.util.Scanner;

class string
{
    public static void main(String a[]){
        int a;
        String s;
        Scanner scan = new Scanner(System.in);

        System.out.println("enter a no");
        a = scan.nextInt();
        System.out.println("no is ="+a);

        System.out.println("enter a string");
        s = scan.nextLine();
        System.out.println("string is="+s);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

enter the no
1234
no is 1234
enter a string
string is=         //why is it not allowing me to enter a string here?
Run Code Online (Sandbox Code Playgroud)

Nom*_*Sim 18

.nextInt()获取下一个int,但不读取新行字符.这意味着当您要求它读取"下一行"时,您将从第一次开始读取新行字符的结尾.

您可以.nextLine()int修复此问题后插入另一个.或者(我更喜欢这种方式),将其int作为a 读取string,并将其解析为int.


Yal*_* T. 6

这是一个常见的误解,如果在使用nextInt()之后立即对nextLine()使用相同的Scanner,则会引起混乱。

您可以自己解决光标跳到下一行的问题,也可以只对Integer使用其他扫描仪。

选项A:使用2个不同的扫描仪

import java.util.Scanner;

class string
{

    public static void main(String a[]){
    int a;
    String s;
    Scanner intscan =new Scanner(System.in);


    System.out.println("enter a no");
    a=intscan.nextInt();
    System.out.println("no is ="+a);


     Scanner textscan=new Scanner(System.in);
    System.out.println("enter a string");
    s=textscan.nextLine();
    System.out.println("string is="+s);
        }
}
Run Code Online (Sandbox Code Playgroud)

选项B:跳到下一行

class string
{
    public static void main(String a[]){
        int a;
        String s;
        Scanner scan =new Scanner(System.in);

        System.out.println("enter a no");
        a = scan.nextInt();
        System.out.println("no is ="+a);
        scan.nextLine();

        System.out.println("enter a string");
        s = scan.nextLine();
        System.out.println("string is="+s);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我会毫不犹豫地将其称为“问题”,问题仅在于他期望这些方法执行的操作以及它们实际上执行的操作。 (2认同)