我正在编写一个使用Event类的程序,其中包含一个日历实例和一个String类型的描述。创建事件的方法使用扫描程序来获取月,日,年,小时,分钟和描述。我遇到的问题是Scanner.next()方法只返回空格前的第一个单词。因此,如果输入是“我的生日”,则该事件实例的描述只是“我的”。
我做了一些研究,发现人们使用Scanner.nextLine()来解决这个问题,但是当我尝试这个时,它只是跳过输入应该去的地方。以下是我的代码的一部分:
System.out.print("Please enter the event description: ");
String input = scan.nextLine();
e.setDescription(input);
System.out.println("Event description" + e.description);
e.time.set(year, month-1, day, hour, min);
addEvent(e);
System.out.println("Event: "+ e.time.getTime());
这是我得到的输出:
Please enter the event description: Event description
Event: Thu Mar 22 11:11:48 EDT 2012
它跳过空格以输入描述字符串,因此,描述(最初设置为空格 - “”)永远不会更改。
我该如何解决这个问题?
答案 0 :(得分:17)
当您使用nextInt()读取年月日时分钟时,它会在解析器/缓冲区中留下其余部分(即使它是空白的),所以当您调用nextLine()时,您正在阅读其余部分第一行。
我建议您在打印下一个提示之前调用scan.nextLine()来丢弃剩下的行。
答案 1 :(得分:3)
当您使用类似nextInt()
的内容读取年月日时分钟时,它会在解析器/缓冲区中留下其余部分(即使它是空白的),因此当您致电nextLine()
时阅读第一行的其余部分。
我建议您使用scan.next()
代替scan.nextLine()
。
答案 2 :(得分:0)
Scanner ss = new Scanner(System.in);
System.out.print("Enter the your Name : ");
// Below Statement used for getting String including sentence
String s = ss.nextLine();
// Below Statement used for return the first word in the sentence
String s = ss.next();
答案 3 :(得分:0)
如果在nextInt()方法之后立即使用nextLine()方法,则nextInt()读取整数标记;因此,该整数输入行的最后一个换行符仍在输入缓冲区中排队,下一个nextLine()将读取整数行的其余部分(为空)。因此我们读取可以读取空白空间的另一个字符串可能会起作用。检查以下代码。
导入java.util.Scanner;
公共类解决方案{
{"path" : [
{"position" : { "x": "1111", "y" : "2222"}, "orientation" : { "x":"0"} },
{"position" : { "x": "1111", "y" : "2222"}, "orientation" : { "x":"0"} }
]}
}
答案 4 :(得分:0)
在扫描字符串之前使用它清除先前的键盘缓冲区 它将解决您的问题 Scanner.nextLine(); //这是清除键盘缓冲区
答案 5 :(得分:0)
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();
System.out.println("String: " + s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
}
}