Java数组扩容与异常输出:为什么打印结果是10、11、12、13而不是1、2、3、4?
本文分析一个Java数组扩容示例中出现的异常输出问题。程序意图是动态向数组添加元素,但输出结果与预期不符。
问题描述: 程序旨在将元素4添加到初始数组int[] arr = {1, 2, 3}的末尾,使其变为 {1, 2, 3, 4}。程序通过创建新数组,复制原数组元素,添加新元素,再将新数组赋值给原数组变量的方式实现扩容。然而,程序输出的结果却是10、11、12、13,而非预期的1、2、3、4。
代码分析: 程序的扩容逻辑本身是正确的。问题出在输出语句System.out.println(arr1[i] + ‘t’);中使用了制表符’t’。Java会将字符’t’隐式转换为其ASCII码值(9),导致程序实际执行的是arr1[i] + 9,从而输出10、11、12、13。
立即学习“Java免费学习笔记(深入)”;
错误代码片段:
public class AddToArray { public static void main(String[] args) { int arr1[] = {1, 2, 3}; int arr2[] = new int[arr1.length + 1]; for (int i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; } arr2[arr1.length] = 4; arr1 = arr2; // 关键:将新数组赋值给原数组变量 for (int i = 0; i < arr1.length; i++) { System.out.println(arr1[i] + 't'); // 错误:这里加了制表符 } } }
解决方案: 为了得到正确的结果,只需修改输出语句,去除制表符:
System.out.println(arr1[i]); // 正确:去除制表符
修正后的代码:
public class AddToArray { public static void main(String[] args) { int arr1[] = {1, 2, 3}; int arr2[] = new int[arr1.length + 1]; for (int i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; } arr2[arr1.length] = 4; arr1 = arr2; for (int i = 0; i < arr1.length; i++) { System.out.println(arr1[i]); // 修正后的输出语句 } } }
修正后的代码将正确打印出1、2、3、4。 这个例子强调了在Java中进行字符串连接和数值运算时,需要仔细注意数据类型转换和隐式类型转换带来的潜在问题。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