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

Java .nextLine()方法不接受后续字符串输入,java,Java,我有一个程序,要求用户输入数字和字符。为此,我使用了Scanner类。但当我接受两个后续字符串输入时,控制台只是移动并要求用户输入第二个字符串。用户无法输入第一个字符串。为了更具体,我在下面附上了我的代码 import java.util.Scanner; class XYZ { public static void main(String args[]) { int x, y, z, b, c; String p, q; Scanne

我有一个程序,要求用户输入数字和字符。为此,我使用了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);
    }
}

这是因为ScannernextLine方法不会使用输入的最后一个换行符,因此该换行符将在下次调用ScannernextLine时使用

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

更新: c=sc.nextInt之后; 你需要再加一句话,即

sc.nextLine();

您需要在呼叫nextLine后,对nextLine进行虚拟呼叫。nextInt没有考虑\n

或者,最好只使用nextLine接受所有输入,无论哪个输入需要是INT,只需使用:

int i = Integer.parseInt(**string**);
这有用吗

import java.util.Scanner;

public class Solution {

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

        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}
要获取三行输入:int、double和String

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

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);
  }
}
这就是为什么控制台要求用户输入第二个字符串,以便您可以使用

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

那么,您对输入第一个字符串的建议是什么呢?请查找更新的答案。我已经虚拟调用了next,但仍然无法输入第一个字符串。我还想对整数和字符串输入使用相同的scanner类对象。@PratikPaul我错误地写了next而不是nextLine。对不起!在从控制台接收整数输入时,我广泛使用列出的替代方法。@PratikPaul Yep。对于您的目的来说,这确实是更好的方式。@zx485我将从下次开始做,谢谢