java:6 数组(2)

文章目录

    • 9. 数组添加/扩容
    • 10. 数组缩减
    • 11. 排序
    • 12. 冒泡排序法
    • 13. 查找

【老韩视频168-174】

9. 数组添加/扩容

要求:实现动态的给数组添加元素效果,实现对数组扩容。

  1. 原始数组使用静态分配int[] arr = {1,2,3}
    增加的元素4,直接放在数组的最后 arr = {1,2,3,4}
public class Test {
	public static void main(String[] args) {
		//思路分析:
		//1. 定义原始数组
		int[] arr = {1,2,3};

		//2. 定义一个新的数组,大小是arr.length + 1;
		int[] arr2 = new int[arr.length + 1];

		//3. 遍历arr数组,将arr元素拷贝到arr2数组
		//再将4赋值给arr2[arr2.length - 1] = 4;
		for(int i = 0; i < arr.length + 1; i++){
			if(i < arr.length){
				arr2[i] = arr[i];
			}
			arr2[i] = 4;
		}

		//4. 把arr2的地址拷贝给arr,完成扩容。
		arr = arr2;
		
	}
} 
  1. 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n【动态化扩容】
public class Test {
	public static void main(String[] args) {
		//思路分析:
		//1. 创建一个Scanner来接收用户的输入。
		//2. 因为用户什么时候退出不确定,使用dowhile + break来控制。
		int[] arr = {1,2,3};
		import java.util.Scanner;
		Scanner myScanner = new Scanner(System.in);
		
		do{
			int[] arr2 = new int[arr.length + 1];		
			//拷贝原始数组。
			for(int i = 0; i < arr.length; i++){
				arr2[i] = arr[i];
			}
			System.out.println("请输入你要添加的元素");
			int addNum = myScanner.nextInt();
			//把addNum赋值给arr2的最后一位数
			arr2[arr2.length - 1] = addNum;
			arr = arr2;
			System.out.println("是否继续添加y/n");
			char key = myScanner.next().charAt(0);
			if(key == 'n'){
				break;
			}
		}while(true);
		System.out.println("您已退出添加...");
	}
} 

10. 数组缩减

有一个数组 {1, 2, 3, 4, 5}, 可以将该数组进行缩减,提示用户是否继续缩减,每次缩减最后那个元素。当只剩 下最后一个元素,提示,不能再缩减。

public class Test {
	public static void main(String[] args) {
		//思路分析:跟动态扩容很像,思考。
		
		int[] arr = {1,2,3,4,5};
		import java.util.Scanner;
		Scanner myScanner = new Scanner(System.in);
		//定义一个新的数组。
		int[] arr2 = new int[arr.length -1];
		
		do{
			for(int i = 0; i < arr2.length; i++){
				arr2[i] = arr[i];
			}
			arr = arr2;
			System.out.pritnln("是否继续缩减?y/n");
			char answer = myScanner.next().charAt(0);
			if(answer = 'n'){
				break;
			}
		}while(true);
	}
} 

11. 排序

  1. 定义:排序是将多个数据,依指定的顺序进行排列的过程。
  2. 排序的分类:
    1. 内部排序法:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择 式排序法和插入式排序法)。
    2. 外部排序法: 数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。

12. 冒泡排序法

  1. 冒泡排序(Bubble Sorting)的基本思想: 通过对“待排序序列”从后向前依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
  2. 冒泡排序法案例:
    将五个无序:24,69,80,57,13 使用冒泡排序法排成一个从小到大的有序数列。
  • 思路:

java:6 数组(2)_第1张图片

  • 代码:
public class BubbleSort { 
	public static void main(String[] args) {
		//化繁为简,先死后活
		//1. 先实现第一轮排序。
		int[] arr = {24, 69, 80, 57, 13};
		int temp = arr[j + 1];//用来辅助交换的变量。
		for(int j = 0; j < 4; j++){//4次计较
			if(arr[j] > arr[j + 1]){
				temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}

		//2. 如何实现第二轮。
		//只需要改变j的范围
		for(int j = 0; j < 3; j++){//3次计较
			if(arr[j] > arr[j + 1]){
				temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
		
		//3. 用2层循环来实现所有的东西!!!!
		int[] arr = {24, 69, 80, 57, 13};
		int temp = arr[j + 1];//用来辅助交换的变量。
		//加一个外循环.
		for(int i = 0; i < arr.length - 1; i++){
			for(int j = 0; j < arr.length - 1 - i; j++){//4次计较
				if(arr[j] > arr[j + 1]){
					temp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
				}
			}
		}
		
	}
} 

13. 查找

在 java 中,我们常用的查找有两种:

  1. 顺序查找
  2. 二分查找【二分法,我们放在算法讲解】
  1. 案例:
    有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判断数列中是否 包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。
  • 注意⚠️:string的比较要用equals。
public class SeqSearch {
	public static void main(String[] args) {
		//思路:
		//1. 定义一个string数组
		//2. 接收用户输入,遍历数组,逐一比较。如果有,则提示信息,并推出。
		String[] names = {白眉鹰王, 金毛狮王, 紫衫龙王, 青翼蝠王};
		import java.util.Scanner;
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入名字");
		String findName = myScanner.next();


		//这里老韩有一个很厉害的编程思想。
		int index = -1;
		for(int i = 0; i < names.length; i++){
			//string的比较要用equals
			if(findName.equals(names[i])){
				System.out.println("恭喜你找到了" + findName);
				System.out.println("下标为 = " + i);
				index = i
				break; //找到就退出。
			} 
		}
		//如果循环结束后index = -1,证明一直都没有找到。
		if(index == -1){
			System.out.println("不好意思,没找到" + findName);
		}
	}
} 
  1. 请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标, 如果没有就提示"没有这个数"。
public class SeqSearch {
	public static void main(String[] args) {
		//
		int arr = {1,8, 10, 89, 1000, 1234};
		import java.util.Scanner;
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入数字");
		int findNum = myScanner.nextInt();
		
		int index = -1;//用来辅助确定,每一个index都没有找到一样的。
		for(int i = 0; i < arr.length; i++){
			if(findNum == arr[i]){
				System.out.println("找到" + findNum);
				System.out.println("下标为" + i);
			}
		}
		if(index == -1){
			System.out.println("不好意思没有找到" + findNum);
		}
	}
} 

你可能感兴趣的:(java,开发语言)