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数组的扩容与缩减相关推荐

  1. java数组的扩容,将两个数组合并成一个数组

    java数组的扩容,将两个数组合并成一个数组 //将下列两个数组合成一个数组 public class Test04 {public static void main(String[] args) { ...

  2. java数组循环扩容_Java中实现数组动态扩容的两种方法

    Java中实现数组动态扩容的两种方法 java中初始化一个数组需要定义数组的容量,而在我们使用数组时往往会遇到数组容量不够的情况,此时我们就需要通过动态扩容的方式来来根据需求扩大数组的容量. 我们可以 ...

  3. java 数组的扩容,缩容,插入元素,查找元素 详解(通俗易懂)

    目录 前言 : 一个必须明白的事实(重要!) : 数组的扩容 : 需求 : 思路 : 代码演示 : 数组的缩容 : 需求 : 思路 : 代码演示 : 数组元素的插入 : 需求 : 思路 : 代码演示 ...

  4. Java数组添加/扩容(基础---代码思路)

    要求:实现动态的给数组添加新的元素,为数组扩容 1)原始数组用静态分配 int [ ] arr = {1, 2, 3} 2)为数组最后添加一个元素n,使arr = {1, 2, 3, n} 3)用户可 ...

  5. java数组可扩展_[转载]Java数组扩容算法及Java对它的应用

    Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arr ...

  6. java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果(数组扩容,数组排序,键盘录入)

    @author silence丶你的名字 java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果 初始数组元素1 for死循环 获取用户录入的数据,如果为952 ...

  7. Java数组扩容算法及Java对它的应用

    1)Java数组对象的大小是固定不变的,数组对象是不可扩容的.利用数组复制方法可以变通的实现数组扩容.System.arraycopy()可以复制数组.Arrays.copyOf()可以简便的创建数组 ...

  8. [转载]Java数组扩容算法及Java对它的应用

    原文链接:http://www.cnblogs.com/gw811/archive/2012/10/07/2714252.html Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组 ...

  9. 二维数组(拷贝/扩容/删除)——Java

    目录 前言 一.二维数组的声明及初始化 1.二维数组的声明 2.二维数组的初始化 2.1静态初始化 2.2动态初始化 二.访问数组元素 1.设置元素 1.1 设置元素 1.2 案例​​​​​​​ 2. ...

  10. (二十六)、Java数组在内存中如何存放与分配

    Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字"new"创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说是一样的,因为数组也是一个 ...

最新文章

  1. Google CEO Sundar Pichai :“谷歌最大的威胁就是自身的成功”
  2. iOS UI基础-4.1应用程序管理 字典转Model
  3. 年前最后一项技能树 Rust ,攻碉堡 ing (Bilibili 视频整理)
  4. (转)NGUI研究院之三种方式监听NGUI的事件方法
  5. 这家公司耕耘超算20年,连续3年世界第一,现在加速中国AI
  6. wxWidgets:wxFileDirPickerEvent类用法
  7. Salesforce 超越 Oracle:四十年的甲骨文和二十岁的SaaS之王
  8. 《天天数学》连载45:二月十四日
  9. zabbix3.2自动发现
  10. 管理者如何做好“冲突管理”
  11. 虚拟主机和云服务器有什么区别,我们应该如何选择?
  12. HTML的三种页面布局方式
  13. DNA序列c语言,请问怎么用r语言进行dna序列分析?
  14. 机器学习课程教学案例—简单手写数字识别系统开发
  15. MySQL单表数据查询之分组数据查询之旅
  16. js - 数学运算(取整,取余)
  17. Linux-Ubuntu-4-软件安装
  18. aptio设置全中文_中文bios设置方法图解教程(超简单)
  19. Fabric架构及基本原理
  20. ITON - 1 论矩阵的妙用

热门文章

  1. 【Python】详解 collections.Counter
  2. 采访了12位中年程序员,听听他们的故事和人生!
  3. 智能注塑工艺与模流分析技术研讨会暨上海大学Moldex3D实训基地开幕式圆满结束
  4. 注塑机摆放间距多少合适_注塑模具加工须知(1):必须注意注塑机注塑参数“拉杆间距”...
  5. python中的snip用法_--snip--总是报错,找了好久不知道问题出在哪,望大佬求解(python-pygame)...
  6. 苹果电脑上可以转化照片格式的几个小工具
  7. 房屋登记官考核模拟题(6)
  8. 内网渗透系列:痕迹清理方法小结
  9. Python中字典的常用方法
  10. 方差公式初三_初中数学公式定理大全之方差