Java nextLine()和next()在命名对象时提供空格
在使用next()跳过用户输入后的额外行之后,我尝试使用nextLine()提取用户当前输入的变量名。我的程序使用的是基于文本的菜单,这是我能够使菜单流畅运行的唯一方法(以及do-while循环和你所做的事情,但我偏离了主题)。我的问题是:虽然我知道我试图命名的对象正在从我的主方法接收数据,但它没有给出正确的名称,只是给它一个空白字符。我知道这一点,因为它重命名了对象,但它没有正确地重命名对象,它只是在一个空格中给出(我在构造函数方法中给对象的name变量一个“N/a”)。我现在和将来如何解决这个问题 主要方法snippitJava nextLine()和next()在命名对象时提供空格,java,object,next,Java,Object,Next,在使用next()跳过用户输入后的额外行之后,我尝试使用nextLine()提取用户当前输入的变量名。我的程序使用的是基于文本的菜单,这是我能够使菜单流畅运行的唯一方法(以及do-while循环和你所做的事情,但我偏离了主题)。我的问题是:虽然我知道我试图命名的对象正在从我的主方法接收数据,但它没有给出正确的名称,只是给它一个空白字符。我知道这一点,因为它重命名了对象,但它没有正确地重命名对象,它只是在一个空格中给出(我在构造函数方法中给对象的name变量一个“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;
}
这似乎是一个简单的问题,但我需要一些外部的观点!我不认为我在这里关注的是真正的问题。谢谢问题就在这里:
in.next();
last = in.nextLine();
entry.setLast(last);
.next()中的代码>行将读取第一个可用的标记(非空白字符序列),并将其从输入中丢弃
last=in.nextLine()
将当前输入行的其余部分保存到字符串last中,但您想要的姓氏已被丢弃,因此该行中没有剩余内容。in.nextLine()看到的输入中的第一个字符是换行符,因此它只返回一个空字符串,就好像行中没有任何内容一样
您希望保存in.next()返回的字符串,而不是像这样保存in.nextLine()返回的字符串:
为什么last\u name
和setLast
是静态的?
last = in.next();
in.nextLine();
entry.setLast(last);
package stackoverflow.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