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
喜歡就支持一下吧
相關推薦