【JavaSE_第一周】练习题总结

第一周练习总结
说明:尽量采用多种做法解决
1.使用三种方法实现变量交换

public class Test1Change{
	public static void main(String[] args){
		//1.使用三种方法实现变量交换
		int a=1;
		int b=2;
		
		//1)第三方变量实现交换
		/*
		int c=a;
		a=b;
		b=a;
		*/
		//2)数学运算实现交换
		/*
		a=a+b;
		b=a-b;
		a=a-b;
		*/
		//3)位运算实现交换
		
		a=a^b;
		b=a^b;
		a=a^b;
		
		System.out.println("a="+a);
		System.out.println("b="+b);
	}
}

2.设计一个实验证明&和&&的区别

public class Test2Prove{
	public static void main(String[] args){
		//设计一个实验证明&和&&的区别
		
		//方法一:使用自增自减实现
		int a=2;
		int b=3;
		//若后面运算了,那么a应该为3,若为2,说明未运算
		System.out.println(a>b&&a++>b);
		System.out.println(a);
		//若后面运算了,那么b应该为4,若为3,说明未运算
		System.out.println(a>b&a>b++);
		System.out.println(b);
		
		
		//方法二:用分母不为0做
		//若后面运行则会报错:Exception in thread "main" java.lang.ArithmeticException: / by zero,意思是分母不能为0
		//若后面不运行,则不会报错
		System.out.println(1>2&&2>(5/0));
		System.out.println(1>2&2>(5/0));
	}
}

3.从键盘录入输入3 个数a,b,c,按从大到小进行输出

public class Test3Sort{
	public static void main(String[] args){
		//3.从键盘录入输入3 个数a,b,c,按从大到小进行输出
		int a=3,b=6,c=5;
		
		//方法一:
		int max=a>b?a:b;
		max=max>c?max:c;
		
		int min=a<b?a:b;
		min=min<c?min:c;
		
		//获取mid方法一
		/*
		int mid=(a+b+c)-max-min;
		*/
		//获取mid方法二
		int mid;
		if(a<max&&a>min){
			mid=a;
		}else{
			mid=(b<max&&b>min)?b:c;
		}
		
		
		System.out.println("a,b,c三个数由大到小排列为:"+max+" "+mid+" "+min);
		
		//方法二:不需要定义三个变量,但过程复杂,穷举法
		if(a>=b){
			if(b>=c){
				//a>=b b>=c
				System.out.println("三个数从大到小排列:"+a+"   "+b+"    "+c);
			}else{
				//a>=b c>=b
				if(a>=c){
					System.out.println("三个数从大到小排列:"+a+"   "+c+"    "+b);
				}else{
					//a>=b c>=a
					System.out.println("三个数从大到小排列:"+c+"   "+a+"    "+b);
				}
			}
		}else{
			//b>=a
			if(a>=c){
				//b>=a a>=c
				System.out.println("三个数从大到小排列:"+b+"   "+a+"    "+c);
			}else{
				//b>=a c>=a
				if(b>=c){
					//b>=c c>=a
					System.out.println("三个数从大到小排列:"+b+"   "+c+"    "+a);
				}else{
					//c>=b c>=a b>=a
					System.out.println("三个数从大到小排列:"+c+"   "+b+"    "+a);
					
				}
			}
		}
		
		//方法二改版:最外层先获取最大值,第二层再获取第二大值,更好理解,穷举法
		if(a>=b&&a>=c){
			if(b>=c){
				System.out.println("三个数从大到小排列:"+a+"   "+b+"    "+c);
			}else{
				System.out.println("三个数从大到小排列:"+a+"   "+c+"    "+b);
			}
		}else if(b>=a&&b>=c){
			if(a>=c){
				System.out.println("三个数从大到小排列:"+b+"   "+a+"    "+c);
			}else{
				System.out.println("三个数从大到小排列:"+b+"   "+c+"    "+a);
			}
		}else{
			if(a>=b){
				System.out.println("三个数从大到小排列:"+c+"   "+a+"    "+b);
			}else{
				System.out.println("三个数从大到小排列:"+c+"   "+b+"    "+a);
			}
		}
		
	}
}

4.模拟ATM取款机的三次密码校验,当天达到3次输入密码错误,则提示“账号被冻结”,其他情况则提示还有多少次输入机会
注意:如果3次均输错,提示:账号已被冻结
如果1次或2次输错后退出,提示:欢迎下次再来
如果输对了密码,提示:随便取款

import java.util.*;

public class Test4ATM{
	public static void main(String[] args){
		//4.模拟ATM取款机的三次密码校验,当天达到3次输入密码错误,
		//则提示“账号被冻结”,其他情况则提示还有多少次输入机会
		Scanner input=new Scanner(System.in);
		int count=3;//剩余的机会
		String str;
		do{
			System.out.println("请输入密码:");
			int password=input.nextInt();
			if(password==1234){
				System.out.println("密码正确,请随便取款!");
				break;
			}else{
				count--;
				if(count<1){
					System.out.println("账号已被冻结,请携带身份证去银行办理");
					break;
				}else{
					System.out.println("密码错误,还剩余"+count+"次机会。如果继续请输入y,退出请按其他任意键:");
					str=input.next();
					if(!str.equals("y")){
						System.out.println("欢迎下次再来!");
						break;
					}
				}	
			}
		}while(str.equals("y"));
	}
}

