方法 - 在扫描仪(System.in),调用nextLine()时,为什么我不能输入一个字符串?(

2019-06-27 19:29发布

请问这个计划的实际工作...?

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);
    }
}

输出是:

enter the no
1234
no is 1234
enter a string
string is=         //why is it not allowing me to enter a string here?

Answer 1:

.nextInt()获取下一个int ,但不会读取新行字符。 这意味着,当你问它来阅读“下一行”,你看直到从第一次的换行字符结束。

您可以插入另一个.nextLine()你得到后int来解决这个问题。 或(我更喜欢这种方式),请阅读int作为一个string ,并将其解析到一个int



Answer 2:

这是一个常见的误区,如果你使用nextLine相同的扫描仪(这会导致混乱),你使用nextInt之后()。

您也可以自行修复光标跳到下一行或只使用一个不同的扫描仪为您的整数。

选项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);
        }
}

选项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);
    }
}


Answer 3:

你只需要使用scan.next()来读取一个String



Answer 4:

这是因为后nextInt()完成它的执行,当nextLine()方法被调用时,它扫描换行符,其中是nextInt后存在()。 您可以在以下任一方式来实现:

  1. 您可以使用另一个nextLine()方法只是nextInt()后,将扫描仪过去换行符。
  2. 您可以使用不同的扫描对象进行扫描整型和字符串(您可以命名他们SCAN1和SCAN2)。
  3. 您可以使用下一个方法扫描对象上

    scan.next();



Answer 5:

扫描仪的缓冲区满时,我们就通过一个scan.nextLine输入字符串(); 所以跳过输入下一次。 因此,解决方案是我们能够创建扫描仪的一个新对象,该对象的名称可以是同一个对象......



Answer 6:

不要试图扫描文字与nextLine(); 之后,使用nextInt()具有相同的扫描仪! 它不与Java扫描仪很好地工作,和许多Java开发人员选择只使用另一个扫描仪为整数。 如果你愿意,你可以调用这些扫描仪SCAN1和SCAN2。



Answer 7:

使用临时 scan.nextLine(); 这将消耗\ n字符



Answer 8:

如果你不希望使用的解析器:

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(); // This line you have to add (It consumes the \n character)
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is=" + s);


Answer 9:

柜面你不想使用nextint,你也可以使用缓冲的读者,其中使用inputstreamreadline功能读取的字符串。



Answer 10:

简单的解决方案消耗\ n字符:

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);

        scan.nextLine();
        System.out.println("enter a string");
        s = scan.nextLine();
        System.out.println("string is="+s);
    }
}


Answer 11:

import java.util.*;

public class ScannerExample {

    public static void main(String args[]) {
        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.next();
        System.out.println("string is=" + s);
    }
}


Answer 12:

 s=scan.nextLine();

它返回输入被跳过。

所以你可能会使用

 s=scan.next();


文章来源: Why can't I enter a string in Scanner(System.in), when calling nextLine()-method?