Java实现用户输入行列的随机二维数组时报ArrayIndexOutOfBoundsException求解
异常触发原因
- 变量复用问题:存储用户输入行数、列数的
rows、columns变量被直接用作循环计数器,原始输入值被覆盖,引发逻辑混乱。 - 内层循环终止条件错误:内层循环用于遍历单行列元素,终止条件应该为列计数器小于当前行的长度
myArray[rows].length,你错误使用了二维数组的行数myArray.length作为判断依据,会导致列索引超出实际列的范围。 - 循环体缺少大括号:内层
for循环没有包裹大括号,只有紧跟的数组赋值语句属于内层循环,打印语句被放到了内层循环外。内层循环结束时列计数器已经自增到超出数组索引的合法范围,此时执行打印语句访问数组直接触发越界异常。
修复方案
- 单独定义循环计数器变量,不要复用存储用户输入的
rows、columns变量。 - 修正内层循环的终止条件为判断列计数器小于当前行的长度。
- 给内层循环加上大括号,把赋值和打印逻辑都包裹到循环体中,也可以每打印完一行后加换行,输出更清晰。
修复后的代码如下:
import java.lang.Math; import java.util.Scanner; public class test2 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("Enter rows for the array: "); int rows = scan.nextInt(); System.out.print("Enter columns for the array: "); int columns = scan.nextInt(); int [][] myArray = new int [rows][columns]; // 单独定义循环计数器i代表行索引,j代表列索引 for (int i = 0; i < myArray.length; i++) { // 内层循环终止条件改为当前行的长度 for (int j = 0; j < myArray[i].length; j++) { myArray[i][j] = (int) (Math.random()*100); System.out.print(myArray[i][j] + "\t"); } // 每打印完一行加换行 System.out.println(); } scan.close(); } }
内容的提问来源于stack exchange,提问作者Ransome
相关产品推荐
相关产品推荐

