Java中无法在for循环外打印整数数组的问题求助
嘿,我来帮你搞定这个问题!你之所以在循环外没法打印那个整数数组,核心原因是变量作用域的问题——你把longCnt01_intArray01放在for循环的内部声明了,这就导致这个变量只在循环的每一轮迭代里有效,循环一结束,这个变量就“消失”了,外面自然访问不到。
另外你的代码还有两个小坑:一是用long存阶乘很容易溢出(long最多存19位数字,阶乘到21就超上限了);二是有些变量没提前初始化,编译器会报错。我给你整理了修正后的代码,顺便优化了逻辑:
修正后的代码与说明
import java.math.BigDecimal; import java.util.Arrays; public class count_test01 { public static void main(String[] args) { int n = 11; // 可以改成你想要的阶乘数字 countTest(n); } public static void countTest(int num) { // 重点!把数组变量移到循环外面,扩大作用域 int[] longCnt01_intArray01 = new int[0]; // 用BigDecimal存阶乘,彻底避免溢出问题 BigDecimal factorial = BigDecimal.ONE; for(int i = 1; i <= num; i++) { // 计算阶乘 factorial = factorial.multiply(BigDecimal.valueOf(i)); // 把阶乘转成字符串,再转整数数组 String factorialStr = factorial.toPlainString(); int[] longCnt01_intArray = new int[factorialStr.length()]; for (int i1 = 0; i1 < factorialStr.length(); i1++){ longCnt01_intArray[i1] = factorialStr.charAt(i1) - '0'; } // 把当前数组赋值给外层的数组变量,这样循环结束后还能拿到 longCnt01_intArray01 = Arrays.copyOf(longCnt01_intArray, longCnt01_intArray.length); // 循环内的调试输出 System.out.println("当前i: " + i); System.out.println("阶乘结果: " + factorial); System.out.println("整数数组: " + Arrays.toString(longCnt01_intArray) + "\n"); } // 现在循环外可以正常打印数组了! System.out.println("===== 循环结束后的最终结果 ====="); System.out.println("最终阶乘的整数数组: " + Arrays.toString(longCnt01_intArray01)); System.out.println("最终阶乘值: " + factorial); } }
核心修改点
- 调整变量作用域:把
longCnt01_intArray01的声明移到for循环外面,这样循环结束后这个变量依然存在,能被外部访问。 - 替换阶乘存储类型:用
BigDecimal代替long,不管多大的阶乘都不会溢出,比long靠谱多了。 - 简化数组复制:用
Arrays.copyOf代替手动循环复制数组,代码更简洁不易出错。 - 优化参数灵活性:把循环上限改成方法参数
num,想算哪个数的阶乘直接传参就行,不用硬改代码。
运行这段代码,你就能在循环外顺利打印出阶乘对应的整数数组啦!
内容的提问来源于stack exchange,提问作者Lenny Squiggy
相关产品推荐
相关产品推荐

