Java使用数组实现九九乘法表时输出全为81的问题咨询
九九乘法表数组实现输出异常问题
问题背景
以下非数组版本的九九乘法表代码可正常输出2~9对应的所有正确计算结果:
public class Gugudan_array { public static void main(String[] args) { for(int i = 2; i<10; i++) { for(int j = 1; j<10; j++) { System.out.println(i * j); } System.out.println(); } } }
改用数组实现时编写的代码如下,运行后所有输出结果均为81,需要定位编写错误:
public class Gugudan_array { public static void main(String[] args) { int[] result = new int[10]; for(int h = 0; h < result.length; h++) { for(int i = 2; i < 10; i++) { for(int j = 1; j<10; j++) { result[h] = (i * j); } } } for(int a = 0; a < result.length; a++) { System.out.println(result[a]); } } }
错误原因
- 数组长度定义不符合存储需求:29共8个被乘数,每个需要和19共9个乘数计算乘积,总计72个结果,当前定义的数组长度仅为10,无法容纳全部计算值。
- 循环嵌套逻辑完全错位:你将数组下标遍历放在了最外层,意味着对数组的每一个存储位置,都会完整执行一遍i从2到9、j从1到9的全量乘法计算,每次新算出的乘积都会覆盖该位置之前存的旧值。对任意一个数组位置,最后一次执行赋值时i=9、j=9,计算结果为
9*9=81,因此所有位置最终留存的值都是81。 - 未设置和计算同步的数组下标:你没有单独维护随乘积计算移动的数组存储游标,所有计算结果都反复写入当前固定的
result[h]位置,无法按顺序留存不同的乘积。
修正参考代码
public class Gugudan_array { public static void main(String[] args) { // 按总结果数定义数组长度 int[] result = new int[8 * 9]; int index = 0; // 单独维护数组存储下标,每存一个值后移一位 for(int i = 2; i < 10; i++) { for(int j = 1; j < 10; j++) { result[index] = i * j; index++; } } // 遍历输出结果 for(int a = 0; a < result.length; a++) { System.out.println(result[a]); } } }
内容的提问来源于stack exchange,提问作者user19438904
相关产品推荐
相关产品推荐

