Java 我不知道';我不能真正理解do{}while结构
我正在努力学习Java,我在高中时学过Pascal,它有Java 我不知道';我不能真正理解do{}while结构,java,do-while,repeat,Java,Do While,Repeat,我正在努力学习Java,我在高中时学过Pascal,它有重复,直到指令 我想解决一个练习,在这个练习中,我应该一直输入数字,直到倒数第二位+倒数第二位数字等于我输入的最后一个数字。(a[I-2]+a[I-1]=a[I])我在不使用数组的情况下进行操作,但这并不重要 在Pascal中,这将很容易,因为重复直到更容易使用 对我来说是的 repeat ... until ((a[i-2]+a[i-1] = a[i]) and (n=3)); n是我输入的值的数目 我不知道如何在Java中
重复,直到代码>指令
我想解决一个练习,在这个练习中,我应该一直输入数字,直到倒数第二位+倒数第二位数字等于我输入的最后一个数字。(a[I-2]+a[I-1]=a[I])代码>我在不使用数组的情况下进行操作,但这并不重要
在Pascal中,这将很容易,因为重复直到更容易使用
对我来说是的
repeat
...
until ((a[i-2]+a[i-1] = a[i]) and (n=3));
n
是我输入的值的数目
我不知道如何在Java中引入它,到目前为止我已经这样做了,但是如果我输入24
,它就不起作用了。它应该停下来,但它一直在问数字
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));
intpen=0,ant=0,s=0,n=1;
int-ult=input.nextInt();
s=s+ult;
做{
做{
蚂蚁=笔;
pen=ult;
ult=input.nextInt();
n++;
s=s+ult;
}而(蚂蚁+笔!=ult);
系统输出println(n);
}而((n==3)|(n<4));
ult
是我最后输入的数字,s
是输入的数字之和
谁能告诉我如何设置条件,以便在我输入值时停止运行?A Do While循环首先在循环中运行代码。它最后计算逻辑,如果为真,则在循环中重复代码,依此类推,直到逻辑为假
解决此类棘手问题的方法是拿出一张纸,记录每个变量的作用。像调试器一样逐行检查每一行,并在程序运行时记录每个变量中存储的内容
这是最好的方法。您将发现,您将更深入地了解您的程序是如何工作的 你的问题中只遗漏了一件事。您对Pascal代码的解释几乎是正确的,但如果不做一些修改,就无法工作
在Java中,使用短路逻辑运算符进行检查
未测试:
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]);
int n=0;
int a[]=新的a[3];
做{
n++;
a[0]=a[1];
a[1]=a[2];
a[2]=input.nextInt();
}而((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;
intpen=0,ant=0,ult=0,n=0;
做{
蚂蚁=笔;
pen=ult;
ult=input.nextInt();
}而(++n<3 | | ant+pen!=ult);
断言n>=3;
断言ant+pen==ult;
请注意,自从Pascal以来,所有内容都被零索引而不是一索引。Pascal使用以下形式:
repeat
doStuff();
until (boleanValue);
Java基本上是一样的,只是有一点很重要:
do
doStuff();
while (~boleanValue);
重要的区别在于,布尔值之前的“~”
。帕斯卡重复。。。直到
继续运行,直到布尔值计算为true。在Java中,do。。。而
将一直运行,直到布尔值计算为false。当从Pascal转换到Java时,您需要切换布尔值以另一种方式工作。while
循环和do
-while
循环之间的主要区别是while循环执行渴望条件检查其中asdo while循环执行惰性条件检查
而:
表达式在循环顶部求值
语法:
(摘自)
示例:
public class WhileDemo{
public static void main(String args[]) {
boolean isSunday = false;
while(isSunday) {
System.out.println("Yayy.. Its Sunday!!");
}
}
}
public class DoWhileDemo{
public static void main(String args[]) {
boolean isSunday = false;
do {
System.out.println("Yayy.. Its Sunday!!");
} while(isSunday);
}
}
输出:(控制台上未打印任何内容)
原因:由于isSunday为false,因此不会执行循环体
do while
:表达式在循环底部求值。因此,do块中的语句始终至少执行一次
语法:
(摘自)
示例:
public class WhileDemo{
public static void main(String args[]) {
boolean isSunday = false;
while(isSunday) {
System.out.println("Yayy.. Its Sunday!!");
}
}
}
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
并且循环终止您应该进行一些调试。为什么要在外部do while
循环中测试n是否等于3或n小于4?如果n==3
为真,那么ndo{}while()
在Java中不常用。如果使用while(){}
,您可能会更幸运,也许可以使用中断来退出循环。你在课文中的解释是正确的,只有一个小问题。首先,从最后一个条件中删除“(n==3)| |”。其次,请记住,do while至少执行一次……这是与while的主要区别。如果要停止执行,请在其中一个“do whiles”中放置一个“If”条件以及一个return命令。如果您想继续执行,只需将“break”改为“return”。。。每一次“中断”都只中断所放置的循环,程序继续运行,*“解决此类棘手问题的方法是拿出一张纸…”-或使用调试器。:)如果你在学习,我发现这张纸更好。我们在大学里就这样做了,教授称之为“手动执行”。这是一个很好的学习工具。输入任意三个整数后终止。但是聪明地使用数组而不是讨厌的命名变量:)是的,好吧,我说它没有经过测试。嗯,我想我用了一个&
,我本应该用|
的。以后,请记住给你的来源加上属性。