java第三课

在这里插入图片描述
有了方法可以避免重复
在这里插入图片描述

/**
 * 打印星星
 */
package class2;
import java.util.Scanner;
public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		System.out.println("请输入要打印星星的行数:");
		int i = input.nextInt();
		//在方法调用时传入的参数称为实参,此处i就是实参
		printStar(i);
	}
	//在方法定义时传入的参数称为形参,此处line是形参
	public static void printStar(int line) {
		for(int i = 1;i<=line;i++) {
			for(int j = 1;j<=i;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}


在这里插入图片描述

/**
 * 判断是否是闰年
 */
package class2;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		boolean bool = isRunNian(2016);
			if(bool) {
				System.out.println("是闰年");
			}
			else {
				System.out.println("不是润年");
			}
	}
	public static boolean isRunNian(int year) {
		if((year%4==0&&year%100!=0)||year%400==0) {
			return true;
		}
		else {
			return false;
		}
	}

}

/**
 * 打印三角形的星星
 */
package class2;
import java.util.Scanner;
public class Test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		System.out.println("请输入打印星星的行数:");
		int i = input.nextInt();
		printStar(i);
	}
	public static void printStar(int line) {
		for(int i = 1;i<=line;i++) {
			for(int j = i;j<=line;j++) {
				System.out.print(" ");
			}
			for(int j = 1;j<=2*i-1;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

在这里插入图片描述

/**
 * 方法重载:在一个类中,方法名相同,参数列表不同,返回值不能作为重载的条件
 */
package class2;
public class Test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double result = Add(1.12,9.12);
		int result2 = Add(2,3);
		System.out.println(result);
		System.out.println(result2);
	}
	public static int Add(int a,int b) {
		return (a+b);
	}
	public static double Add(double a,double b) {
		return (a+b);
	}
	public static float Add(float a,float b) {
		return (a+b);
	}
}

在这里插入图片描述
在这里插入图片描述

/**
 * 4种定义数组的方法
 */
package class2;

public class Test5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//第一种
		int[] scores = new int[5];
		/*scores[0] = 1;
		scores[1] = 2;
		scores[2] = 3;
		scores[3] = 4;
		scores[4] = 5;*/
		for(int i = 0;i<5;i++) {
			scores[i]=i+1;
			System.out.print(" "+scores[i]);
		}
		System.out.println();
		//第二种
		int[] scores1;
		scores1 = new int [5] ;
		for(int i = 0;i<5;i++) {
			System.out.print(" "+scores1[i]);
		}
		System.out.println();
		//第三种
		int[] scores2 = new int[] {6,7,8,9,10};
		for(int i = 0;i<5;i++) {
			System.out.print(" "+scores2[i]);
		}
		System.out.println();
		//第四种
		int[] scores3 = {1,2,3,4,5};
		for(int i = 0;i<5;i++) {
			System.out.print(" "+scores3[i]);
		}
		System.out.println();
		//数组一定要有长度(属性length)
		System.out.println("数组的长度为: "+(scores.length));
	}

}

/**
 * 数组的高效遍历
 */
package class2;

public class Test6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] scores = {1,2,3,4,5};
		int len = scores.length;
		for(int i = 0;i<len;i++) {
			System.out.print(" "+scores[i]);
		}
		//直接打印scores打印的是存放数组的地址
		System.out.println(scores);
		//jdk1.5后新增特性;数组scores中从0到最后一个数赋给x,输出x
		for(int x:scores){
			System.out.print(x+" ");
		}
	}

}

/**
 * 可变参数
 */
package class2;

public class Test7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] score = {1,2,3,4,5};
		
		print(score);
		print2(12,23,34,45,56);
		print3(6,7,8,9,10);
	}
	public static void print(int[] x) {
		int len = x.length;
		for(int i = 0;i<len;i++) {
			System.out.print(" "+(x[i]));
		}
		System.out.println();
	}
	//jdk1.5可变参数只能是参数列表中的最后一个
	//可变参数作为数组使用
	public static void print2(int... x) {
		int len = x.length;
		for(int i = 0;i<len;i++) {
			System.out.print(" "+(x[i]));
		}
		System.out.println();
	}
	
	public static void print3(int y,int... x) {
		//这样就把6赋给y,其他数赋给x[]
		System.out.println(y);
		int len = x.length;
		for(int i = 0;i<len;i++) {
			System.out.print(" "+(x[i]));
		}
	}
}

/**
 * 异常测试
 * 1.空指针异常
 * 2. 数组下标越界
 */
package class2;

public class Test8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] scores = {1,2,3,4,5};
		print(scores);
		//空指针异常java.lang.NullPointerException
		//当一个变量为null(没赋值)时调用该变量的属性和方法
		print(null);
		// 数组下标越界java.lang.ArrayIndexOutOfBoundsException
		print2(scores);
	}
	public static void print(int[] x) {
		int len = x.length;
		for(int i = 0;i<len;i++) {
			System.out.print(" "+x[i]);
		}
	}
	public static void print2(int[] x) {
		int len = x.length;
		for(int i = 0;i<=len;i++) {
			//此处0<=i<=len,比0<=i<len多了一个数,所以下表越界了
			System.out.print(" "+x[i]);
		}
	}
}

在这里插入图片描述
数组是引用类型,一个地址指向堆内存里的一块空间,空间里放数据
基本数据类型是存在栈里

/**
 * 猜数游戏
 */
