Scanner scan = new Scanner(System.in);
int year = -1;
int yearDuplicate = -1;
System.out.println("This calculator tells you whether a year that you "
+ "enter is a leap year.\nPlease enter a year:");
do{
try{
year = scan.nextInt();
}catch(Exception e){
System.out.println("ERROR. Please enter a numerical digit "
+ "without decimals:");
scan.next();
}
}while(year % 1 != 0);
do{
if(yearDuplicate % 4 == 0){
if(yearDuplicate % 100 == 0){
if(yearDuplicate % 400 == 0){
System.out.println(yearDuplicate + " is a leap year.");
}else{
System.out.println(yearDuplicate + " is not a leap year.");
}
}else{
System.out.println(yearDuplicate + " is a leap year.");
}
}else{
System.out.println(yearDuplicate + " is not a leap year.");
}
System.out.println("Enter another year or enter '-1' to quit:");
try{
yearDuplicate = scan.nextInt();
}catch(Exception e){
System.out.println("ERROR. Please enter a numerical digit "
+ "without decimals:");
scan.next();
}
}while(yearDuplicate != -1);
我正在尝试制作一个闰年计算器,它还可以告诉你是无意中输入了字符串还是双精度而不是整数。我想让这个程序反复运行“错误。请输入一个不带小数的数字:”直到用户输入一个整数。然而,目前,对于第一个try-catch块,如果我输入了两种错误的输入类型,它会给我以下错误消息:
test
ERROR. Please enter a numerical digit without decimals:
-1 is not a leap year.
Enter another year or enter '-1' to quit:
test
ERROR. Please enter a numerical digit without decimals:
BUILD SUCCESSFUL
第二个至少稍微好一点,它不断重复我输入的最后一个整数的结果(年份“是闰年/不是闰年”),但至少它永远重复,不像第一个。
test
ERROR. Please enter a numerical digit without decimals:
10 is not a leap year.
Enter another year or enter '-1' to quit:
test
ERROR. Please enter a numerical digit without decimals:
10 is not a leap year.
Enter another year or enter '-1' to quit:
所有我想要的错误消息得到重播,直到你输入正确的数字。我如何摆脱以前的输入结果,我如何修复第一次尝试捕捉块只运行两次的事实?
我在网上看了一下,但似乎如果我改变了这个程序的一小部分,就会有别的东西坏掉。如果我将第一个while循环的条件设置为while(年份%1==0),它会完全按照我的要求执行;但这意味着如果它是一个整数,while循环会重复,这与我希望它做的正好相反。如果我搞砸了扫描。下一个();,它会给我一个无限的错误循环。
顺便说一句,有两个try-catch块,因为用户在一年内有两次机会进入,我可能需要在两个地方纠正它们。如果我把它们都放在同一个while循环中,第一次就可以了,但在那之后,每次我都需要输入两个数字(第一个try-catch的数字会被第二个try-catch覆盖)。
编辑:我将year和yearDuplicate的起始值更改为0,在try-catch块中声明了扫描仪,并取消了扫描。next();在这两种情况下,试着接球。现在,我得到了一个带有first try catch块的循环,但它仍然继承了我之前的输入。
修正了密码。
int year = 0;
int yearDuplicate = 0;
System.out.println("This calculator tells you whether a year that you "
+ "enter is a leap year.\nPlease enter a year:");
do{
Scanner scan = new Scanner(System.in);
try{
yearDuplicate = scan.nextInt();
if(yearDuplicate % 4 == 0){
if(yearDuplicate % 100 == 0){
if(yearDuplicate % 400 == 0){
System.out.println(yearDuplicate + " is a leap year.");
}else{
System.out.println(yearDuplicate + " is not a leap year.");
}
}else{
System.out.println(yearDuplicate + " is a leap year.");
}
}else{
System.out.println(yearDuplicate + " is not a leap year.");
}
System.out.println("Enter another year or enter '-1' to quit:");
}catch(Exception e){
System.out.println("ERROR. Please enter a numerical digit "
+ "without decimals:");
scan.next();
}
}while(yearDuplicate != -1);
基本上移除了第一个试抓块。使第二个try-catch块包含整个do-while循环。如果有人知道我以前犯过什么错误以及为什么他们错了,我还是想知道。
你的基本读取直到你得到一个整数块应该看起来像这样:
do {
try {
year = scan.nextInt();
if (year <= 0) { // see comment
System.out.println("ERROR. Please enter positive number");
}
} catch(Exception e){
System.out.println("ERROR. Please enter a number "
+ "without decimals");
scan.next();
year = -1;
}
} while (year <= 0);
因此,如果有非数字输入,您可以主动设置一个值,该值将导致循环,而不是依赖可能已经存在的值。
另外,你要确保输入是正的。
考虑到你应该能够理解整个程序。
在我说“见评论”的地方,也许你可能想检查一个合理的年份;也许在1752年左右(当时英国和美国采用公历)之前扔掉任何东西。
您最初的问题可能是由于年份%1!=0
条件。这意味着“年除以1的余数不是0”。对于非负值来说总是如此。在这种情况下,我必须查看Java如何实现%
,寻找负值。
对于我的程序,我要编写一个程序,它接受2到10之间的行数。生成n行的乘法三角形。每行包含的条目不超过其行大小。这一点我没有问题。但是,在用户将数字0输入到我的问题“请输入要打印的行数:”之后,应该终止循环并打印“感谢您使用此程序!”我用了一个DO。。。WHILE循环以确定用户是否希望继续。在我的循环中,我将用户想要打印的数字声明为int num。我的循环应该持续到num
do loop用于执行一定次数的语句。 需要执行语句的次数由传递给do循环的值确定。 语法 (Syntax) do循环语句的语法如下 - do count statement #1 statement #2 ... End Statement#1 and Statement#2是一系列在do循环中执行的语句。 count变量表示do循环需要执行的次数。 流程图 (Fl
当布尔条件为True或者条件变为True时,它会重复封闭的语句块。 它可以随时使用Exit Do语句终止。 此循环结构的语法是 - Do { While | Until } condition [ statements ] [ Continue Do ] [ statements ] [ Exit Do ] [ statements ] Loop -or- Do
do循环结构允许迭代地执行语句或一系列语句,而给定条件为真。 语法 (Syntax) do循环的一般形式是 - do var = start, stop [,step] ! statement(s) … end do Where, 循环变量var应该是一个整数 start是初始值 stop是最终值 step是增量,如果省略,则变量var增加1 例如 (For example)
我已经用蓝鸟学习promise两周了。我已经基本理解了它们,但是我去解决了一些相关的问题,似乎我的知识已经崩溃了。我试着做这个简单的代码: 作为一个具体例子: 现在我已经做了作业!还有同样的问题,但在这里面向Q. js: 为promise编写循环的正确方法。 但是接受的答案,以及其他答案: 面向Q.js或RSVP 针对bluebird的唯一答案是使用递归。这些看起来很可能会在无限循环(比如我的循环
与while循环顶部测试循环条件的for和while循环不同, do...while循环do...while循环底部检查其条件。 do...while循环类似于while循环,除了do ... while循环保证至少执行一次。 语法 (Syntax) Perl中do...while循环的语法是 - do { statement(s); }while( condition ); 应该注意的是