5.做一个剪刀石头布的对战小程序

import java.util.*;

public class Test5Game{
	public static void main(String[] args){
		//5.做一个剪刀石头布的对战小程序
		Scanner input=new Scanner(System.in);
		System.out.println("经典游戏:剪刀石头布");
		System.out.println("游戏规则:1代表剪刀,2代表石头,3代表布");
		int computer=(int)(Math.random()*3)+1;
		//问题核心:剪刀与布的比较
		//方法一:穷举法
		System.out.println("请出拳:");
		int me=input.nextInt();
		switch(me){
			case 1:
				if(computer==1){
					System.out.println("你们战平了,电脑出的剪刀!");
				}else if(computer==2){
					System.out.println("你输了,电脑出的石头!");
				}else{
					System.out.println("你赢了,电脑出的布!");
				}
				break;
			case 2:
				if(computer==1){
					System.out.println("你赢了,电脑出的剪刀!");
				}else if(computer==2){
					System.out.println("你们战平了,电脑出的石头!");
				}else{
					System.out.println("你输了,电脑出的布!");
				}
				break;
			case 3:
				if(computer==1){
					System.out.println("你输了,电脑出的剪刀!");
				}else if(computer==2){
					System.out.println("你赢了,电脑出的石头!");
				}else{
					System.out.println("你们战平了,电脑出的布!");
				}
				break;
		}
		
		//方法二
		if(computer==1&&me==3||computer==3&&me==1){
			if(computer==1&&me==3){
				System.out.println("你输了,电脑出的"+computer+"!");
			}else{
				System.out.println("你赢了,电脑出的"+computer+"!");
			}
		}else if(computer==me){
			System.out.println("你战平了,你们出的一样!");
		}else{
			if(computer<me){
				System.out.println("你赢了,电脑出的"+computer+"!");
			}else{
				System.out.println("你输了,电脑出的"+computer+"!");
			}
		}
	}
}

6.素数也叫质数.是除了1和其本身,不能被其他正整数整除的正整数.1不是素数.
a)例如:2,3,5,7,11,13,17,19,23…
a)写一个方法判断该数是否为素数(设计成一个方法 返回类型boolean)
b)输出某个范围内的所有素数,比如100-200之间。

public class Test2SuShu{
	public static void main(String[] args){
		/*
		if(false){
			System.out.println("搞不定");
		}
		*/
		/*
		for(int i=1;i<=20;i++){
			//如果是素数,就把他打印出来
			//if(isSuShu(i) == true){
			if(isSuShu(i)){
				System.out.print(i+" ");
			}
		}
		*/
		showSuShu(20,1);
	}
	
	public static void showSuShu(int start,int end){
		//start>end 交换
		for(int i=start;i<=end;i++){
			//如果是素数,就把他打印出来
			//if(isSuShu(i) == true){
			if(isSuShu(i)){
				System.out.print(i+" ");
			}
		}
	}
	
	public static boolean isSuShu(int n){
		//素数也叫质数.是除了1和其本身,
		//不能被其他正整数整除的正整数.
		//1不是质数也不是合数
		if(n == 1){
			return false;
		}
		//6 2-5
		//在2到当前数-1的范围内
		for(int i=2;i<=n-1;i++){
			//只要有一个数能被整除
			if(n%i == 0){
				//说明不是素数
				return false;
			}
		}
		//遍历结束之后
		//还是没有其他的数可以被整除
		//说明是素数
		return true;
	}
}

7.数组的查找(两种:普通法,二分法);.数组排序(两种:冒泡排序,选择排序)

import java.util.Arrays;
public class Test6Search{
	public static void main(String[] args){
		//7.数组的查找(两种:普通法,二分法)
		int[] arr={2,6,1,5,9,23};
		int num=6;
		//普通法查找
		for(int i=0;i<arr.length;i++){
			if(num==arr[i]){
				System.out.println("要查询的数"+num+"是数组中的第"+(i+1)+"个");
			}
		}
		
		//二分法查找:必须是有序数组
		
		
		//8.数组排序(两种:冒泡排序,选择排序)
		//冒泡排序
		/*
		for(int j=0;j<arr.length-1;j++){
			for(int i=0;i<arr.length-1-j;i++){
				if(arr[i]>arr[i+1]){
					arr[i]=arr[i+1]+arr[i];
					arr[i+1]=arr[i]-arr[i+1];
					arr[i]=arr[i]-arr[i+1];
				}
			}
		}
		*/
	
		
		//二分法查找
		int max=arr.length-1;
		int min=0;
		int mid=(max+min)/2;
		
		for(int i=1;i<arr.length;i++){
			if(arr[mid]==num){
				System.out.println("要查询的数"+num+"是数组中的第"+(mid+1)+"个");
				break;
			}else if(arr[mid]>num){
				max=mid-1;	
			}else{
				min=mid+1;
			}
			mid=(max+min)/2;
		}
		
		//选择排序
		/*
		for(int j=0;j<arr.length-1;j++){
			int index=j;
			for(int i=j+1;i<arr.length;i++){
				if(arr[index]>arr[i]){
					index=i;
				}
				
			}
			
			int temp=arr[j];
			arr[j]=arr[index];
			arr[index]=temp;
		}
		*/
		
		System.out.println(Arrays.toString(arr));
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值