我想知道为什么当我在被问到这个方法中是否有更多数字后输入'y'时代码正常工作并离开循环,但在键入'n'并点击返回时,我需要输入' n'再次点击返回或者进程刚挂起。
为什么?
字符串'input'是从main方法中的用户输入传递的,在本例中是“addition”。
private int add(String input)
{
int additionValue = 0;
boolean keepGoing = true;
if (input.matches("addition"))
{
while (keepGoing == true)
{
System.out.println("Next digit = (Type the digit)");
additionValue = additionValue + scan.nextInt();
System.out.println("Any more digits? Type y/n");
if (scan.next().matches("Y|y"))
{
keepGoing = true;
}
else if (scan.next().matches("N|n"))
{
keepGoing = false;
}
else
{
System.out.println("Great, you broke it.");
System.exit(1);
}
}
}
}
我设法通过
使代码正常工作System.out.println("Any more digits? Type y/n");
String yayOrNay = scan.next();
if (yayOrNay.length()==1 && yayOrNay.charAt(0)=='y')
{
keepGoing = true;
}
但对于我所做的一切而言,这对我来说似乎有点过于复杂。
答案 0 :(得分:4)
scan.next()
从输入流中提取一个新字符。
因此,当您检查'n'并执行scan.next().matches("Y|y")
时,它实际上是跳过'n'进行下一次比较。
解决方案是将scan.next()
分配给您可以使用的变量:
while (keepGoing == true)
{
System.out.println("Next digit = (Type the digit)");
additionValue = additionValue + scan.nextInt();
System.out.println("Any more digits? Type y/n");
String next = scan.next();
if (next.matches("Y|y"))
{
keepGoing = true;
}
else if (next.matches("N|n"))
{
keepGoing = false;
}
else
{
System.out.println("Great, you broke it.");
System.exit(1);
}
}
答案 1 :(得分:1)
这是因为您调用scan.next()两次。 你必须调用它一次,将结果字符串放在一个变量中。
String input2 = scan.next();
if (input2.matches("Y|y"))
{
keepGoing = true;
}
else if (input2.matches("N|n"))
{
keepGoing = false;
}
答案 2 :(得分:1)
您需要输入'n'两次,因为您在每个if条件下扫描输入。因此,如果字母不是'y',程序将在下一个if语句中等待用户输入。
您可以这样做:
String yayOrNay = scan.next();
if (yayOrNay.matches("Y|y"))
{
keepGoing = true;
}
else if (yayOrNay.matches("N|n"))
{
keepGoing = false;
}
...
答案 3 :(得分:0)
if (scan.next().matches("Y|y"))
{
keepGoing = true;
}
else if (scan.next().matches("N|n"))
您调用scan.next 两次
第一次检查是否是Y,如果不是你再次从输入中读取
所以
somevar=scan.next()
if (somevar.matches("Y|y"))
{
keepGoing = true;
}
else if (somevar.matches("N|n"))
{
keepGoing = false;
}
else ..
答案 4 :(得分:0)
您的错误是两次调用scan.next(),这会请求两个输入。
private int add(String input)
{
int additionValue = 0;
boolean keepGoing = true;
if (input.matches("addition"))
{
while (keepGoing == true)
{
System.out.println("Next digit = (Type the digit)");
additionValue = additionValue + scan.nextInt();
System.out.println("Any more digits? Type y/n");
String s = scan.next();
if (s.matches("Y|y"))
{
keepGoing = true;
}
else if (s.matches("N|n"))
{
keepGoing = false;
}
else
{
System.out.println("Great, you broke it.");
System.exit(1);
}
}
}
}
答案 5 :(得分:0)
请试试这个,
Scanner scan = new Scanner(System.in);
int additionValue=0;
while (true)
{
System.out.println("Any more digits? Type y/n");
if (scan.next().matches("Y|y"))
{
System.out.println("Next digit = (Type the digit)");
additionValue = additionValue + scan.nextInt();
//System.out.println("Any more digits? Type y/n");
}
else
{
System.out.println("Thanks");
break;
}
}
我不确定这个逻辑是否适合你。 '如果你想要,你也可以'n'处理'
输出
Any more digits? Type y/n
y
Next digit = (Type the digit)
5
Any more digits? Type y/n
n
Thanks