7.JAVA基础(数组排序,二维数组)

例题

public class ArrayTest9 {
	public static void main(String[] args) {
		System.out.println("--------------------------------欢迎来到成绩管理系统--------------------------------");

		Scanner sc = new Scanner(System.in);

		System.out.println("请输入班级人数:");
		int classNum = sc.nextInt();

		System.out.println("请输入录入的科目:");
		String course = sc.next();

		// 定义数组存储班级成绩,长度为录入的人数
		double[] achievement = new double[classNum];

		// 循环遍历数组录入成绩
		for (int x = 0; x < achievement.length; x++) {
			System.out.println("请输入第" + (x + 1) + "位同学的" + course + "成绩");
			achievement[x] = sc.nextDouble();
		}

		// 排名
		Arrays.sort(achievement);// 从小到大
		// 倒序,从大到小排序
		reverse(achievement);

		System.out.println("--------------------------------成绩录入完毕--------------------------------");

		w: while (true) {
			System.out.println("输入:");
			System.out.println("1:查询所有成绩\t 2:查询最高成绩\t 3:查询该成绩的排名\t 0:退出");
			int function = sc.nextInt();

			switch (function) {
			case 1:
				printArray(achievement);
				break;
			case 2:
				System.out.println("最高成绩是:" + getMax(achievement));
				break;
			case 3:
				System.out.println("请输入你要查询的成绩:");
				double value = sc.nextDouble();
				int index = getIndex(achievement, value);
				
				if (index >= 0) {
					System.out.println("该成绩是第" + (index + 1) + "名");
				} else {
					System.out.println("该成绩不存在");
				}
				break;
			case 0:
				System.out.println("欢迎下次使用本系统");
				break w;
			default:
				System.out.println("请输入正确的功能");
				break;
			}
			
			System.out.println("----------------------------------------------");
		}
	}

	/*
	 * 遍历数组的方法
	 * 
	 * 参数列表:int[] arr 返回值类型:void
	 */
	public static void printArray(double[] arr) {
		for (int x = 0; x < arr.length; x++) {
			System.out.println("第" + (x + 1) + "名的同学成绩:" + arr[x]);
		}
	}

	/*
	 * 数组逆序方法
	 * 
	 * 参数列表:double[] arr 返回值类型:void
	 */
	public static void reverse(double[] arr) {
		for (int x = 0; x < arr.length / 2; x++) {
			double temp = arr[x];
			arr[x] = arr[arr.length - 1 - x];
			arr[arr.length - 1 - x] = temp;
		}
	}

	/*
	 * 数组获取最大值
	 * 
	 * 参数列表:double[] arr 返回值类型:double
	 */
	public static double getMax(double[] arr) {
		// 定义参照物
		double max = arr[0];

		for (int x = 0; x < arr.length; x++) {
			// 和参照物进行比较
			if (arr[x] > max) {
				max = arr[x];
			}
		}

		return max;
	}

	/*
	 * 数组元素查找(查找指定元素第一次在数组中出现索引)
	 * 
	 * 参数列表:double[] arr,int value 返回值类型:int
	 */
	public static int getIndex(double[] arr, double value) {
		// 定义一个索引,如果找不到数据,我们一般直接返回一个负数
		int index = -1;

		for (int x = 0; x < arr.length; x++) {
			if (arr[x] == value) {
				index = x;
				break;
			}
		}

		return index;
	}
}

键盘录入同学数量32
再键盘录入成绩

功能如下:
1查询第一名成绩
2 查询成绩为98的同学索引

---------------------------------------欢迎来到成绩管理系统---------------------------------------
请输入班级人数:

请输入第1位同学的成绩…

输入:1.查询第一名成绩 2.查询指定成绩同学的索引3.输入3退出
1:第一名的成绩是:
2:请输入要查找的成绩
该成绩所在的索引位置是:

输入:1.查询第一名成绩 2.查询指定成绩同学的索引3.输入3退出
3:结束程序

数组的遍历:
基础遍历:

for (int x = 0; x < arr.length; x++) {
			System.out.println(arr[x]);
		}

改进:

