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免费学习笔记(深入)”;
阿里云-虚拟数字人
阿里云-虚拟数字人是什么? …
2 查看详情
错误代码片段:
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?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/607031.html
微信扫一扫
支付宝扫一扫