Java 嵌套的while循环在第一次迭代后停止?
我试图使用“charms”表比较值,但我的外部3个循环只会注册第一次迭代;只有最里面的循环比较所有值Java 嵌套的while循环在第一次迭代后停止?,java,loops,while-loop,nested,Java,Loops,While Loop,Nested,我试图使用“charms”表比较值,但我的外部3个循环只会注册第一次迭代;只有最里面的循环比较所有值 while (m < 17) { while (n < 17) { while (o < 17) { while (p < 17) { number = (Math.pow(w, charms[m])) *
while (m < 17) {
while (n < 17) {
while (o < 17) {
while (p < 17) {
number = (Math.pow(w, charms[m]))
* (Math.pow(x, charms[n]))
* (Math.pow(y, charms[o]))
* (Math.pow(z, charms[p]));
if (Math.abs(cons - number) < Math.abs(cons - closest)) {
closest = number;
a = charms[m];
b = charms[n];
c = charms[o];
d = charms[p];
}
p++;
}
o++;
}
n++;
}
m++;
}
while(m<17){
而(n<17){
而(o<17){
而(p<17){
number=(Math.pow(w,charms[m]))
*(Math.pow(x,charms[n]))
*(Math.pow(y,charms[o]))
*(Math.pow(z,charms[p]);
if(Math.abs(cons-number)
首先,您不显示如何初始化m、n、o和p
。其次,您在任何时候都不会重置计数器。一旦您通过了最内部的循环一次,您将永远不会再通过它,因为p
将大于或等于17。然后,一旦o
达到17,您就再也不会进入该循环,以此类推。首先,您不显示如何初始化m、n、o和p
。其次,您在任何时候都不会重置计数器。一旦您通过了最内部的循环一次,您将永远不会再通过它,因为p
将大于或等于17。然后,一旦o
达到17,你就再也不会进入这个循环,以此类推。了解m
、n
、o
和p
的初始值是什么,以及魅力的值是什么,这会很有帮助。但这不起作用的原因很简单:比如说m
、n
、o
和p
在循环之前都设置为1。然后,当p
为17时,内部循环执行并退出。然后你增加o
并开始循环-p
是什么?还是17岁!它永远不会回到1或者别的什么。因此,最内层循环中的代码都不会再次执行
至少,在循环之前,您需要重置每个变量:
while (m < 17) {
n = 1; // or whatever, you haven't told us what it's supposed to start at
while (n < 17) {
o = 1;
while (o < 17) {
p = 1;
while (p < 17) {
while(m<17){
n=1;//或者别的什么,你还没有告诉我们应该从什么开始
而(n<17){
o=1;
而(o<17){
p=1;
而(p<17){
或者更好的方法是,将用于将初始化、测试和增量逻辑放在一个位置的循环。知道m
、n
、o
和p
的初始值是什么,以及charms
的值是什么,这会很有帮助。但这不起作用的原因很简单:比如ode>m
、n
、o
、和p
在循环之前都被设置为1。然后当p
为17时,内部循环执行并退出。然后你递增o
,然后重新开始循环-p
是什么?它仍然是17!它从未被设置为1或其他任何值。因此,inn中没有任何代码ermost循环再次执行
至少,在循环之前,您需要重置每个变量:
while (m < 17) {
n = 1; // or whatever, you haven't told us what it's supposed to start at
while (n < 17) {
o = 1;
while (o < 17) {
p = 1;
while (p < 17) {
while(m<17){
n=1;//或者别的什么,你还没有告诉我们应该从什么开始
而(n<17){
o=1;
而(o<17){
p=1;
而(p<17){
或者更好的方法是,将用于将初始化、测试和增量逻辑放在一个位置的循环。您采取了哪些诊断步骤?m
、n
、o
和p
的初始值是什么?是否存在异常?基本上这里的信息太少,无法帮助您。您不应该这样做吗将其更改为封装所有这些值的while循环?我的意思是while(m<17&&n<17&&o<17&&p<17)当p==17
时,它不会被重置为它拥有的任何初始值。在第一次运行后,外部循环是无用的。使用for
循环重写它,您将更容易看到逻辑。您采取了哪些诊断步骤?m
,n
,的初始值是什么o
和p
?是否有例外?基本上这里的信息太少,无法帮助您。您是否应该将其更改为一个while循环,封装所有这些值?我的意思是while(m<17&&n<17&&o<17&&p<17)当p==17
时,它永远不会重置为它的初始值。第一次运行后,外部循环是无用的。使用for
循环重写它,您将更容易看到逻辑。谢谢,我不敢相信我忘了做这么简单的事情。@user2785277我已经编程36年了耳朵和我有时仍然会做这样的事情。事实上,我上周刚抓到一个例子,我忘记了在while
循环中增加一些内容。谢谢你,我真不敢相信我忘记了做这么简单的事情。@user2785277我已经编程36年了,有时仍然会做这样的事情。事实上,我上周刚抓到一个例子我忘记了在循环中增加一些内容。