Java学习第二十四天

发布于:2022-12-06 ⋅ 阅读:(781) ⋅ 点赞:(0)

目录

一、冒泡排序

第一步:思路

第二步:代码实现

二、查找

用到的知识

二维数组

通俗理解:

代码:

总结:

二维数组使用方式

使用方式1:动态初始化

二维数组在内存中的存在形式(重要!) 

使用方式2:动态初始化 

使用方式3:动态初始化-列数不确定

代码:

使用方式4:静态初始化

二维数组练习

 杨辉三角

规律总结:

代码:

 二维数组使用细节和注意事项

二维数组课堂练习


一、冒泡排序

冒泡排序(Bubble Sorting)

例子:24,69,80,57,13 使用冒泡排序法将其排成一个从小到大的有序数列

第一步:思路

冒泡排序特点总结:

1.一共有5个元素

2.一共进行了4轮排序,可以看成是外层循环

3.每一轮排序确定一个数据的位置,第一轮确定最大数,第二轮排序确定第二大的数,以此类推

4.当进行比较时,如果前面的数大于后面的数,就交换(从小到大)

5.每一轮的比较次数在逐渐减少 4->3->2->1

第二步:代码实现

第一轮排序代码

public class BubbleSort{
	//编写一个main方法
	public static void main(String[] args){
		//化繁为简,先死后活
		int[] arr = {24,69,80,57,13};

		//第一轮有四次比较
		int temp = 0;
		for(int j = 0; j < 4; j++){
			//如果前面的数大于后面的数,交换两者位置
			if(arr[j] > arr[j+1]){
				temp = arr[j+1];
				arr[j+1] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第一轮排序后====");//遍历数组
		for(int j = 0; j < arr.length; j++){
			System.out.print(arr[j] + "\t");
		}

		
	}
}

第二轮代码和第一轮一样,只需更改循环次数即可

进一步精简:4轮排序可以作为一个外循环

内部循环只有每一轮循环的次数不同

i=0时,循环4次

i=1时,循环3次

i=2时,循环2次

i=3时,循环1次

public class BubbleSort{
	//编写一个main方法
	public static void main(String[] args){
		//下面我们举一个具体的案例来说明冒泡法。
		//我们将五个无序:24,69,80,57,13 使用冒泡排序法将其排成一个从小到大的有序数列
		//依次比较,一共四轮比较
		//第一轮进行四次,第二轮3次
		
		int arr[] = {24, 69, 80, 57, 13};
		for(int j = 0; j < arr.length - 1; j++){
			int temp = 0;
			for(int i = 0; i < arr.length - 1 - j; i++){
				if(arr[i] > arr[i + 1]){
					temp = arr[i];
					arr[i] = arr[i + 1];
					arr[i + 1] = temp;
				}
			}

			System.out.println("\n=======第" + (j + 1) + "轮排序的结果为====");
			
			for(int i = 0; i < arr.length; i++){
				System.out.print(arr[i] + "\t");
			}
				
		}
	}	
}

	

二、查找

代码

/*
1) 有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:
从键盘中任意输入一个名称,判断数列中是否包含此名称
【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值
 */
import java.util.Scanner;

public class SeqSearch{

	public static void main(String[] args){

		String names[] = {"白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王"};

		System.out.println("请输入要查找的名字");

		Scanner myScanner = new Scanner(System.in);

		String findName = myScanner.next();

		int index = -1;//经典编程思想

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

			if(names[i].equals(findName)){//字符串的比较

				System.out.println("恭喜你,已经找到" + findName);

				index = i;

				System.out.println("下标为" + index);

				break;

			}

		}

		if(index == -1){//当执行此语句时,说明上述循环的if分支中的index = i;
						//没有被执行,即数组内没有输入的名字

			System.out.println("此数组内没有" + findName);

		}
	
	}
}
		

用到的知识

字符串比较:equals的用法 findName.equals(name[i]);

 经典编程技巧 :  index = -1;设置一个变量,如果匹配成功将下标赋给此变量,如果如果index = -1仍然成立,说明遍历过后匹配不成功

二维数组

通俗理解:

定义形式:int[][] 

一个一维数组的元素本身又是一个一维数组,就这样构成了二维数组

代码:

public class TwoDimensionalArray01{

