10

How does this program actually work...?

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

The output is:

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

13 回答 13

20

.nextInt()获取下一个int,但不读取换行符。这意味着当您要求它读取“下一行”时,您会从第一次读取到换行符的末尾。

您可以在获得解决此问题.nextLine()后插入另一个。或者(我更喜欢这种方式),将in 作为 aint读取,然后将其解析为.intstringint

于 2012-09-04T14:09:32.670 回答
7

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

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

选项 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);
    }
}
于 2012-09-04T14:14:35.013 回答
2

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

于 2012-09-04T14:09:59.277 回答
2

这是因为在 nextInt() 执行完成后,当调用 nextLine() 方法时,它会扫描 nextInt() 之后出现的换行符。您可以通过以下任一方式执行此操作:

  1. 您可以在 nextInt() 之后使用另一个 nextLine() 方法将扫描仪移过换行符。
  2. 您可以使用不同的 Scanner 对象来扫描整数和字符串(您可以将它们命名为 scan1 和 scan2)。
  3. 您可以在扫描仪对象上使用下一个方法作为

    扫描.next();

于 2016-07-09T15:46:32.110 回答
1

不要尝试使用 nextLine() 扫描文本;在使用 nextInt() 和相同的扫描仪之后!它不适用于 Java Scanner,许多 Java 开发人员选择只使用另一个 Scanner 来处理整数。如果需要,您可以将这些扫描仪称为 scan1 和 scan2。

于 2013-09-17T09:58:35.890 回答
1

当我们通过 scan.nextLine() 获取输入字符串时,扫描仪的缓冲区已满;所以它下次跳过输入。所以解决方法是我们可以创建一个新的 Scanner 对象,对象的名字可以和之前的对象一样......

于 2012-09-13T14:24:32.637 回答
1

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

于 2017-04-25T07:14:40.657 回答
0

如果您不想使用解析器:

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);
于 2013-09-17T10:11:16.707 回答
0
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);
    }
}
于 2017-07-18T22:20:56.937 回答
0

.nextInt()如果您在它之后声明,将不会阅读“下一行”直到最后.nextLine()。我建议尝试在“int”之前扫描“String”

s = scan.nextLine();
a = scan.nextInt();

以该顺序。

于 2021-06-09T17:41:28.563 回答
0

如果您不想使用 nextint,您也可以使用缓冲阅读器,其中使用inputstreamreadline函数读取字符串。

于 2016-05-30T11:21:48.547 回答
0

使用 \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);
    }
}
于 2017-06-06T02:39:05.600 回答
-1
 s=scan.nextLine();

它返回输入被跳过。

所以你可以使用

 s=scan.next();
于 2012-09-04T14:17:37.337 回答