设置区间边界后for循环失效,多维数组生成异常求助
问题分析与修正
你的代码输出全0的核心原因是没有给创建的二维数组赋值,Java中用new int[][]初始化的数组,所有元素默认是0,直接打印自然都是0。另外你的内层循环逻辑混淆了「数组索引」和「要填充的数值」,导致循环执行逻辑完全错误。
具体错误点
- 数组未赋值:只创建了数组结构,但没有把0-90的数值填充到数组对应的位置。
- 内层循环逻辑错误:你把要填充的起始数值(比如15)当成了数组的列索引,而数组的列索引应该从0开始;同时
span的计算和循环条件完全不符合需求,导致内层循环根本没正确遍历数组的列。
修正后的代码
public class H { public static void main(String[] args) { int min = 0; int max = 90; int n = 6; // 计算每个子数组的元素个数,这里90-0刚好能被6整除,结果为15 int elementsInBin = (max - min) / n; int[][] bin = new int[n][elementsInBin]; for(int i = 0; i < n; i++){ // 当前行要填充的起始数值 int currentStart = elementsInBin * i; // 遍历当前行的每一列,给数组赋值 for(int j = 0; j < elementsInBin; j++){ // 给数组的第i行第j列赋值:起始数值+列索引 bin[i][j] = currentStart + j; // 打印元素,加空格分隔 System.out.print(bin[i][j] + " "); } // 每行打印完换行,方便查看 System.out.println(); } } }
修正说明
- 数组赋值:通过
currentStart + j计算出当前位置要填充的数值,currentStart是当前行的第一个数,j从0到14,刚好覆盖15个连续数值(比如第0行是0+0到0+14=14,第1行是15+0到15+14=29,以此类推)。 - 循环逻辑修正:内层循环的j是数组的列索引,从0开始遍历到
elementsInBin-1,对应每个子数组的所有位置,不再混淆数值和索引。 - 输出优化:添加空格和换行,让输出的数组内容更易读。
内容的提问来源于stack exchange,提问作者ntimo
相关产品推荐
相关产品推荐

