如何检查向量中向量的位置是否超出范围?

时间:2018-11-10 03:42:33

标签: java matrix vector indexoutofboundsexception

我有一个向量载体,其中填充了文本文件中的字符。它本质上是一个简单的爆发模拟器,感染了'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';
                }
            }
        }
    }

1 个答案:

答案 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方法是唯一一种检查边界的方法,您可以用两个循环替换一长串手动检查周围位置的方法。