Java 如何修复nextLine错误,以便打印两个单词?

Java 如何修复nextLine错误,以便打印两个单词?,java,Java,下面的代码在运行时可以很好地工作,但是如果你在“bands”问题中输入两个单词,你只会得到一个打印出来的单词 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("What is your name?"); String name;

下面的代码在运行时可以很好地工作,但是如果你在“bands”问题中输入两个单词,你只会得到一个打印出来的单词

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("What is your name?");
    String name;
    name = scan.next();
    System.out.println("Hello " + name);
    System.out.println("What is your age?");
    int years;
    years = scan.nextInt();
    int ageInMonths;
    ageInMonths = years * 12;
    System.out.print("Your age is ");
    System.out.print(ageInMonths);
    System.out.println(" in months");
    System.out.println("What are your favorite two bands?");
    String bands = scan.next();
    System.out.println("I like >>" + bands + "<<too!");
  }
}
import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“你叫什么名字?”);
字符串名;
name=scan.next();
System.out.println(“Hello”+name);
System.out.println(“您的年龄是多少?”);
整数年;
年份=scan.nextInt();
国际月数;
年龄月=年*12;
系统输出打印(“您的年龄是”);
系统输出打印(以月为单位);
System.out.println(“以月为单位”);
你最喜欢的两个乐队是什么;
String bands=scan.next();
类中的方法
next()
将只返回下一个标记

如oracle文档中所述:

查找并返回此扫描程序中的下一个完整令牌。A 完整标记的前面和后面是与 分隔符模式。此方法在等待输入时可能会被阻止 扫描,即使上一次调用hasNext()返回true

默认分隔符是一个空格,因此如果您的乐队名称包含多个单词,则该分隔符将不起作用

用于读取整行输入用户
nextLine()

如果要分别使用两个波段名称,请调用
nextLine()
两次以分别获取每个输入:

System.out.println("What are your favorite two bands?");
String band1 = scan.nextLine();
String band2 = scan.nextLine();
System.out.println("I like >>" + band1 + " and " + band2 + "<<too!");
System.out.println(“你最喜欢的两个乐队是什么?”);
String band1=scan.nextLine();
String band2=scan.nextLine();

System.out.println(“我喜欢>>”+band1+“和“+band2+”>“+bands+”要获得包含多个单词的完整字符串(直到
enter
press),您应该使用
scan.nextLine()
而不是
scan.next()
scan.next()
仅用于读取下一个单词)

不要忘记在scan.nextLine()之后和之前添加一个额外的
scan.nextLine()
(参见中的内容):

publicstaticvoidmain(字符串…参数){
尝试(扫描仪扫描=新扫描仪(System.in)){
系统输出打印(“你叫什么名字?”);
字符串名称=scan.nextLine();
System.out.println(“Hello”+name);
系统输出打印(“您的年龄是多少?”);
int years=scan.nextInt();
整数月=年*12;
System.out.println(“您的年龄是“+ageInMonths+”in months”);
System.out.print(“你最喜欢的两个乐队是什么?”);
scan.nextLine();//在scan.nextLine()之后增加一个-它检索一个空字符串
String bands=scan.nextLine();

System.out.println(“我喜欢>>”+bands+“用户扫描.nextLine()instad of next();如果您使用scan.nextLine而不是仅仅使用next,它不会给您一个从链接中响应的机会,您必须从以前的阅读中删除换行符(请参阅下面我的答案)
    Scanner scan = new Scanner(System.in);
    System.out.println("What is your name?");
    String name;
    name = scan.next();
    scan.nextLine();
    System.out.println("Hello " + name);
    System.out.println("What is your age?");
    int years;
    years = scan.nextInt();
    scan.nextLine();
    int ageInMonths;
    ageInMonths = years * 12;
    System.out.print("Your age is ");
    System.out.print(ageInMonths);
    System.out.println(" in months");
    System.out.println("What are your favorite two bands?");
    String bands = scan.nextLine();
    System.out.println("I like >>" + bands + "<<too!");
public static void main(String... args) {
    try (Scanner scan = new Scanner(System.in)) {
        System.out.print("What is your name? ");
        String name = scan.nextLine();
        System.out.println("Hello " + name);

        System.out.print("What is your age? ");
        int years = scan.nextInt();
        int ageInMonths = years * 12;
        System.out.println("Your age is " + ageInMonths + " in months");

        System.out.print("What are your favorite two bands? ");
        scan.nextLine();    // extra one after scan.nextInt() - it retrieves a empty string
        String bands = scan.nextLine();
        System.out.println("I like >>" + bands + "<< too!");
    }
}
What is your name? John Doe
Hello John Doe
What is your age? 666
Your age is 7992 in months
What are your favorite two bands? one two three
I like >>one two three<< too!