Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java动态while表达式_Java_Loops_While Loop - Fatal编程技术网

Java动态while表达式

Java动态while表达式,java,loops,while-loop,Java,Loops,While Loop,我搞不清楚这件事。我有一个while语句,其中的表达式应该在每个循环中求值。我觉得我想得不对 我要做的是循环遍历表达式experience>=experienceCap,直到它为false。每个循环上的experienceCap设置正确,但是while表达式值永远不会更改,即使每个循环上的值确实更改 public void refreshExperience() { int experience = getExperience(); //10 int experienceCap

我搞不清楚这件事。我有一个while语句,其中的表达式应该在每个循环中求值。我觉得我想得不对

我要做的是循环遍历表达式
experience>=experienceCap
,直到它为false。每个循环上的
experienceCap
设置正确,但是
while
表达式值永远不会更改,即使每个循环上的值确实更改

public void refreshExperience() {
    int experience = getExperience(); //10
    int experienceCap = getExperienceCap(); //100

    while (experience >= experienceCap) {
            newExperienceCap();
            refreshExperience();
    }

}
这将导致一些日志输出,如:

experience: 10
experienceCap: 100
experience: 10
experienceCap: 450
experience: 10
experienceCap: 1120
experience: 10
experienceCap: 2337
不可避免的崩溃。
如果您有任何意见,我将不胜感激,谢谢

循环值没有更新,因此在输出中显示experienceCap增加是令人困惑的。在没有看到所有代码的情况下,我只能猜测您正在记录的值不是在RefreshExperice中声明的值


循环值没有被更新,因此在输出中显示experienceCap增加是令人困惑的。在没有看到所有代码的情况下,我只能猜测您正在记录的值不是在RefreshExperice中声明的值


这是典型的
vs
参考
问题。
您似乎期望
int experience
是一个参考,但它不是。

这是一个典型的
值与
参考
问题。
您似乎期望
int experience
是一个引用,但它不是。

您需要更新循环中的int值,可能只是在调用newExperienceCap()时返回experienceCap(),您可以发布
newExperienceCap()的代码吗
您需要更新循环中的int值,调用newExperienceCap()时可能只返回experienceCap。请发布
newExperienceCap()
Yes的代码,以便将
experienceCap
始终设置为
100
,对吗?为了回答您的问题,在我发布的代码
newExperienceCap()
中设置了一个新的cap,这就是为什么您会看到带有新值的调试输出。因此,它会在每个循环中设置一个新值,但循环while语句表达式不会更新为该新值,而是停留在第一个值:
10
Thanksys,这样就可以始终将
experienceCap
设置为
100
,对吗?为了回答您的问题,在我发布的代码
newExperienceCap()
中设置了一个新的cap,这就是为什么您会看到带有新值的调试输出。因此,它会在每个循环中设置一个新值,但循环while语句表达式不会更新为该新值,而是停留在第一个值:
10
谢谢
public class Test {

    int experience = 10;
    int experienceCap = 100;

    public void refreshExperience() {
        while (experience <= experienceCap) {
            experience = getExperience();
            experienceCap = getExperienceCap();
        }
    }
private int getExperience() {
    return experience + 5;
}

private int getExperienceCap() {
    return experienceCap - 10;
}