Java中仅初始化数组部分元素:跳过首尾元素时出错求助
问题分析与修正
兄弟,我瞅了下你的代码,问题主要出在判断是否要跳过元素的逻辑上,咱们一步步捋清楚:
核心错误点
- 你刚创建的二维数组
arr,所有元素默认都是0,这时候用arr[i][j] == arr[0][0]来判断是不是第一个元素完全没用——因为所有元素都是0,等于把所有元素都跳过了,根本没法正常赋值。 - 判断是否是首/尾元素,得基于索引值来判断,而不是元素当前的值(毕竟这时候还没给元素赋值呢)。
两种需求的修正代码
需求1:跳过整个数组的第一个元素(arr[0][0])和最后一个元素(arr[m-1][n-1])
public static void main(String args[]) throws Exception { Scanner sc = new Scanner(System.in); System.out.println("Input Rows: "); int m = sc.nextInt(); System.out.println("Input Columns: "); int n = sc.nextInt(); System.out.println("Enter values: "); int[][] arr = new int[m][n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { // 跳过数组第一个和最后一个元素 if ((i == 0 && j == 0) || (i == m-1 && j == n-1)) { continue; // 跳过,不赋值 } arr[i][j] = sc.nextInt(); } } }
需求2:跳过每行的第一个和最后一个元素
如果你的意图是每行都跳过首列和末列的元素,代码可以改成这样:
public static void main(String args[]) throws Exception { Scanner sc = new Scanner(System.in); System.out.println("Input Rows: "); int m = sc.nextInt(); System.out.println("Input Columns: "); int n = sc.nextInt(); System.out.println("Enter values: "); int[][] arr = new int[m][n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { // 跳过当前行的第一个和最后一个元素 if (j == 0 || j == n-1) { continue; // 跳过,不赋值 } arr[i][j] = sc.nextInt(); } } }
额外提醒
如果跳过的元素需要保留默认值0,用continue就可以;如果需要给这些跳过的元素赋其他值,直接在if块里赋值就行,不用continue。
内容的提问来源于stack exchange,提问作者Dinesh Solanki
相关产品推荐
相关产品推荐