for (int x = 0; x < arr.length; x++) {
			if(x == arr.length-1){
				System.out.print(arr[x]);
			}else{
				System.out.print(arr[x]+",");
			}
		}

用方法改进:
/*
* 遍历数组的方法
*
* 参数列表:int[] arr
* 返回值类型:void
*/

public static void printArray(int[] arr) {
	for (int x = 0; x < arr.length; x++) {
		if (x == arr.length - 1) {
			System.out.print(arr[x]);
		} else {
			System.out.print(arr[x] + ",");
		}
	}
	System.out.println();
}

数组获取最大值

/*

  • 需求:数组获取最大值
  • 分析:
  • a.定义一个数组,并对数组的元素进行静态初始化
  • b.从数组中任意的找一个元素作为参照物(一般取第一个),默认他就是最大值
  • c.然后遍历其他的元素,依次获取和参照物进行比较,如果大就是擂主 ,如果小就离开
  • d.最后参照物保存的就是最大值
  • */
public class ArrayTest2 {
	public static void main(String[] args) {
		// a.定义一个数组,并对数组的元素进行静态初始化
		int[] arr = { 12, 45, 78, 11, 78 };

		// b.从数组中任意的找一个元素作为参照物(一般取第一个),默认他就是最大值
		int max = arr[0];

		// c.然后遍历其他的元素,依次获取和参照物进行比较,如果大就是擂主 ,如果小就离开
		for (int x = 1; x < arr.length; x++) {
			if (arr[x] > max) {
				max = arr[x];
			}
		}

		System.out.println("max:" + max);
	}
}

数组元素逆序

/*

  • 需求:数组元素逆序
  • 分析:
  • a.定义一个数组,并对数组的元素进行静态初始化
  • b.把0索引和arr.length-1进行交换
  • 把1索引和arr.length-2进行交换
  • 到arr.length/2的时候就停止
  • */
public class ArrayTest3 {
	public static void main(String[] args) {
		// a.定义一个数组,并对数组的元素进行静态初始化
		int[] arr = { 12, 45, 78, 11, 78 };
		
		System.out.println("逆序前:");
		printArray(arr);
		
		// int temp = arr[0];
		// arr[0] = arr[arr.length-1-0];
		// arr[arr.length-1] = temp;
		//
		// int temp1 = arr[1];
		// arr[1] = arr[arr.length-1-1];
		// arr[arr.length-1-1] = temp;
		
		
		reverse(arr);
		
		System.out.println("逆序后:");
		printArray(arr);
	}
/*
 * 数组逆序方法
 * 
 * 参数列表:int[] arr 
 * 返回值类型:void
 * */
public static void reverse(int[] arr){
		for(int x=0;x<arr.length/2;x++){
			int temp = arr[x];
			arr[x] = arr[arr.length-1-x];
			arr[arr.length-1-x] = temp;
		}
	}
/*
 * 遍历数组的方法
 * 
 * 参数列表:int[] arr 
 * 返回值类型:void
 */
	public static void printArray(int[] arr) {
		for (int x = 0; x < arr.length; x++) {
			if (x == arr.length - 1) {
				System.out.print(arr[x]);
			} else {
				System.out.print(arr[x] + ",");
			}
		}
		System.out.println();
	}
}

数组元素查找

基本查找

/*

  • 需求:数组元素查找(查找指定元素第一次在数组中出现索引)
  • 基本查找:从头找到尾
  • 分析:
  • a.定义一个数组,并对数组的元素进行静态初始化
  • b.遍历数组,依次获取数组中每一个元素,和要找的数据进行比较
  • 如果相等:就返回当前索引
  • */
public class ArrayTest4 {
	public static void main(String[] args) {
		// a.定义一个数组,并对数组的元素进行静态初始化
		int[] arr = { 12, 45, 78, 11, 78 };

		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要查找的数据:");
		int value = sc.nextInt();

		int index = -1;

		// b.遍历数组,依次获取数组中每一个元素,和要找的数据进行比较
		// for (int x = 0; x < arr.length; x++) {
		// if (arr[x] == value) {
		// index = x;
		// break;
		// }
		// }

		System.out.println("index:" + getIndex(arr,value));
	}

