Java数组扩容后输出结果异常:为什么我的程序打印出10 11 12 13而不是1 2 3 4?

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。

Java数组扩容后输出结果异常:为什么我的程序打印出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数组扩容后输出结果异常:

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享