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中进行字符串连接和数值运算时,需要仔细注意数据类型转换和隐式类型转换带来的潜在问题。
以上就是Java数组扩容后输出结果异常:为什么我的程序打印出10 11 12 13而不是1 2 3 4?的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号