	/*
	 * 数组元素查找(查找指定元素第一次在数组中出现索引)
	 * 
	 * 参数列表:int[] arr,int value 
	 * 返回值类型:int
	 */
	public static int getIndex(int[] arr, int value) {
		// 定义一个索引,如果找不到数据,我们一般直接返回一个负数
		int index = -1;
		
		for (int x = 0; x < arr.length; x++) {
			if (arr[x] == value) {
				index = x;
				break;
			}
		}
		
		return index;
	}
}

二分查找(折半查找)

/*

  • 二分数组查找
  • 分析:
  • a.定义最大索引,最小索引
  • b.计算出中间索引 最大索引+最小索引/2
  • c.拿中间值和要查找的值进行比较
  •  相等:就返回当前中间索引
    
  •  大于:左边找,max = mid-1
    
  •  小于:右边找,min = mid+1
    
  • 重写计算中间索引,回到b
  • */
public class ArrayTest5 {
	public static void main(String[] args) {
		int[] arr = { 12, 45, 54, 65, 87 };

		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要查找的数据:");
		int value = sc.nextInt();

		

		System.out.println("mid:" + getIndex(arr,value));
	}
	
/*
 * 二分数组查找
 * 
 * 参数列表:int[] arr,int value
 * 返回值类型:int
 * */
public static int getIndex(int[] arr,int value){
		// a.定义最大索引,最小索引
		int max = arr.length - 1;
		int min = 0;

		// b.计算出中间索引 最大索引+最小索引/2
		int mid = (max + min) / 2;

		while (arr[mid] != value) { // false
			if (arr[mid] > value) {
				max = mid - 1;
			} else if (arr[mid] < value) {
				min = mid + 1;
			}
			
			if(min>max){
				return -1;
			}

			mid = (max + min) / 2;
		}
		
		return mid;
	}
}

数组查表法

public static void main(String[] args) {
		// 定义一个字符串数组
		String[] strArray = { "星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数据(0~6)");
		int index = sc.nextInt();

		System.out.println("今天的日期是:" + strArray[index]);
	}

数组排序:

数组选择排序:
/*
* 数组选择排序
*
* 两个明确:
* 参数列表:int[] arr
* 返回值:void
* */

public static void selectSort(int[] arr){
		 for(int x=0;x<arr.length-1;x++){// 比较的轮次
			 for (int y = x+1; y < arr.length; y++) {// 和谁进行比较
				 if(arr[x] > arr[y]){
					 int temp = arr[x];
					 arr[x] = arr[y];
					 arr[y] = temp;
				 }
			 }
		}
	}

数组冒泡排序:

/*
* 数组冒泡排序
*
* 两个明确:
* 参数列表:int[] arr
* 返回值:void
* */

public static void bubbleSort(int[] arr){
		for (int x = 0; x < arr.length - 1; x++) {// 轮次
			for (int y = 0; y < arr.length - 1 - x; y++) {
				if (arr[y] > arr[y + 1]) {
					int temp = arr[y];
					arr[y] = arr[y + 1];
					arr[y + 1] = temp;
				}
			}
		}
	}

Array工具类

Sort()方法:对数组元素进行排序
toString()方法:返回该对象的字符串
binarySearch()方法:进行二分查找
-3》-1
80》-6
23》-5
不存在,一定是一个负数
Arrays.方法调用

总结:

无序查找:普通查找
有序查找:二分查找

二维数组

二维数组:其实激素一个元素为一维数组的数组
数组里面的元素可以是什么类型的?
基本数据类型,引用数据类型
数组又是一个引用类型的
格式一:
数据类型[][] 数组名(变量名)
定义一个二维数组类型的变量
格式二:
数据类型[] 数组名[]
int[] x[]
定义一个一维数组类型的一堆数组

初始化:
动态初始化
数据类型[][] 数组名 = new 数据类型[m][n]
m代表的是这个二维数组由多少个一维数组
n代表的是每一个一维数组的元素个数
静态初始化
数据类型[][] 数组名 = {{1,2},{1,2,3},{2,3}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值