我正在努力学习Java,我在高中学习Pascal并且有repeat until..;
指令。
我想解决一个我应该继续输入数字的练习,直到倒数第二个+倒数第二个数字等于我输入的最后一个数字。(a[i-2]+a[i-1] = a[i]);
我没有数组这样做但是没有真的很重要。
在Pascal中它很容易,因为重复直到更容易使用 对于前者,它将是
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
时它会停止吗?
答案 0 :(得分:4)
Do-While循环首先在循环中运行代码。它最后评估逻辑,然后如果它是真的,它会重复循环中的代码,依此类推,直到逻辑为假。
解决这类棘手问题的方法是拿出一张纸并记录每个变量的作用。像调试器一样逐步执行每一行,并在程序进行过程中记录每个变量中存储的内容。
这是最好的方法。你会发现你将更深入地了解你的程序是如何工作的。
答案 1 :(得分:1)
Java并不比Pascal更神奇,问题可能是你已经从编程中获得了很长的一段时间:)。无论如何,自从我用Java编写任何内容以来已经有一段时间了,但是我在代码中发现的问题只是在你输入三个整数后n等于三,所以外循环继续。
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以来,所有内容都被归零,而不是一个索引。
答案 2 :(得分:1)
Pascal使用以下形式:
repeat
doStuff();
until (boleanValue);
Java基本相同,除了一个重点:
do
doStuff();
while (~boleanValue);
重要的区别在于booleanValue
之前的“〜”。 Pascal repeat ... until
一直运行,直到布尔值为true。在Java中,do ... while
一直运行,直到布尔值为false。从Pascal转换为Java时,您需要将布尔值切换为另一种方式。
答案 3 :(得分:1)
while
循环和do
- while
循环之间的主要区别在于 while循环执行急切检查,其中 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为false,因此循环体未执行
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 ..星期日!! 然后条件while(isSunday);
评估结果为false
,因为isSunday
为false
且循环终止
答案 4 :(得分:0)
你只是遗漏了一件事。您对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]);