一尘不染

for循环跳到最后吗?

java

我对Java相当陌生,但是我的for循环立即跳到以下代码中的最高可能值:

System.out.println(i);
    for(i = 0; i <= (difficulty - 2); i++);{
        System.out.println(i);
        nextMineX = (int) (10*Math.random());
        nextMineY = (int) (10*Math.random());

        for(y = 0; y <= 14; y++){
            System.out.println(y);
            if(nextMineX == minesX[y] && nextMineY == minesY[y]){
                i = i-1;
            } else{
                minesX[i] = nextMineX;
                minesY[i] = nextMineY;
            }
        }
    }

第一个for循环正在搞砸,而嵌套的则运行良好。变量i初始化为0,难度为16。此摘录的输出如下:

0
14
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14

如果有人可以帮助我,将不胜感激。由于我是新手,因此我可能忽略了一些小而基本的东西。


阅读 264

收藏
2020-12-03

共1个答案

一尘不染

问题是第二行末尾的分号。for没有主体的循环是有效的。在方括号内具有独立的代码块也是有效的(这定义了变量的作用域-
如果在方括号内定义了变量,则外部将无法使用该变量)。因此,Java正像这样解释代码的开头:

for(i = 0; i <= (difficulty - 2); i++); // for loop is done, so i = difficulty - 2

{
    System.out.println(i);
    ...
2020-12-03