当我运行此方法然后打印我的数组时,没有任何内容被打印

时间:2014-11-03 19:09:18

标签: java arrays

public static void assignCellTypes(char[][] tissue, int percentBlank, int percentX){


    //Your code goes here
    Random rnd = new Random();
    int row = 0;
    int col = 0;
    int rndRow = rnd.nextInt(tissue.length);
    int rndCol = rnd.nextInt(tissue.length);

    int numOfCells = (tissue.length * tissue.length);
    double numOfBlankCells = numOfCells * (percentBlank/100.0);
    numOfBlankCells = Math.ceil(numOfBlankCells);
    double numOfXCells = (numOfCells-numOfBlankCells) * (percentX/100.0);
    numOfXCells = Math.ceil(numOfXCells);
    double numOfOCells = numOfCells - (numOfBlankCells + numOfXCells);

    if (numOfCells < numOfBlankCells + numOfXCells + numOfOCells) {
        System.out.println("Percentages can't be over 100%");
        System.exit(0);
    }

    int counterBlank = 0;
    while (counterBlank <= numOfBlankCells) {
        rndRow = rnd.nextInt(tissue.length);
        rndCol = rnd.nextInt(tissue.length);
        if (tissue[rndRow][rndCol] == '\0') {
            tissue[rndRow][rndCol] = ' ';
            counterBlank++;
        }   
    }
    int counterX = 0;
    while (counterX <= numOfXCells) {
        rndRow = rnd.nextInt(tissue.length);
        rndCol = rnd.nextInt(tissue.length);
        if (tissue[rndRow][rndCol] == '\0') {
            tissue[rndRow][rndCol] = 'X';
            counterX++;
        } 
    }
    int counterO = 0;
    while (counterO <= numOfOCells) {
        rndRow = rnd.nextInt(tissue.length);
        rndCol = rnd.nextInt(tissue.length);
        if (tissue[rndRow][rndCol] == '\0') {
            tissue[rndRow][rndCol] = 'O';
            counterO++;
        }
    }       
}

我假设问题出在其中一个循环中,但我真的不知道出了什么问题。我想要循环做的是检查数组上的随机元素是否为空。如果是,我想为该数组元素分配一个字符,然后将一个字符添加到计数器。一旦计数器达到我希望它的数字,它将继续进行下一个while循环。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您的代码会无限循环。一旦用空白单元格完成循环,tissue中的单元格就不再是\0,因为只有当你完成所有单元格时,你的循环才会完成。然后你进入下一个循环,因为没有空白单元格,它将永远不会打到一个空白的单元格,永远不会增加counterX,并且永远不会退出循环。

另外,检查百分比的条件是错误的。由于您根据numOfOCells减去其他两项计算numOfCellsnumOfBlankCells + numOfXCells + numOfOCells将始终完全numOfCells

你需要重新思考整个战略。

答案 1 :(得分:0)

因为每个while循环都要填充1个单元格。 最后一个循环无法填充所需数量的单元格,因为没有更多可用的空单元格。 将所有循环中的&lt; =条件修改为&lt;它会没事的。

public static void assignCellTypes(char[][] tissue, int percentBlank, int percentX){

    //Your code goes here
    Random rnd = new Random();
    int row = 0;
    int col = 0;
    int rndRow = rnd.nextInt(tissue.length);
    int rndCol = rnd.nextInt(tissue.length);

    int numOfCells = (tissue.length * tissue.length);
    double numOfBlankCells = numOfCells * (percentBlank/100.0);
    numOfBlankCells = Math.ceil(numOfBlankCells);
    double numOfXCells = (numOfCells-numOfBlankCells) * (percentX/100.0);
    numOfXCells = Math.ceil(numOfXCells);
    double numOfOCells = numOfCells - (numOfBlankCells + numOfXCells);

    if (numOfCells < numOfBlankCells + numOfXCells + numOfOCells) {
        System.out.println("Percentages can't be over 100%");
        System.exit(0);
    }

    int counterBlank = 0;
    while (counterBlank < numOfBlankCells) {
        rndRow = rnd.nextInt(tissue.length);
        rndCol = rnd.nextInt(tissue.length);
        if (tissue[rndRow][rndCol] == '\0') {
            tissue[rndRow][rndCol] = ' ';
            counterBlank++;
        }   
    }
    int counterX = 0;
    while (counterX < numOfXCells) {
        rndRow = rnd.nextInt(tissue.length);
        rndCol = rnd.nextInt(tissue.length);
        if (tissue[rndRow][rndCol] == '\0') {
            tissue[rndRow][rndCol] = 'X';
            counterX++;
        } 
    }
    int counterO = 0;
    while (counterO < numOfOCells) {
        rndRow = rnd.nextInt(tissue.length);
        rndCol = rnd.nextInt(tissue.length);
        if (tissue[rndRow][rndCol] == '\0') {
            tissue[rndRow][rndCol] = 'O';
            counterO++;
        }
    }       
}

但是从另一侧产生相同的结果呢 - 线性地穿过细胞并立即用随机值填充细胞? :)