	public static void main(String[] args){
		
		
		/*
		请用二维数组输出如下图形
			0 0 0 0 0 0
			0 0 1 0 0 0
			0 2 0 3 0 0
			0 0 0 0 0 0

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

		System.out.println("该二维数组的元素个数为" + arr.length);
		System.out.println("该二维数组的第三行第四元素个数为" + arr[2][3]);//数组下标是从零开始的

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

	}
}
		

总结:

arr[3][3]表示第4个一维数组的第4的元素的值,即0,因为数组的下标是从0开始的

arr[i]表示数组的第i个一维数组,arr[i].length表示第i个一维数组的长度

二维数组使用方式


使用方式1:动态初始化

语法: 类型[][] 数组名=new 类型[大小][大小]

2) 比如: int a[][]=new int[2][3](一个二维数组内有两个一维数组,每个一维数组内有3个元素)

代码:

public class TwoDimensionalArray02{

	public static void main(String[] args){
		
		int[][] arr = new int[2][3];
		arr[0][2] = 8;//第1个一位数组的第3个元素为8
		arr[1][1] = 5;//第2个一维数组的第2个元素为5
		//遍历二维数组
		for(int i = 0; i < arr.length; i++){
			//遍历二维数组内的一维数组
			for(int j = 0; j < arr[i].length; j++){
				System.out.print(arr[i][j] + " ");//int型变量默认值为0
			}
			System.out.print("\n");
		}
	}
}
		

二维数组在内存中的存在形式(重要!) 

使用方式2:动态初始化 

先声明:类型 数组名[][];

再定义(开辟空间) 数组名 = new 类型[大小][大小]

赋值(有默认值,比如 int 类型的就是 0)                                                 

eg:int arr[][];
        arr = new int[2][3];

使用方式3:动态初始化-列数不确定

要求:打印出以上数组

 题目分析:一个二维数组,有三个一维数组,但是每个一维数组内元素的数量是不同的,第一个一维数组内有一个元素,第二个有两个元素,第三个有三个元素

代码:

public class TwoDimensionalArray03{

	public static void main(String[] args){
		
		int arr[][];
		arr = new int[3][];//不确定每个一维数组内有几个元素
		for(int i = 0; i < arr.length; i++){
			//给每个一维数组开辟一个新的空间
			//arr[0]内有1个元素,arr[1]有两个元素,arr[2]有3个元素
			arr[i] = new int[i + 1];//如果没有这一步,arr[i]就是null
			for(int j = 0; j < arr[i].length; j++){
            //arr[0]内的一个元素的值为1;arr[1]内两个元素的值为2,arr[2]内三个元素的值为3
				arr[i][j] = i + 1;
				System.out.print(arr[i][j] + " ");
			}
		System.out.print("\n");
		}
		
	}
}
		

使用方式4:静态初始化

int[][] arr = {{1,1,1}, {8,8,9}, {100}};

解读:1)二维数组arr内有3个元素,即3个一维数组;2)第一个一维数组有3个元素,分别为1,1,1;第二个一维数组有3个元素,分别为8,8,9;第三个一维数组有1个元素,值为100;

二维数组练习

第一题:int arr[][]={{4,6},{1,4,5,7},{-2}}; 遍历该二维数组,并得到和

代码

/*int arr[][]={{4,6},{1,4,5,7},{-2}}; 
遍历该二维数组,并得到和
*/
public class TwoDimensionalArray05{

	public static void main(String[] args){
		int arr[][]={{4,6},{1,4,5,7},{-2}};
		int sum = 0;
		for(int i = 0; i < arr.length; i++){
			for(int j = 0; j < arr[i].length; j++){
				System.out.print(arr[i][j] + " ");
				//一轮小循环累计一个一维数组内元素的和,大循环结束后累计为二维数组的和
				sum += arr[i][j];
			}
			System.out.print("\n");
		}
		System.out.print("此数组的和为" + sum);
				
	}
}

 杨辉三角

杨辉三角的形式

1

1 1

1 2 1

1 3  3  1

1 4  6  4  1

1 5 10 10 1

以此类推

规律总结:

1)第n行有n个元素()

                   2)第一个数字和最后一个数字都是1

                   3)第三行开始除了首个元素和最后一个元素之外的值的规律:arr[i][j]=arr[i-1][j] +arr[i-1][j-1]

以上三条是打印出杨辉三角的重要条件

代码:

//打印10行杨辉三角
public class YangHui{

	public static void main(String[] args){
		//杨辉三角的规律
		
		//1)第n行有n个元素()
		//2)第一个数字和最后一个数字都是1
		//3)第三行开始除了首个元素和最后一个元素之外的值的规律
		//:arr[i][j]=arr[i-1][j] +arr[i-1]
		int yangHui[][] = new int[10][];
		for(int i = 0; i < yangHui.length; i++){
			//给每一个一维数组开创空间
			yangHui[i] = new int[i + 1];
			for(int j = 0; j < yangHui[i].length; j++){
				//每一个一维数组的第一个元素和最后一个元素的值为1
				if(j == 0 || j == yangHui[i].length - 1){//最后一个元素的下标值为数组长度-1
					yangHui[i][j] = 1;
				}else{//首尾意外元素的值
					yangHui[i][j] = yangHui[i-1][j] + yangHui[i-1][j-1];
				}
			}
		}
		//循环遍历输出
		for(int i = 0; i < yangHui.length; i++){
			for(int j = 0; j < yangHui[i].length; j++){
				System.out.print(yangHui[i][j] + " ");
			}
			System.out.print("\n"); 
		}

	}
}

 二维数组使用细节和注意事项

1)二维数组的声明方式有: int[][] y 或者 int[] y[] 或者 int y[][]

2)二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同(不相同的为列数不相等的二维数组)。

二维数组课堂练习

题目:

声明:int[] x,y[];以下选项能够通过编译的是()
        int[] x,y[] 即int[] x;int[] y[]; 其中int[]作用于x和y[]
        由此得出x是一维数组,y是二维数组

       a) x[0] = y;       //将二维数组赋值给一维数组内的一个元素 int[][] -> int
       b)y[0] = x;        //y是二维数组,y[0]是一维数组,x也是一维数组,此语句正确
       c) y[0][0] = x;     //int[] -> int 错误
       d) x[0][0] = y;     //x是二维数组,不存在x[0][0]
        e)y[0][0] = x[0];  //都是数组内的元素
        f) x = y;             //int[][] -> int[]错误

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

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