java方法中while语句的逻辑问题

时间:2013-04-19 01:23:11

标签: java crash while-loop

背景资料:

我正在开发一个战舰游戏,在游戏中我有一个10x10 int [] [](网格)。

我开发了一种方法,只要尚未尝试相同的点,就可以尝试击中该阵列或网格上的单元格。 (这是针对我的电脑)。

    public boolean randomShot()
{
    int row;
    int col;
    boolean wasHit = false;
    boolean complete = false;

   while (complete == false)
   {
    // Randomly generate a row and column
       row = randomizer.nextInt(ROW_COUNT);
       col = randomizer.nextInt(COLUMN_COUNT);

    if(compShots.contains("" + row + col) == false)
    {
        complete = true;
        if(checkHit(row, col) == true)
        {
            wasHit = true;

        }
        compShots.add("" + row + col);
    }

   }
    return wasHit;
}

上述方法运行正常,我很满意。

问题:

我想开发一种基于上述方法的方法,但计算机在某种意义上表现得更聪明一点,如果他遇到第3行和第3列,那么它接下来会尝试点击第3行和第4列然而,如果下一列或一行超出了董事会的边界,那么它会尝试以另一种方式进行。

while循环正在崩溃游戏,任何想法为什么?

这是我必须用更多大脑来点击数组的方法

    public boolean randomShotClever()
{
    int row;
    int col;
    boolean wasHit = false;
    boolean complete = false;



   while (complete == false)
   {

    // Randomly generate a row and column
       row = randomizer.nextInt(ROW_COUNT);
       col = randomizer.nextInt(COLUMN_COUNT);

       if(previousRows.size() == 0 || compShots.contains("" + (previousRows.size() -1) + (previousCols.size() -1) ))       
       {
           finalRow = previousRows.get(previousRows.size());
           if((finalRow + 1) < (ROW_COUNT -1))
           {
               finalRow = finalRow + 1;
           }
           else 
           {
               finalRow = row;
           }

           finalCol = previousCols.get(previousCols.size());
           if((finalCol + 1) < (COLUMN_COUNT -1 ))
           {
               finalCol = finalCol + 1;
           }
           else 
           {
               finalCol = col;
           }

           if(compShots.contains("" + finalRow + finalCol) == false)
           {
            complete = true;
            if(checkHit(finalRow, finalCol) == true)
            {
                previousCols.add(finalCol);
                previousRows.add(finalRow);
                wasHit = true;
            }
            compShots.add("" + finalRow + finalCol);
           }

       }


   }
    return wasHit;
}

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

比较是倒退

if((finalRow + 1) > (ROW_COUNT -1))
       {
           finalRow = finalRow + 1;

再次在

       if((finalCol + 1) > (COLUMN_COUNT -1))

“如果我太大了,那就让我变大吧。”

可能还有其他人喜欢它。