Java数组的扩容与缩减
生活随笔
收集整理的這篇文章主要介紹了
Java数组的扩容与缩减
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java數組的擴容與縮減
?Java數組的擴容
?要求
實現動態的給數組添加元素效果,實現對數組的擴容,1. 原始數組此次采取靜態分配 byte[] arr = {1,2,3}2. 增加用戶需要擴容的元素,直接放在數組的最后 arr = {1,2,3,,x}3. 用戶可以通過如下方法來決定是否繼續添加,添加成功,是否繼續 Y/N?思路分析
先繁后簡1. 定義初始化數組 byte[] arr = {1,2,3}; 下標 0~22. 定義一個新的數組 byte[] arrNew = new int[arr.length + i];3. 遍歷 arr 數組,依次將 arr 的元素拷貝到 arrNew 數組中4. 將用戶輸入到的c擴容元素賦給 arrNew[arrNew.length-i] = 元素5. 讓 arr 指向arrNew;arr = arrNew;那么,原來arr數組就被銷毀先死后活1. 創建一個 Scanner 接收用戶的輸入2. 因為用戶什么時候退出不確定,此次采取 do - while + break 來控制?優化
可以采取隨機產生原始數組和添加的方式,但不太建議,因為不太貼合生活所需?缺點
1. 未使用函數的調用實現用戶的繼續操作2. 該代碼效率低,未使用鏈表的方式,適合初學者3. 詢問用戶是否繼續次操作,只能對 'N'字符做出準確的判斷,對其他任何輸入操作,沒有進行判斷,都為true,此為大bug,解決此bug的其中一個方法就是 使用函數的調用實現用戶的繼續操作4. 沒有做出對任意位置的添加,在以后可以用鏈表做出此效果,且效率較高,代碼簡潔?代碼以及需要強調的部分
import java.util.Scanner;public class ArrayAdd {public static void main(String[] args) {byte[] arr = { 1, 2, 3 };do {Scanner myScanner = new Scanner(System.in);System.out.print("請輸入需要添加的元素個數:");/*強調 強調 強調因為myScanner.nextByte()在后面多次遇到,所以必須這樣做,防止出現重復輸入的情況*/byte len = myScanner.nextByte();byte[] arrNew = new byte[arr.length + len];// 遍歷 arr 數組,依次將 arr 的元素拷貝到 arrNew 數組for (byte i = 0; i < arr.length; i++) {arrNew[i] = arr[i];}Scanner myScannerarrNew = new Scanner(System.in);// 把用戶輸入到擴容元素賦給對應的數組位置for (byte i = 0; i < len; i++) {System.out.print("請輸入需要擴容的第" + (i + 1) + "個元素");arrNew[arr.length + i] = myScannerarrNew.nextByte();}arr = arrNew;System.out.println("===擴容后的元素如下===");// 輸出 arr 看效果/*強調 強調 強調 因為已經進行了 arr = arrNew 操作,所以此刻長度一定是 arr.length 需注意,否則會造成 '出界'*/for (byte i = 0; i < arr.length; i++) {System.out.println("arr[" + i + "]=" + arr[i]);}// 詢問用戶是否繼續次操作System.out.println("是否繼續次操作!\tY/N");/*強調 強調 強調接受字符串的方式為: myScannerarradd.next().charAt(0)切勿寫成 myScannerarradd.nextByte(),否則會造成線程錯誤因為myScannerarradd.next().charAt(0)在后面多次遇到,所以必須這樣做,防止出現重復輸入的情況*/Scanner myScannerarradd = new Scanner(System.in);char lenarradd = myScannerarradd.next().charAt(0);if (lenarradd == 'N') {break;}/*詢問用戶是否繼續次操作,只能對 'N'字符做出準確的判斷,對其他任何輸入操作,沒有進行判斷,都為true,此為大bug,解決此bug的其中一個方法就是 使用函數的調用實現用戶的繼續操作導致此處只能寫為 true,不能寫成其他的方式,如:myScannerarradd.next().charAt(0) == 'Y'lenarradd == 'Y' */} while (true);System.out.println("您退出了添加...");} }Java數組的縮減
?需求
有一個數組 {1,2,3,4,5},可以將該數組進行減縮,提示用戶是否繼續縮減,每次縮減最后那個元素,并提示剩余的元素個數,當減為0時,自動退出程序,并提示不能在縮減?思路分析
先繁后簡1. 定義原始數組 byte[] arr = { 1, 2, 3, 4, 5 };2. 定義一個新的數組 byte[] arrreduce = new byte[arr.length-len];3. 定義一個變量 byte count = 0;用于統計個數,實現每輸出5個就換行的目的先死后活1. 創建一個 Scanner 接收用戶的輸入2. 因為用戶什么時候退出不確定,此次采取 do - while + break 來控制?優化
可以采取隨機產生原始數組和添加的方式,但不太建議,因為不太貼合生活所需?缺點
1. 未使用函數的調用實現用戶的繼續操作2. 該代碼效率低,未使用鏈表的方式,適合初學者3. 詢問用戶是否繼續次操作,只能對 'N'字符做出準確的判斷,對其他任何輸入操作,沒有進行判斷,都為true,此為大bug,解決此bug的其中一個方法就是 使用函數的調用實現用戶的繼續操作4. 沒有做出對任意位置的添加,在以后可以用鏈表做出此效果,且效率較高,代碼簡潔 注:需要強調的以在 ArrayAdd 中強調清楚,望熟知!?代碼以及需要強調的部分
import java.util.Scanner;public class ArrayReduce {public static void main(String[] args) {byte[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };do{byte count = 0; // 用于統計個數,實現每輸出5個就換行的目的System.out.println("原始數組長度為" + arr.length + "\n情況如下:");for (byte i = 0; i < arr.length; i++){System.out.print("arr[" + i + "]=" + arr[i] + "\t");count++;if(count%5==0){System.out.println();}}System.out.print("\n請輸入需要縮減的個數:");Scanner mysScanner = new Scanner(System.in);byte len = mysScanner.nextByte();byte[] arrReduce = new byte[arr.length - len];for(byte i=0;i<arr.length - len;i++){arrReduce[i] = arr[i];}arr = arrReduce;System.out.println("===縮減后的元素如下===");count = 0; // 原因:上述操作以將 count 賦了值,我們需要在此處重新賦值for(byte i=0;i<arr.length;i++){System.out.print("arr[" + i + "]=" + arr[i] + "\t");count++;if (count % 5 == 0) {System.out.println();}}// 詢問用戶是否繼續次操作System.out.println("\n是否繼續次操作!\tY/N");Scanner myScannerarradd = new Scanner(System.in);char lenarradd = myScannerarradd.next().charAt(0);if (lenarradd == 'N') {break;} } while (true); } }??注:
需要強調的以在 ArrayAdd 中強調清楚,望熟知!
OK,本期內容就到這里,讓我們一起期待下一篇博客,感謝支持
總結
以上是生活随笔為你收集整理的Java数组的扩容与缩减的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rails kaminari boots
- 下一篇: Activemq配置文件详解