Java 嵌套的while循环在第一次迭代后停止?

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])) *

我试图使用“charms”表比较值,但我的外部3个循环只会注册第一次迭代;只有最里面的循环比较所有值

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年了,有时仍然会做这样的事情。事实上,我上周刚抓到一个例子我忘记了在
循环中增加一些内容。