有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在for循环中,增量整数不会增加2

这是我的密码

for (int i = 0; i<shots.size(); i=i+2){ //I would expect "i" to increase by 2 for every loop.
            i = i%4; //On this line, there is ALWAYS that i==2
            switch (i){
            case 0: boards[1].getTile(shots.get(i),shots.get(i+1)).shoot();
                break;
            case 2: boards[0].getTile(shots.get(i),shots.get(i+1)).shoot();
                break;
            }
            if (gameOver()){
                break;
            }
        }

但是,当我运行调试器时,每次我点击循环初始值设定项时,我都会看到“I”被重置为0,然后循环中第一行的“I”被设置为“2”。我希望它的行为像一个常规的for循环,只是我希望每次迭代“I”增加2而不是1。我有办法做到吗

谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    我怀疑这是你的问题

     i = i%4;
    

    让我们看看i的作用:

    i = 0 is 0
    i = i % 4 is the remainder of 0 / 4 which is 0
    i = i + 2 is 2
    i = i % 4 is the remainder of 2 / 4 which is 2
    i = i + 2 is 4
    i = i % 4 is the remainder of 4 / 4 which is 0
    

    因此,除非shots.size()小于2,否则你将永远循环,除非gameOver()变为真,你将打破循环。你可以按照@Eran的建议去做 并创建一个新的int j作为i的mod,或者(因为您没有在其他任何地方使用j),只需执行以下操作:

    switch (i%4)
    
  2. # 2 楼答案

    我认为你需要两个变量:

        for (int i = 0; i<shots.size(); i=i+2){
            int j = i%4; // j will always be either 0 or 2, so the switch statement
                         // will toggle between the two cases
            switch (j){
            case 0: boards[1].getTile(shots.get(i),shots.get(i+1)).shoot();
                break;
            case 2: boards[0].getTile(shots.get(i),shots.get(i+1)).shoot();
                break;
            }
            if (gameOver()){
                break;
            }
        }
    

    要使其工作,shots.size()必须是偶数。如果是奇数shots.get(i+1)最终将抛出异常