JavaSE基础篇

mac2025-12-08  10

数组的算法

一、数组基本算法:

1.1数组的求和

//静态声明数组 int[] arr={1,3,5,7,9}; //第一步:遍历数组,得到数组的每一个元素,把每一个元素进行累加 int sum=0; //遍历数组 /如果我们使用的是IDEA开发,那么有一个快捷键:arr.fori可以直接输出for循环的内容 for(int i=0;i<arr.length;i++){ sum=sum+arr[i]; } //输出sum System.out.println(sum);

1.2数组求最大值,最小值

int[] arr={1,3,2,5,4}; //这个和打擂台相似,先要有一个擂主 int max=arr[0]; int min=arr[0]; //遍历数组 for(int i=0;i<arr.length;i++){ if(max<arr[i]){ max=arr[i]; } if(min>arr[i]){ min=arr[i]; } } System.out.println(max); System.out.println(min);

1.3数组的复制

int[] arr={1,3,5,7,9}; //先定义一个空的数组(确定数组的长度) int[] arr1=new int[arr.length]; //然后遍历arr,得到arr的每一个元素,再赋值给arr1 for(int i=0;i<arr.length;i++){ arr1[i]=arr[i]; } //遍历复制完之后的arr1 for(int i=0;i<arr1.length;i++){ System.out.print(arr1[i]+"\t"); }

1.4数组的合并

//需求:将两个数组合为一个数组 int[] arr={1,3,5}; int[] brr={7,9,11,13}; //分析:定义一个空的数组,接收两个数组的值,确定长度arr.length+brr.length int[] crr=new int[arr.length+brr.length]; for(int i=0;i<arr.length;i++){ crr[i]=arr[i]; } for(int i=0;i<brr.length;i++){ crr[i+arr.length]=brr[i]; } for(int i=0;i<crr.length;i++){ System.out.print(crr1[i]+"\t"); }

1.5数组的反转

//第一种方法:倒着遍历 int[] arr={2,4,6,8,10}; for(int i=arr.length-1;i>=0;i--){ System.out.print(arr[i]); } //第二种方法:交换思想 arr: 2|4|6|8|10 下标: 0|1|2|3|4 arr[0]与arr[4]进行交换 arr[1]与arr[3]进行交换 int[] arr={2,4,6,8,10}; for(int start=0,end=arr.length-1;start<end;start++,end--){ //arr[start]与arr[end]进行交换 int c=arr[start]; arr[start]=arr[end]; arr[end]=c; } for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+"\t"); }
二、数组高级算法:

2.1数组的增删改查

//需求:键盘录入一个数,查找这个数是否存在,存在的话输出下标,如果不存在给出提示“此数据不存在” import java.util.*; int[] arr={1,3,5,7,9}; System.out.println("请输入一个数:"); Scanner sc=new Scanner(System.in); int num=sc.nextInt(); //进行查找的步骤 for(int i=0;i<arr.length;i++){ if(arr[i]==num){ System.out.println("角标为:"+i); }else{ System.out.println("查无此数据"); } } //输出结果 请输入一个数:1 角标为0 查无此数据 查无此数据 查无此数据 查无此数据 //那么如何改进呢?? 这里涉及一种思想:先默认此数据没有找到,定义此数据的角标是一个负数 //改进后的代码: import java.util.*; int[] arr={1,3,5,7,9}; System.out.println("请输入一个数:"); Scanner sc=new Scanner(System.in); int num=sc.nextInt(); int index=-1; //关键的一步 //进行查找的步骤 for(int i=0;i<arr.length;i++){ if(arr[i]==num){ index=i; System.out.println("角标为:"+index); } } if(index==-1){ System.out.println("查无此数据"); } //输出结果 请输入一个数:1 角标为0 查找5第一次出现时的角标 int[] arr={1,3,5,6,5,9}; int num=5; //默认没有找到的情况 int index=-1; //遍历数组 for(int i=0;i<arr.length;i++){ //判断数组中的每一个元素是否和num相同 if(arr[i]==num){ index=i; System.out.println("角标为:"+index); break; //找到元素第一次出现的位置后,跳出循环 } } if(index==-1){ System.out.println("查无此数据"); } //输出结果:角标为2

2.2 排序--冒泡算法

int[] arr={2,6,3,8,1}; //需求:按照从小到大的顺序排列 //什么是冒泡排序:每两个相邻元素都要进行比较,然后用到一个交换思想 if(arr[0]>arr[1]) 交换位置 if(arr[1]>arr[2]) 交换位置 if(arr[2]>arr[3]) 交换位置 if(arr[3]>arr[4]) 交换位置 //结论:四个if语句走完,数组的最大值会到最右边 if(arrr[0]>arr[1]){ int c=arr[0]; arr[0]=arr[1]; arr[1]=c; } if(arrr[1]>arr[2]){ int c=arr[1]; arr[1]=arr[2]; arr[2]=c; } if(arrr[2]>arr[3]){ int c=arr[2]; arr[2]=arr[3]; arr[3]=c; } if(arrr[3]>arr[4]){ int c=arr[3]; arr[3]=arr[4]; arr[4]=c; } //这里注意:if(arr[4]>arr[5]) //角标从0-4,如果出现5就会出现角标越界的情况 //四个if合而为一,如下所示 for(int i=0;i<arr.length-1;i++){ int c=arr[i]; arr[i]=arr[i+1]; arr[i+1]=c; } //第一次遍历之后,数组为 2,3,6,1,8 //这时候还没完成我们的需求:从小到大排序,而我们第一遍走完之后,数组中的最大值到了最右边 //倒数第二大的值如果想往最右边的倒数第二个位置靠,就再走三个if语句,加上最开始的一个if语句,一个四个if语句 第一次走完:2|3|6|1|8 第二次走完:2|3|1|6|8 第三次走完:2|1|3|6|8 第四次走完:1|2|3|6|8 for(int i=1;i<arr.length;i++){ for(int j=0;j<arr.length-1;j++){ int c=arr[j]; arr[j]=arr[j+1]; arr[j+1]=c; } } //输出排完序之后的数组: for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+"\t"); }

