我不太了解 do { } while 结构
I don't really understand the do { } while structure
我正在努力学习 Java,我在高中学习了 Pascal,它有 repeat until..;
指令。
我想解决一个练习,在这个练习中,我应该一直输入数字,直到倒数第二个 + 倒数第二个数字等于我输入的最后一个数字。(a[i-2]+a[i-1] = a[i]);
我在没有数组的情况下做这件事,但事实并非如此真的很重要。
在 Pascal 中会很容易,因为 repeat until 更容易使用
例如,它将是
repeat
...
until ((a[i-2]+a[i-1] = a[i]) and (n=3));
n
是我输入的数值个数
我不知道如何在Java中引入它,到目前为止我这样做了但是如果我输入2 2 4
它不起作用。它应该停止,但它一直在询问数字
int pen = 0, ant = 0, s = 0, n = 1;
int ult = input.nextInt();
s = s + ult;
do {
do {
ant = pen;
pen = ult;
ult = input.nextInt();
n++;
s = s + ult;
} while (ant + pen != ult);
System.out.println(n);
} while ((n == 3) || (n < 4));
ult
是我输入的最后一个数字,s
是输入数字的总和。
谁能告诉我如何设置条件以便在我输入值 2 2 4
时它会停止?
Do-While 循环首先运行循环中的代码。它最后评估逻辑,如果为真,则重复循环内的代码,依此类推,直到逻辑为假。
解决此类棘手问题的方法是拿出一张 sheet 纸并记录每个变量的作用。像调试器一样逐行检查每一行,并在程序进行时记录每个变量中存储的内容。
这是最好的方法。您会发现您将更深入地了解您的程序是如何工作的。
您的问题只遗漏了一件事。您对 Pascal 代码的解释几乎是正确的,但如果不进行一些修改将无法工作。
在Java中,使用短路逻辑运算符进行检查。
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
未测试:
int n = 0;
int a[] = new a[3];
do {
n++;
a[0] = a[1];
a[1] = a[2];
a[2] = input.nextInt();
} while ((n < 3) || (a[0]+a[1] != a[2]));
System.out.println(a[2]);
Java 并不比 Pascal 更神奇,问题可能是您已经从编程中休息了很长时间 :)。不管怎样,我已经有一段时间没在 Java 中写任何东西了,但我在你的代码中发现的问题是在你输入三个整数后 n 等于 3,所以外循环继续。
int pen = 0, ant = 0, ult = 0, n = 0;
do {
ant = pen;
pen = ult;
ult = input.nextInt();
} while (++n < 3 || ant + pen != ult );
assert n >= 3;
assert ant + pen == ult;
请注意,自从 Pascal 以来,一切都是零索引而不是一索引。
Pascal 使用以下形式:
repeat
doStuff();
until (boleanValue);
Java基本一样,除了重要的一点:
do
doStuff();
while (~boleanValue);
重要的区别是 booleanValue
之前的“~”。 Pascal repeat ... until
保持 运行 直到布尔值计算为真。在 Java 中,do ... while
保持 运行 直到布尔值计算为 false。从 Pascal 转换为 Java 时,您需要将布尔值切换为另一种方式。
while
循环和 do
-while
循环之间的主要区别在于 while 循环执行急切条件检查 where as do-while 循环执行惰性条件检查
while
: 表达式在循环的顶部求值
语法:
while (expression) {
statement(s)
}
(取自http://www.w3resource.com/c-programming/c-while-loop.php)
示例:
public class WhileDemo{
public static void main(String args[]) {
boolean isSunday = false;
while(isSunday) {
System.out.println("Yayy.. Its Sunday!!");
}
}
}
输出:(控制台上没有打印任何内容)
原因:由于isSunday为假,循环体没有执行
do-while
: 表达式在循环底部求值。因此,do 块中的语句总是至少执行一次。
语法:
do {
statement(s)
} while (expression);
(取自http://www.w3resource.com/c-programming/c-do-while-loop.php)
示例:
public class DoWhileDemo{
public static void main(String args[]) {
boolean isSunday = false;
do {
System.out.println("Yayy.. Its Sunday!!");
} while(isSunday);
}
}
输出: Yayy.. 今天是星期天!!
原因: 首先执行 do
的主体,然后打印 Yayy.. Its Sunday!! 和那么条件 while(isSunday);
的计算结果为 false
因为 isSunday
是 false
并且循环终止
我正在努力学习 Java,我在高中学习了 Pascal,它有 repeat until..;
指令。
我想解决一个练习,在这个练习中,我应该一直输入数字,直到倒数第二个 + 倒数第二个数字等于我输入的最后一个数字。(a[i-2]+a[i-1] = a[i]);
我在没有数组的情况下做这件事,但事实并非如此真的很重要。
在 Pascal 中会很容易,因为 repeat until 更容易使用 例如,它将是
repeat
...
until ((a[i-2]+a[i-1] = a[i]) and (n=3));
n
是我输入的数值个数
我不知道如何在Java中引入它,到目前为止我这样做了但是如果我输入2 2 4
它不起作用。它应该停止,但它一直在询问数字
int pen = 0, ant = 0, s = 0, n = 1;
int ult = input.nextInt();
s = s + ult;
do {
do {
ant = pen;
pen = ult;
ult = input.nextInt();
n++;
s = s + ult;
} while (ant + pen != ult);
System.out.println(n);
} while ((n == 3) || (n < 4));
ult
是我输入的最后一个数字,s
是输入数字的总和。
谁能告诉我如何设置条件以便在我输入值 2 2 4
时它会停止?
Do-While 循环首先运行循环中的代码。它最后评估逻辑,如果为真,则重复循环内的代码,依此类推,直到逻辑为假。
解决此类棘手问题的方法是拿出一张 sheet 纸并记录每个变量的作用。像调试器一样逐行检查每一行,并在程序进行时记录每个变量中存储的内容。
这是最好的方法。您会发现您将更深入地了解您的程序是如何工作的。
您的问题只遗漏了一件事。您对 Pascal 代码的解释几乎是正确的,但如果不进行一些修改将无法工作。
在Java中,使用短路逻辑运算符进行检查。
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
未测试:
int n = 0;
int a[] = new a[3];
do {
n++;
a[0] = a[1];
a[1] = a[2];
a[2] = input.nextInt();
} while ((n < 3) || (a[0]+a[1] != a[2]));
System.out.println(a[2]);
Java 并不比 Pascal 更神奇,问题可能是您已经从编程中休息了很长时间 :)。不管怎样,我已经有一段时间没在 Java 中写任何东西了,但我在你的代码中发现的问题是在你输入三个整数后 n 等于 3,所以外循环继续。
int pen = 0, ant = 0, ult = 0, n = 0;
do {
ant = pen;
pen = ult;
ult = input.nextInt();
} while (++n < 3 || ant + pen != ult );
assert n >= 3;
assert ant + pen == ult;
请注意,自从 Pascal 以来,一切都是零索引而不是一索引。
Pascal 使用以下形式:
repeat
doStuff();
until (boleanValue);
Java基本一样,除了重要的一点:
do
doStuff();
while (~boleanValue);
重要的区别是 booleanValue
之前的“~”。 Pascal repeat ... until
保持 运行 直到布尔值计算为真。在 Java 中,do ... while
保持 运行 直到布尔值计算为 false。从 Pascal 转换为 Java 时,您需要将布尔值切换为另一种方式。
while
循环和 do
-while
循环之间的主要区别在于 while 循环执行急切条件检查 where as do-while 循环执行惰性条件检查
while
: 表达式在循环的顶部求值
语法:
while (expression) {
statement(s)
}
(取自http://www.w3resource.com/c-programming/c-while-loop.php)
示例:
public class WhileDemo{
public static void main(String args[]) {
boolean isSunday = false;
while(isSunday) {
System.out.println("Yayy.. Its Sunday!!");
}
}
}
输出:(控制台上没有打印任何内容)
原因:由于isSunday为假,循环体没有执行
do-while
: 表达式在循环底部求值。因此,do 块中的语句总是至少执行一次。
语法:
do {
statement(s)
} while (expression);
(取自http://www.w3resource.com/c-programming/c-do-while-loop.php)
示例:
public class DoWhileDemo{
public static void main(String args[]) {
boolean isSunday = false;
do {
System.out.println("Yayy.. Its Sunday!!");
} while(isSunday);
}
}
输出: Yayy.. 今天是星期天!!
原因: 首先执行 do
的主体,然后打印 Yayy.. Its Sunday!! 和那么条件 while(isSunday);
的计算结果为 false
因为 isSunday
是 false
并且循环终止