【问题标题】:nextLine() and next() giving blanks when naming objectnextLine() 和 next() 在命名对象时给出空格
【发布时间】:2026-01-27 11:05:01
【问题描述】:

在用户输入后使用 next() 跳过多余的行后,我尝试让 nextLine() 获取用户当前输入的变量名称。我的程序正在使用基于文本的菜单,这是我能够使菜单顺畅流动的唯一方法(以及 do-while 循环和你有什么但我离题了)我的问题是:虽然我知道我试图命名的对象正在从我的主要方法接收数据,它没有给它正确的名称,只是给它一个空白字符。我知道这一点是因为它重命名了对象,但它没有正确重命名对象,它只是在一个空格中给出(我在构造函数方法中给对象的名称变量“N/A”)。我现在和将来如何解决这个问题?

主要方法片段

        String last;        
        selector = in.nextInt();
        if (selector == 1)
        {
           System.out.print("Please enter Last Name: ");
           in.next();
           last = in.nextLine();
           entry.setLast(last);
           terminator = true;
        }

对象命名方法

   private static String last_name;
   public static String setLast(String a)
   {
      last_name = a;
      return last_name;
   }

这似乎是一个简单的问题,但我需要一些外部视角!我不认为我在这里关注真正的问题。谢谢

【问题讨论】:

标签: java object next


【解决方案1】:

问题就在这里:

in.next();
last = in.nextLine();
entry.setLast(last);

in.next(); 行将读取第一个可用标记(非空白字符序列)并从输入中丢弃它。

last = in.nextLine(); 将当前输入行的其余部分保存到字符串最后,但您想要的姓氏已经被丢弃,因此该行中没有任何内容。 in.nextLine() 看到的输入中的第一个字符将是换行符,因此它只返回一个空字符串,就好像该行中没有任何内容一样。

你想保存 in.next() 返回的字符串,而不是像这样保存 in.nextLine():

last = in.next();
in.nextLine();
entry.setLast(last);

【讨论】:

    【解决方案2】:
    package *.q_24947751;
    
    import java.util.Scanner;
    
    public class UserInput {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("To exit please type 'Quit'");
            while (sc.hasNext()) {
                String input = sc.nextLine();
                if(!input.equalsIgnoreCase("Quit")) {
                    System.out.println("Enter first name");
                    String name = sc.nextLine();
                    System.out.println("Enter surname");
                    String surname = sc.nextLine();
                    System.out.println("Enter number");
                    try {
                        Integer.parseInt(sc.nextLine());
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    }
                } else {
                    break;
                }
            }
        }
    }
    
    //Output:
    //To exit please type 'Quit'
    //Proceed
    //Enter first name
    //Nikhil
    //Enter surname
    //Joshi
    //Enter number
    //22
    

    【讨论】: