Java 我不知道';我不能真正理解do{}while结构

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中

我正在努力学习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中引入它,到目前为止我已经这样做了,但是如果我输入
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
为真,那么
n
do{}while()
在Java中不常用。如果使用
while(){}
,您可能会更幸运,也许可以使用
中断来退出循环。你在课文中的解释是正确的,只有一个小问题。首先,从最后一个条件中删除“(n==3)| |”。其次,请记住,do while至少执行一次……这是与while的主要区别。如果要停止执行,请在其中一个“do whiles”中放置一个“If”条件以及一个return命令。如果您想继续执行,只需将“break”改为“return”。。。每一次“中断”都只中断所放置的循环,程序继续运行,*“解决此类棘手问题的方法是拿出一张纸…”-或使用调试器。:)如果你在学习,我发现这张纸更好。我们在大学里就这样做了,教授称之为“手动执行”。这是一个很好的学习工具。输入任意三个整数后终止。但是聪明地使用数组而不是讨厌的命名变量:)是的,好吧,我说它没有经过测试。嗯,我想我用了一个
&
,我本应该用
|
的。以后,请记住给你的来源加上属性。