求大神解答:提交代码提示数组越界
题目:
一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。 岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。 输入描述: 第一行输入两个数字n,m(1<=n<=200,1<=m<=200) 后面n行01序列,每一行m个字符,表示陆地和海洋 输出描述: 输出一个数字表示岛屿的个数 示例 1: 输入 5 5 11000 01011 00011 00000 00111 输出 3我的代码:
import java.util.Scanner;
public class Main {
private static int count = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
int n = Integer.parseInt(line.split(" ")[0]);
int m = Integer.parseInt(line.split(" ")[1]);
if(n<1||n>200||m<1||m>200){
return;
}
int[][] numbers = new int[n][m];
boolean[][] isVisited = new boolean[n][m];
int row = 0;
while (sc.hasNext() & row < n) {
line = sc.nextLine();
String[] num = line.split("");
for (int i = 0; i < m; i++) {
numbers[row][i] = Integer.parseInt(num[i]);
}
row++;
if (row == n) {
break;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (numbers[i][j] == 1 && !isVisited[i][j]) {
count += 1;
dfs(numbers, isVisited, i, j);
}
}
}
System.out.println(count);
}
private static void dfs(int[][] numbers, boolean[][] isVisited, int row, int col) {
if (row >= 0 && row < numbers.length && col >= 0 && col < numbers[0].length) {
if (numbers[row][col] == 1 & !isVisited[row][col]) {
isVisited[row][col] = true;
dfs(numbers, isVisited, row - 1, col);
dfs(numbers, isVisited, row + 1, col);
dfs(numbers, isVisited, row, col - 1);
dfs(numbers, isVisited, row, col + 1);
}
}
}
}
提交后提示您的代码已保存
请检查是否存在数组越界等非法访问情况
case通过率为93.75%