课后作业

package com.homework; /*1、歌唱比赛打分,各评委的分分别为{10, 9, 9.5, 9.4, 9.7, 9.2, 8.8, 8}, 要求去掉最高分和最低分后求平均分。*/ public class Demo_Hw1 { public static void main(String[] args) { double[] arr={10,9,9.5,9.4,9.7,9.2,8.8,8}; for (int i = 1; i < arr.length; i++) { for (int j = 0; j < arr.length-1; j++) { if(arr[j]>arr[j+1]){ double c=arr[j]; arr[j]=arr[j+1]; arr[j+1]=c; } } } double[] arr1=new double[arr.length-2]; double sum=0; for (int i = 1; i < arr.length-1; i++) { arr1[i-1]=arr[i]; } for (int i = 0; i < arr1.length; i++) { sum=sum+arr1[i]; } System.out.println(sum/arr1.length); } } package com.homework; /*2、找出以下数组的最大值、最小值{10,9,12,15,4,3}*/ public class Demo_Hw2 { public static void main(String[] args){ int[] arr={10,9,12,15,4,3}; int max=arr[0]; int min=arr[0]; for (int i = 0; i < arr.length; i++) { if(max<arr[i]){ max=arr[i]; } if(min>arr[i]){ min=arr[i]; } } System.out.println(max+"\t"+min); } } package com.homework; /*2、找出以下数组的最大值、最小值{10,9,12,15,4,3}*/ public class Demo_Hw2 { public static void main(String[] args){ int[] arr={10,9,12,15,4,3}; int max=arr[0]; int min=arr[0]; for (int i = 0; i < arr.length; i++) { if(max<arr[i]){ max=arr[i]; } if(min>arr[i]){ min=arr[i]; } } System.out.println(max+"\t"+min); } } package com.homework; import java.util.Scanner; /*4、键盘录入8个double类型数字放数组里面,求最大值、最小值*/ public class Demo_Hw4 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); double[] arr=new double[3]; for (int i = 0; i < arr.length; i++) { System.out.println("请输入第"+(i+1)+"个数"); arr[i]=sc.nextDouble(); } double max=arr[0]; double min=arr[0]; for (int i = 0; i < arr.length; i++) { if(max<arr[i]){ max=arr[i]; } if(min>arr[i]){ min=arr[i]; } } System.out.println(max+"\t"+min); } } package com.homework; /*5、double[] arr={10.3,8,6,4.2,2},请用数组的算法将这个数组反序打印出来(两种方法)。*/ public class Demo_Hw5 { public static void main(String[] args) { double[] arr={10.3,8,6,4.2,2}; /*for(int i=arr.length-1;i>=0;i--){ System.out.print(arr[i]+"\t"); }*/ for(int i=0,j=arr.length-1;i<j;i++,j--){ double c=arr[i]; arr[i]=arr[j]; arr[j]=c; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+"\t"); } } } package com.homework; import java.util.Scanner; /*6、定义一个长度为6的整型数组,输入数据,然后排序(按照从大到小的顺序)*/ public class Demo_Hw6 { public static void main(String[] args) { int[] arr=new int[6]; Scanner sc=new Scanner(System.in); for (int i = 0; i < arr.length; i++) { System.out.println("请输入第"+(i+1)+"个数字"); arr[i]=sc.nextInt(); } for (int i = 1; i < arr.length; i++) { for (int j = arr.length-1; j >0; j--) { if(arr[j]>arr[j-1]){ int c=arr[j]; arr[j]=arr[j-1]; arr[j-1]=c; } } } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+"\t"); } } } package com.homework; import java.util.Scanner; /*7、老师查寝,寝室住了六个同学,定义一个数组循环接收六个同学的名字,若查到有此 同学,则输出此人的床位号(对应数组的下标),若寝室没有改同学,则给出提示:查无此人*/ public class Demo_Hw7 { public static void main(String[] args) { String[] arr=new String[6]; for (int i = 0; i < arr.length; i++) { System.out.println("请输入第"+(i+1)+"个同学的名字"); Scanner sc=new Scanner(System.in); arr[i]=sc.next(); } int index=-1; System.out.println("请输入一个同学的名字"); Scanner sc=new Scanner(System.in); String name=sc.next(); for (int i = 0; i < arr.length; i++) { if(name.equals(arr[i])){ index=i; System.out.println("床号"+index); break; } } if(index==-1){ System.out.println("查无此人"); } } }
最新回复(0)