我一直试图通过各种方法退出循环,这是我得到的最接近但仍然有扫描仪不匹配错误。
有人能指出我失踪的东西吗?
代码:
from django.core.exceptions import ValidationError
答案 0 :(得分:1)
你可以使外循环成为一个真正的循环。然后,当你想退出时,你只需从方法返回,因此停止方法&环。不需要退出哨兵值
你也提示输入Y / N,所以你应该检查,不是真或假。
String q = "n";
do {
System.out.println("Do you want to quit: Y/N ?");
String q = input.next();
if (q.equalsIgnoreCase("y")) return; // quit right here
else if (!q.equalsIgnoreCase("n"))
{
System.out.println("That is neither a y or n.");
continue; // repeat
} else { } // entered y, so continue on with the outer loop
} while (!q.equalsIgnoreCase("y") || !q.equalsIgnoreCase("n"));
总的提示。编写这个模式是一个非常初学的事情,它可能看起来很好且易于理解
if(check %400==0) {
four_hundred=true;
} else {
four_hundred=false;
}
但是,你真的应该这样写
four_hundred = check % 400;
在这里,为什么在保证价值的情况下得到四个是真的?
if(four==true) {
if(four==true&&hundred==false&&four_hundred==false) {
System.out.println("The year is a leap year");
}
if(four==true&&...
答案 1 :(得分:1)
您的代码中存在一些问题可以解释您无法退出循环的原因。
System.out.println("DO YOU WANT TO QUIT: Y/N ?");
while(!input.hasNext("true|false")) {
System.out.println("That is neither a true or false.");
input.nextBoolean();
if(input.hasNextBoolean()) {
quit=true;
}
if(input.hasNextBoolean()) {
quit=false;
}
}
使用input.nextBoolean();
您可以阅读输入,但有两个问题:
InputMismatchException
或true
false
暂时忽略第一个问题,问题是然后根据另一个输入检查尝试设置quit
。这意味着,如果用户再次输入true或false,input.hasNextBoolean()
只能是true
。
除了这个while循环外,最外面的do / while
也存在问题 ...
} while(!quit==false);
您正在测试不 quit
并保持循环,如果它是false
。这意味着当quit == true
你留在循环中时。
你可能想写while (!quit)
。
答案 2 :(得分:0)
我建议您改进代码:
这是一段代码:
import java.util.*;
public class LeapYear
{
public static void main( String[] args ) {
Scanner input = new Scanner(System.in);
boolean isFour;
boolean isQuit = true;
int checkedYear = 2000;
int minimumAcceptedYear = 1582;
//System.out.println("Enter a year to check if it is a leap year");
do {
do {
System.out.println("Enter a year to check if it is a leap year");
checkedYear = input.nextInt();
if ( checkedYear < minimumAcceptedYear ) {
System.out.println("That year is too old, choose a year in more recent history");
}
} while ( checkedYear < minimumAcceptedYear );
isFour = (checkedYear % 4) == 0;
if ( isFour ) {
System.out.println("The year is a leap year");
} else {
System.out.println("The year is not a leap year");
}
System.out.println("DO YOU WANT TO QUIT: (true/false) ?");
if ( input.hasNextBoolean() ) {
isQuit = input.nextBoolean();
} else {
System.out.println("That is neither a true or false.");
}
} while ( !isQuit );
}
}
这看起来好多了。我建议你提取
isFour = (checkedYear % 4) == 0;
if ( isFour ) {
System.out.println("The year is a leap year");
} else {
System.out.println("The year is not a leap year");
}
使用参数isLeapYear
的另一个方法aYear
。您有一个不匹配错误,因为您在检查年份过长后给出了无效的输入数据。如果条件低于checkedYear
分配,则应移动以避免这些错误。我希望这是一个有用的答案。