package class2;
import java.util.Scanner;
import java.util.Random;
public class Test9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数(10以内):");
		int num = input.nextInt();
		
		int[] nums = new int[5];
		int len = nums.length;
		Random r = new Random();
		for(int i = 0;i<len;i++) {
			nums[i] = r.nextInt(10);
		}
		boolean flag = false;
		for(int i:nums) {
			if(num == i) {
				flag = true;
			}
		}
		if(flag) {
			System.out.println("恭喜你,猜对了");
		}
		else {
			System.out.println("猜错了,再接再厉");
		}
		System.out.println("随机生成的数为:");
		for(int x:nums) {
			System.out.print(" "+x);
		}
	}

}

/**
 * 打印正三角形
 */
package class2;

public class Test10 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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();
		}
	}

}

/**
 * 二维数组:java中没有真正的多维数组,多维数组的表示形式是数组中的元素,还是数组
 * 三个班级三个人参加比赛,求每个班的平均成绩
 */
package class2;
public class Test11 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[][] scores = {{78,79,80},{86,87,88},{77,78,79}};
		int classLen = scores.length;
		for(int i =0;i<classLen;i++) {
			int sum = 0;
			int len = scores[i].length;
			for(int j = 0;j<len;j++) {
				sum+=scores[i][j];
			}
			int avg = sum/len;
			System.out.println("第"+(i+1)+"班的平均分为:"+avg);
		}
	}
}

/**
 * 求最大值,最小值
 */
package class2;

public class Test12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] sum = {2,56,779,3,56,43};
		int result = max(sum);
		System.out.println("最大值为"+result);
		int result2 = min(sum);
		System.out.println("最小值为"+result2);
	}
	public static int max(int[] x) {
		int len = x.length;
		int Max = x[0];
		for(int i = 0;i<len;i++) {
			if(x[i]>Max) {
				Max = Max+x[i];
				x[i] = Max - x[i];
				Max = Max - x[i];
			}
		}
		return Max;
	} 
	public static int min(int[] x) {
		int len = x.length;
		int Min = x[0];
		for(int i = 0;i<len;i++) {
			if(x[i]<Min) {
				Min = Min+x[i];
				x[i] = Min - x[i];
				Min = Min - x[i];
			}
		}
		return Min;
	} 
}

在这里插入图片描述
在这里插入图片描述

/**
 * 冒泡排序
 */
package class2;

public class Test13 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] nums = {2,446,67,8,23,556,34,56};
		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];
				}
			}
		}
		for(int x:nums) {
			System.out.println(x);
		}
	}
}

稳定:两个数相同时排序后位置不变
不稳定:两个相同的数排序后位置发生改变
在这里插入图片描述
在这里插入图片描述

/**
 * 选择排序
 */
package class2;

public class Test14 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] nums = {2,446,67,8,23,556,34,56};
		int len = nums.length;
		for(int i = 0;i<len-1;i++) {
		//外层循环控制轮数
			int minIndex = i;//假设一个最小的数下标,用于表示最小值下标
			for(int j = i+1;j<len;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];
			}	
		}
		for(int x:nums) {
			System.out.println(x);
		}
	}
}

在这里插入图片描述

/**
 * 直接插入排序
 */
package class2;

public class Test15 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] nums = {2,446,67,8,23,556,34,56};
		for(int i = 1;i<nums.length;i++) {
			int j = 0;
			int temp = nums[i];//记录操作数
			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;
			}
		}
		for(int x:nums) {
			System.out.println(x);
		}	
	}
}

在这里插入图片描述

/**
 * 二分查找
 */
package class2;

public class Test16 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] nums = {2,446,67,8,23,556,34,56};
		int result = binarySearch(nums,3);
		System.out.println("如果找到返回数字的下标,没找到就返回-1");
		System.out.println(result);
	}
	public static int binarySearch(int[] num,int key) {
		int start = 0;//开始下标
		int end = num.length-1;//结束下标
		while(start<=end) {
			int middle = (start + end)/2;//>>1
			if(num[middle]>key) {
				end = middle-1;
			}else if(num[middle]<key) {
				start = middle +1;
			}else {
				return middle;
			}
		}
		return -1;
	}
}

在这里插入图片描述

/**
 * 测试Arrays类
 */
package class2;
import java.util.Arrays;
public class Test17 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] nums = {23,45,67,232,98,65};
		//二分查找
		int index = Arrays.binarySearch(nums, 45);
		System.out.println("找到的数的下标是:"+index);
		
		//输出数组
		for(int n:nums) {
			System.out.println(n);
		}
		
		//数组转化成字符串输出
		System.out.println(Arrays.toString(nums));
		
		//排序
		int[] nums2 = {12,23,34,34,1,45,67};
		Arrays.sort(nums2);
		System.out.println(Arrays.toString(nums2));
		
		//数组的复制
		//将长度为7的nums2数组的所有数都复制给nums3
		//但是nums3长度是10,所以后面三个数是0
		//[1, 12, 23, 34, 34, 45, 67]
		//[1, 12, 23, 34, 34, 45, 67, 0, 0, 0]		
		int[] nums3 = Arrays.copyOf(nums2, 10);
		System.out.println(Arrays.toString(nums3));
		
		//数组的复制
		int[] newNum = new int[nums2.length];
		System.arraycopy(nums2, 0, newNum, 0, nums2.length);
		System.out.println(Arrays.toString(newNum));
		//效率:System.arraycopy  >  Arrays.copyOf  >  for循环复制
		
		//判断两个数组的值是否相等(相等true;不等false)
		System.out.println(Arrays.equals(nums, nums2));
	
		//填充数组(全部填充成0:[0, 0, 0, 0, 0, 0, 0])
		Arrays.fill(newNum, 0);
		System.out.println(Arrays.toString(newNum));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值