欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数组的复杂使用(反转,简单扩容,删减,指定位置扩容)

程序员文章站 2023-11-05 11:04:34
的说法法分为三个改变...

数组是我们开发中经常使用的一种技术,因此也很重要。
下面我先来引出为什么用数组。
数组的复杂使用(反转,简单扩容,删减,指定位置扩容)思路:定义6个变量,加起来总体重????
首先来简单介绍一下数组:
个人语言理解:数组就是一组可以存放多个同一类型数据的容器。同时数组也是一种数据类型,但是它是引用类型。既数组就是一组数据。
因此我们可以将其数据放到数组中进行计算。

先体验一把:
数组的简单语法和格式我就不在赘述,主要分析一下注意细节:

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理。

  2. 数组中的元素可以是任何数据类型,包括基本数据类型,引用数据类型。但是不能混用

  3. 数组创建后,如果没有赋值,有默认值:
    int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false, String null。主要注意boolean,它的默认值是false,不是true。

  4. 数组的下标是从0开始的。

  5. 数组下标必须在指定范围内使用,否则报:下标越界异常,比如 int [] arr=new int[5]; 则有效下标为 0-4。

  6. 数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量。

开撸:

1.反转

随机生成五个数, 并将其反转打印,把数组组的元素反转。arr{1,2,3,4,5}->{5,4,3,2,1}
//思路分析:找规律反转
//1.将第一个位置的数和最后的一个位置反转(最后一个位置刚好是length-1)。
//2.将第二个位置的数和倒数第二个位置数反转。
//3.交换的次数只能是数组的长度一半。(若次数是数组长度,那么当循环交换。)

int[] arr={1,2,3,4,5};
int temp=0;
for(int i=0;i<arr.length/2;i++){
temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}//循环完毕时 则数组反转完成

完整代码:

import java.util.Scanner;
//数组元素反转
public class ArrayApply5  
{
	public static void main(String[] args) {
		
		int[] arr = {1, 2, 3, 4, 5, 10};
		int temp = 0;
		for( int i = 0 ;  i <  arr.length / 2; i++) { // i 次数, 同时下标
			
			temp = arr[i];
			arr[i] = arr[arr.length-1 - i];
			arr[arr.length-1 - i] = temp;
		}
		System.out.println("==============");

		for( int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + "\t");
		}
		
	}
}


2.简单扩容

  1. 要求:实现动态的给数组添加元素效果,实现对数组扩容。。
  2. 原始数值使用静态分配 int[] arr = {1,2,3}
  3. 增加的元素,直接放在数组的最后 arr = {1,2,3,4}
    arrNew = {1,2,3,4}
  4. 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n
    //思路分析:
  1. 新申请一个数组,数组长度是原数组长度+1
  2. 让原数组的对新数组的数据复制
  3. 再将要插入的数插在新建的最后一个位置。
  4. 再讲新数组的地址给初始数组,初始的数组将被回收。这样做就不用在对新数组进行++操作了。

核心代码:

 //先实现一次的扩容
 int[] newarr=int[arr.length+1];
 for(int i=0;i<newarr.length;i++){
 newarr[i]=arr[i];
}
//此时新数组的最后一个位置数据是0,接着将要添加的数插入。
newArr[newArr.length - 1] = addNum;//1,2,3,4,88
arr=newarr;//让arr1 指向新的扩容后的数组,原来的数组当做垃圾被回收

完整代码:

import java.util.Scanner;
//数组扩容
public class ArrayApply5  
{
	public static void main(String[] args) {
		int[] arr1 = {1,2,3};
		char choice = ' '; //选择
		Scanner myScanner = new Scanner(System.in);
		int addNum = 88;
		//增加一个88 到 arr1 中
		int[] newArr = new int[arr1.length + 1]; // {0,0,0,0}
		for( int i = 0; i < arr1.length; i++) { // {1,2,3,0}
			newArr[i] = arr1[i];
		}
		newArr[newArr.length - 1] = addNum; // {1,2,3,88}
		arr1 = newArr; //让arr1 指向新的扩容后的数组,原来的数组当做垃圾被回收
		System.out.println("===========");
		for( int i = 0; i < arr1.length; i++) { // {1,2,3,0}
			System.out.print(arr1[i] + "\t");
		}
		
	}
}

这只能扩容一次,如何根据输入的来扩容,那么肯定是要循环,这里选择do…while…先给框架建起来。

public class ArrayApply5  
{
	public static void main(String[] args) {
		
		int[] arr1 = {1,2,3};
		//将代码改进成可以循环添加的效果
		int addNum = 88;
		char choice = ' '; //选择
		Scanner myScanner = new Scanner(System.in);
		do
		{
			System.out.println("是否继续添加 y/n");
			choice = myScanner.next().charAt(0);
			if(  choice == 'y' ) {
			System.out.println("请输入一个整数");
			addNum = myScanner.nextInt();	
		}while ( choice != 'n' );
	
	}
}

接下来只要把一次添加的放进循环就可以用
完整代码:

import java.util.Scanner;
//数组扩容
public class ArrayApply5  
{
	public static void main(String[] args) {
		
		int[] arr1 = {1,2,3};
		//将代码改进成可以循环添加的效果
		int addNum = 88;
		char choice = ' '; //选择
		Scanner myScanner = new Scanner(System.in);
		do
		{
			System.out.println("是否继续添加 y/n");
			choice = myScanner.next().charAt(0);
			if(  choice == 'y' ) {
				System.out.println("请输入一个整数");
				addNum = myScanner.nextInt();	
				//代码拿来
				int[] newArr = new int[arr1.length + 1]; // {0,0,0,0}
				for( int i = 0; i < arr1.length; i++) { // {1,2,3,0}
					newArr[i] = arr1[i];
				}
				newArr[newArr.length - 1] = addNum; // {1,2,3,88}
				arr1 = newArr; //让arr1 指向新的扩容后的数组,原来的数组当做垃圾被回收
				System.out.println("===========");
				for( int i = 0; i < arr1.length; i++) { // {1,2,3,0}
					System.out.print(arr1[i] + "\t");
				}
			}
		}while ( choice != 'n' );

	}
}

好了,搞定。剩下的两个请关注明天的…

本文地址:https://blog.csdn.net/qq_40530040/article/details/107073568