我有以下Java代码(在默认的Eclipse控制台上执行):
String name = "";
System.out.printf("Name of the Story Arc: ");
if(in.hasNext()) {
name = in.nextLine();
}
int l = 0;
System.out.printf("Length of the Story Arc: ");
if(in.hasNextInt()) {
l = in.nextInt();
}
StoryArc a = new StoryArc(name, id, issues_nb + 1, l);
story_arcs.add(a);
我试图连续多次执行它,但是它的行为很奇怪: 第一次执行可以正常工作,询问名称,然后询问长度。第二次执行时,它询问名称,但不询问长度(设置为0)。第三个执行会询问长度,但将名称设置为“”,它会像这样循环,在偶数执行中使用长度,在奇数执行中使用名称。
这是我使用Java编写的第一个程序,所以我想我对扫描仪不了解,但是经过长时间的研究我仍然无法弄清,所以请帮忙。
修改: 谢谢你们!在您的帮助下,我们设法使其成功!
答案 0 :(得分:0)
DateTime date = new DateTime.now();
Future<Null> selectDate(BuildContext context) async {
final Datetime picked = await showDatePicker(
context: context,
initialDate: date,
firstDate: new DateTime(2010),
lastDate: null);
if (picked != null && picked != date) {
print('date selected: ${date.toString()}');
setState(() {
date = picked;
});
}
}
仅会获取整数,但并不表示您已经完成输入该行,因此您必须告诉扫描仪您自己。有两种方法可以做到这一点:
您可以执行l = in.nextInt()
来表示我们已经完成了包含整数的行:
将in.nextLine();
更改为:
l = in.nextInt();
或者,您可以将l = in.nextInt();
if(in.hasNext()){
// Ignore the rest of the line that contained the length integer-input:
in.nextLine();
}
用于所有输入,然后将String自己转换为整数:
将in.nextLine()
更改为:
l = in.nextInt();
答案 1 :(得分:0)
您需要进行while
循环才能获得有效的name
,并且
您需要一个while
的{{1}}循环来获取try/catch
,因为用户可以输入无效值而不是有效整数:
l
答案 2 :(得分:0)
尝试一下。您的代码没有问题,但是可以运行之后可能会帮到您
import java.util.*;
public class Answer {
public static void main(String[] args) {
String name = "";
System.out.printf("Name of the Story Arc: ");
Scanner in = new Scanner(System.in);
if(in.hasNext()) {
name = in.nextLine();
}
int l = 0;
System.out.printf("Length of the Story Arc: ");
if(in.hasNextInt()) {
l = in.nextInt();
}
System.out.println("Name of the Story Arc: "+name);
System.out.println("Length of the Story Arc: "+l);
}
}