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循环。有人可以帮帮我吗?
答案 0 :(得分:0)
您的代码会无限循环。一旦用空白单元格完成循环,tissue
中的单元格就不再是\0
,因为只有当你完成所有单元格时,你的循环才会完成。然后你进入下一个循环,因为没有空白单元格,它将永远不会打到一个空白的单元格,永远不会增加counterX,并且永远不会退出循环。
另外,检查百分比的条件是错误的。由于您根据numOfOCells
减去其他两项计算numOfCells
,numOfBlankCells + 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++;
}
}
}
但是从另一侧产生相同的结果呢 - 线性地穿过细胞并立即用随机值填充细胞? :)