第3章 方法与数组(多维数组:冒泡排序、选择排序、插入排序、二分(折半)查找算法)

9. 方法与函数

1.方法打印三角形
import java.util.Scanner;
class Function{
	public static void main(String[] args) {
		System.out.println("输入想要打印*的行数");
		Scanner sc = new Scanner(System.in);
		int line = sc.nextInt();
		printStar(line);
	}
	public static void printStar(int line){
		for(int i=0;i<=line;i++){
			for(int j=0;j<=i;j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
2.方法判断是不是闰年
import java.util.Scanner;
class JudgeLeepYear1 {
	public static void main (String[] args) {
		System.out.println("请输入一个年份:");
		Scanner sc = new Scanner(System.in);
		int year = sc.nextInt();
		boolean bl = judgeleepyear(year);
		if(bl) {
			System.out.println(year + "年是闰年√");			
		}else {
			System.out.println(year + "年不是闰年×");
		}
	}
	public static boolean judgeleepyear(int year) {
		if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
			return true;
			//System.out.println(year + "年是闰年√");
		}else{
			return false;
			//System.out.println(year + "年不是闰年×");
		}
	}
}
数组

数组的赋值方式:

1.使用默认的初始值来初始化数组中的每一个元素

数组元素类型[]数组名 = new 数字元素类型[数组中元素的个数(数组的长度)]

如 int[] scores = new int[3];

2.先声明,然后再赋予默认的初始值

数字元素类型[]数组名;

数组名=new 数组元素类型[数组中元素的个数(数组的长度)]

如 int[] scores ;

scores = new int[3];

3.先声明,然后再使用指定的值进行初始化

数组元素类型[]数组名=new 数组元素类型[]{元素1,元素2,…};

如 int[] scores = new int[]{56,78,98};

4.将第三种写法可以简化为(使用数组常量值给数组进行赋值)

数组元素类型[]数组名 = {元素1,元素2,…};

如 int[] scores = {56,78,98};

数组的遍历:

class ArrayList {
	public static void main(String[] args) {
		int[] nums = new int[10];
		for(int i = 1;i <= nums.length;i++){
			System.out.println("nums["+(i-1)+"]="+i);				
		}
		 int[] score = new int[]{89,8989,9,898,98,99};
		for(int x:score){
			System.out.println(x);  
		}
	}		
}
1.判断一个随机数组是否有输入的数
import java.util.*;
class test {
	public static void main(String[] args) {
		int[] nums = new int[5];
		int len = nums.length;
		Random r = new Random();
		for(int i = 0;i < len;i++){
			nums[i] = r.nextInt(100);
		}
	
		System.out.println("输入一个数:");
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		boolean flag = false;
		System.out.println("生成的随机数是:");
		for(int x:nums) {
			System.out.println(x);
			if(num == x){
				flag = true;
				break;
			}
		}
		if(flag){
			System.out.println("有你输入的数");
		}else{
			System.out.println("没有你输入的数");
		}
		
	}
}
2.打印
            A
          B B B 
        C C C C C 
      D D D D D D D
    E E E E E E E E E
  F F F F F F F F F F F
G G G G G G G G G G G G G 
import java.util.*;
class test {
	public static void main(String[] args) {
		char[] cs = {'A','B','C','D','E','F','G'};
		int len = cs.length;
		
		for(int i = 1;i <= len;i++){
			for(int j = i;j < len;j++){
				System.out.print(" ");
			}
			for(int j = 1;j <= i*2-1;j++){
				System.out.print(cs[i-1]);
			}
			System.out.println();
		}		
	}
}

多维数组

3.有3个班级各3名学员参赛,纪录每个学员的成绩,并计算每个班级的平均分
import java.util.*;
class test {
	public static void main(String[] args) {	
		int [][] scores = {{78,79,80},{88,89,90},{56,57,58}};
		int classLen = scores.length;
		for(int i = 0;i < classLen;i++) {
			int sum = 0;
			int count = scores[i].length;
			for(int j = 0;j < count;j++){
				sum += scores[i][j];
			}
			int avg = sum/count;
			System.out.println("第"+(i+1)+"班的平均成绩是:"+avg);
		}
		
	}
}
4.求最大值最小值算法
class maxmin {
	public static void main(String[] args) {
		int[] num = {12,23,434,3,7,5555,56,78,0};
		int max = max(num);
		System.out.println("最大值是:"+max);
		int min = min(num);
		System.out.println("最小值是:"+min);
	}
	public static int max(int[] num){
		int max = num[0];
		int len = num.length;
		for(int i = 1;i < len;i++) {
			if(num[i] > max) {
				num[i] = num[i]+max;
				max = num[i]-max;
				num[i] = num[i]-max;
			}
		}
		return max;
	}
	public static int min(int[] num){
		int min = num[0];
		int len = num.length;
		for(int i = 1;i < len;i++) {
			if(num[i] < min) {
				num[i] = num[i]+min;
				min = num[i]-min;
				num[i] = num[i]-min;
			}
		}
		return min;
	}
}
5. 冒泡排序(比较相邻的元素,如果第一个比第二个大,就交换它们两个,对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重读以上的步骤,除了最后一个。持续每次对越来越少的元素重读上面的步骤,直到没有任何一对数字需要比较。相同元素的前后顺序并没有改变)————冒泡排序是一种稳定排序算法
class maopao {
	public static void main(String[] args) {
		int[] nums = {34,4,56,17,90,65};
		int len = nums.length;
		for(int i = 0;i < len-1;i++) {//外循环控制轮数,比较轮数等于数列的长度-1;
			for(int j = 0;j < len-1-i;j++) {
				if(nums[j]>nums[j+1]){
					nums[j] = nums[j]+nums[j+1];
					nums[j+1] = nums[j]-nums[j+1];
					nums[j] = nums[j]-nums[j+1];
				}				
			}
		}
		System.out.println("冒泡排序结果:");
		for(int x:nums){
			System.out.println(x);
		}
		
	}
}
/*
34 4 56 17 90 65

4 34 17 56 65 90	//第一轮 5次

4 17 34 56 65		//第二轮 4次

4 17 34 56			//第三轮 3次

4 17 34 			//第四轮 2次

4 17				//第五轮 1次
*/  
6. 选择排序算法(每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已经排好的数列的最后,直到全部待排序的数据元素排序完毕)————选择排序是不稳定的排序方法
class xuanze {
	public static void main(String[] args) {
		int[] nums = {34,4,56,17,90,65};
		int minIndex = 0;//用于纪录每次比较的最小值下标
		//控制轮数
		for(int i = 0;i < nums.length-1;i++) {
			minIndex = i;//每轮假设一个最小值下标
			for(int j = i+1;j < nums.length;j++) {
				if(nums[minIndex] > nums[j]) {
					minIndex = j;
				}
			}
			//判断需要交换的数下标是否为自己
			if(minIndex != i) {
				nums[minIndex] = nums[minIndex]+nums[i];
				nums[i] = nums[minIndex]-nums[i];
				nums[minIndex] = nums[minIndex]-nums[i];
			}
		}
		System.out.println("选择排序结果:");
		for(int n: nums) {
			System.out.println(n);
		}		
	}
}
/*
34 4 56 17 90 65
4 34 56 17 90 65 第一轮 5次
4 17 56 34 90 65 第二轮 4次
4 17 34 56 90 65 第三轮 3次
4 17 34 56 90 65 第四轮 2次
4 17 34 56 65 90 第五轮 1次
*/
7. 插入排序算法(基本思想:每步将一个待排序的纪录,按其顺序码大小插入到前面已经排序的子序列的合适位置(从后向前找到合适的位置后插入),直到全部插入排序完为止)
class Insert {
	public static void main(String[] args) {
		int[] nums = {34,4,56,17,90,65};
		//控制比较的轮数
		for(int i = 1;i < nums.length;i++) {
			int temp = nums[i];//记录操作数
			int j = 0;
			for(j = i-1;j >= 0;j--) {
				if(nums[j] > temp) {
					nums[j+1] = nums[j];
				}else{
					break;
				}
			}
			if(nums[j+1] != temp) {
				nums[j+1] = temp;
			}
		}
		System.out.println("插入排序结果:");
		for(int n: nums) {
			System.out.println(n);
		}
	}
}	

在这里插入图片描述

8. 二分(折半)查找算法 (前提是在已经排好序的数组中,通过将待查找的元素与中间索引值对应的元素进行比较,若大于中间索引值对应的元素,去右半部分查找,否则,去左半部分查找。以此类推直到找到为止找不到返回一个负数)
import java.util.Scanner;
class erfenSearch {
	public static void main(String[] args) {
		int[] nums = {10,20,50,88,90};
		System.out.println("输入你想要查找的数:");
		Scanner sc = new Scanner(System.in);
		int get = sc.nextInt();
		int index = binarySearch(nums,get);
		System.out.println("你要查找的数在数组中第"+(index+1)+"个");
	}
	public static int binarySearch(int[] nums,int key){
		int start = 0;
		int end = nums.length-1;
		
		while(start <= end) {
			int middle = (start+end)/2;
			if(nums[middle] > key) {
				end = middle-1;
			}else if(nums[middle] < key) {
				start = middle+1;
			}else{
				return middle;
			}
		}
		return -1;
	}
}	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值