.nextLine()方法不接受后续的字符串输入

时间:2016-03-03 10:24:22

标签: java

我有一个程序要求用户输入数字和字符。为此我使用Scanner类。但是当我接受两个后续字符串输入时,控制台只是移动并要求用户输入第二个字符串。用户无法输入第一个字符串。我已将下面的代码附加到更具体的位置。

import java.util.Scanner;

class XYZ {

    public static void main(String args[]) {
        int x, y, z, b, c;
        String p, q;
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter a number");
        b = sc.nextInt();

        System.out.println("Enter a new number");
        c = sc.nextInt();

        System.out.println("Enter a String");
        p = sc.nextLine();

        System.out.println("Enter a new String");
        q = sc.nextLine();

        System.out.println("Enter a number");
        x = sc.nextInt();

        System.out.println("Enter 2nd number");
        y = sc.nextInt();

        System.out.println("Enter 3rd number");
        z = sc.nextInt();

        ABC a = new ABC();

        a.PQR(b, c);
        a.PQR(p, q);
        a.PQR(x, y, z);
    }
}

class ABC {

    void PQR(int a, int b) {
        int res = a + b;
        System.out.println("The sum is" + " " + res);
    }

    void PQR(String a, String b) {
        System.out.println("Thye concataneted string is" + a + " " + b);
    }

    void PQR(int a, int b, int c) {
        int res = a * b * c;
        System.out.println("The product is" + " " + res);
    }
}

5 个答案:

答案 0 :(得分:2)

这是因为Scanner#nextInt方法不消耗输入的最后一个换行符,因此在下次调用Scanner#nextLine时会消耗该换行符。

ref

OR

如果在nextInt()方法之后立即使用nextLine()方法,请回想一下nextInt()读取整数标记,因此,该行整数输入的最后一个换行符仍然在输入缓冲区中排队,下一个nextLine()将读取整数行的剩余部分(为空)。 - hackerrank.com

更新: c = sc.nextInt();之后 你还需要再说一遍,即

sc.nextLine();

HTH!

答案 1 :(得分:2)

在致电nextLine()后,您需要拨打nextInt()来拨打电话。 nextInt()并未取得" \ n"考虑到了。

或者,最好只使用nextLine()接受所有输入以及需要ints的任何输入,只需使用:

int i = Integer.parseInt(**string**);

这有帮助吗?

答案 2 :(得分:2)

import java.util.Scanner;

public class Solution {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int i = scan.nextInt();
    double d = scan.nextDouble();
    scan.nextLine();
    String s = scan.nextLine();

    // Write your code here.

    System.out.println("String: " + s);
    System.out.println("Double: " + d);
    System.out.println("Int: " + i);
  }
}

答案 3 :(得分:1)

read -r -a astuff <<< "$stuff"

取三行输入:int,double和String

答案 4 :(得分:1)

如果在nextLine()方法之后立即使用nextInt()方法,请记住nextInt()读取整数令牌;因此,该整数输入行的最后一个换行符仍在输入缓冲区中排队,下一个nextLine()将读取整数行的其余部分(为空)。

这就是为什么控制台要求用户输入第二个字符串,所以您可以使用

Scanner md = new Scanner(System.in);
int n      = md.nextInt();  //before using the input stream for string
String st  = md.nextLine();