我有一个向量载体,其中填充了文本文件中的字符。它本质上是一个简单的爆发模拟器,感染了'i'字符,并且容易感染's'字符。关键是要遍历矩阵,如果遇到“ i”,它将把它周围的所有“ s”都变成“ i”。由于检查矩阵边缘范围之外的位置,因此在检查周围的元素时遇到问题。有没有办法检查我的if语句中的界限?
这是代码:
for (int i = 0; i < population.size(); i++) {
for(int j = 0; j < population[i].size(); j++) {
if(population[i][j] == 'i') {
if(population[i-1][j] == 's') {
population[i-1][j] = 'i';
}
if(population[i-1][j+1] == 's') {
population[i-1][j+1] = 'i';
}
if(population[i][j+1] == 's') {
population[i][j+1] = 'i';
}
if(population[i+1][j+1] == 's') {
population[i+1][j+1] = 'i';
}
if(population[i+1][j] == 's') {
population[i+1][j] = 'i';
}
if(population[i+1][j-1] == 's') {
population[i+1][j-1] = 'i';
}
if(population[i][j-1] == 's') {
population[i][j-1] = 'i';
}
}
}
}
答案 0 :(得分:1)
您可以执行以下操作,而不是直接引用特定的数组条目:
void checkForInfectionAndInfectIfNeeded(int i, int j) {
for (int row = -1; row <= 1; row++) {
for (int column = -1; column <=1; column++) {
infect(i + row, j + column);
}
}
}
void infect(int i, int j) {
if (i < 0 || i >= population.size() || j < 0 || j >= population[j].size()) {
return;
} else {
population[i][j] = 'i';
}
}
通过这种方式,infect
方法是唯一一种检查边界的方法,您可以用两个循环替换一长串手动检查周围位置的方法。