java学习第二十三天

发布于:2022-12-07 ⋅ 阅读:(648) ⋅ 点赞:(0)

目录

数组翻转

数组扩容

错误总结:

执行流程:

数组缩减


数组翻转

第二种思路:逆序赋值

思路:创建一个新的数组arr2,然后将arr逆序赋值给arr2

arr1是从后往前走

arr2是从前往后走,增加一个新的变量j,j是从0到5;(不用设置范围,有i>=0这个条 限制)

public class ArrayReverse03{
	//编写一个main方法
	//逆序遍历
	public static void main(String[] args){
		int[] arr = {11, 22, 33, 44, 55, 66};
		int[] arr2 = new int [arr.length];
		for(int i = arr.length-1, j = 0; i >= 0; i--, j++){
			arr2[j] = arr[i];
		}
		arr = arr2;//让arr指向arr2的数据空间
		for(int i = 0; i < arr.length; i++){
			System.out.print(arr[i] + "\t");
		}


		
	}
}

完成第一个循环之后,arr2 就是一个逆序的数组 {66, 55, 44,33,22,11}

数组扩容

要求:

要求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java 1) 原始数组使用静态分配 int[] arr = {1,2,3} 2) 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4}

代码:

public class ArrayAdd{
	public static void main(String[] args){

		
		int[] arr = {1, 2, 3};
		int[] arrNew = new int[arr.length + 1];
		System.out.print(arr.length + "\t");
		System.out.print(arrNew.length + "\t");
		for(int i = 0; i < arrNew.length; i++){
			if(i == arrNew.length-1){
				arrNew[arrNew.length-1] = 4; 
			}else{

				arrNew[i] = arr[i];
			}

			System.out.print(arrNew[i] + "\t");
		}
		System.out.println(arrNew.length);
		
		
		
	}
}

错误总结:

代码应该是arrNew[i] = arr[i];一开始写的是arrNew = arr; arrNew = arr;时,arrNew的长度变成了3,而不是4,arrNew.length-1是2而不是3,所以输出结果为1,2,4

灵活添加:用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n

代码如下:

import java.util.Scanner;
public class ArrayAdd02{
	public static void main(String[] args){
		//编写一个main方法
		
		Scanner myScanner = new Scanner(System.in);

		int[] arr = {1, 2, 3};

		char answer = ' ';

		do{

			int[] arrNew = new int[arr.length + 1];
		
			for(int i = 0; i < arr.length; i++){	

				arrNew[i] = arr[i];

			}

			System.out.println("请输入你要添加的元素");

			int endNum = myScanner.nextInt();

			arrNew[arrNew.length-1] = endNum;

			arr = arrNew;//将arrNew的地址空间指向arr,arr原有的空间被销毁

			System.out.println("====扩容后的数组====");

			for(int i = 0; i < arr.length; i++){

				System.out.print(arr[i] + "\t");
			}

			System.out.println("是否继续添加?y/n");

			answer = myScanner.next().charAt(0);

			if(answer != 'y'){
				
				break;
			}

		}while(answer == 'y');//死循环,用break跳出循环

		System.out.println("停止添加");
			
	}
}

        //1.创建数组arr,存放元素1,2,3
        //2.创建数组arrNew,长度为arr.length+1
        //3.遍历arr数组,依次将其元素的值拷贝给arrNew
        //4.将4赋值给数组的最后一个元素,即arrNew[arrNew.length-1]
        //输入询问语句,需要Scanner
        //是否继续?y/n是一个不确定的因素,通过do..while+break来控制

执行流程:

先执行一次扩容,并且扩容的元素是从控制台输入的

一次扩容后,询问是否继续添加,若输如y以外的任何内容都是退出添加,

若输入y,则进行循环继续扩容

数组缩减

import java.util.Scanner;

public class ArrayReduce{

	
	public static void main(String[] args){

		Scanner myScanner = new Scanner(System.in);

		char answer = ' ';

		int arr[] = {1, 2, 3, 4, 5};

		do{

			int arrNew[] = new int[arr.length - 1];

			for(int i = 0; i < arrNew.length; i++){

				arrNew[i] = arr[i];

			}

			arr = arrNew;

			System.out.println("arr缩减后的元素如下");

			for(int i = 0; i < arr.length; i++){

				System.out.print(arr[i] + "\t");
			}

			System.out.println("是否继续缩减?y/n");

			answer = myScanner.next().charAt(0);

			if(answer != 'y'){

				break;
			}

			if(arr.length == 1){

				System.out.println("只有一个元素无法再删减");

				break;
			}


		}while(answer == 'y');

		System.out.print("退出程序...");
	}
}


思路与数组扩容大同小异


网站公告

今日签到

点亮在社区的每一天
去签到