Java--综合练习

1.买飞机票

  • 机票价格按淡季和旺季、头等舱和经济舱收费,输入机票原价、月份、和头等舱或经济舱。
  • 按以下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折;淡季(11月到来年4月)头等舱7折,经济舱6.5折。
import java.util.Scanner;
public class test01 {
  public static void main(String args[]) {
	  
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入机票原价:");
	int ticket = sc.nextInt();
	
	System.out.println("请输入当前的月份:");
	int month = sc.nextInt();
	
	System.out.println("请输入当前购买的舱位类别:0--头等舱  1--经济舱");
	int seat = sc.nextInt();
	
	if(month >=5 && month <=10) {
		if(seat==0) {
			ticket = (int)(ticket *0.9);//强制转类型
		}else if(seat==1) {
			ticket = (int)(ticket *0.85);
		}else {
			System.out.println("输入舱位类型不合理");
		}
	}else if((month >=1 && month <=4) ||(month >=11 && month <=12) ) {
		if(seat==0) {
			ticket = (int)(ticket *0.7);//强制转类型
		}else if(seat==1) {
			ticket = (int)(ticket *0.65);
		}else {
			System.out.println("输入舱位类型不合理");
		}
	}
	else {
		System.out.println("输入月份不合理");
	}
	
	System.out.println("您的折后机票价为:"+ticket);
	
  }

}

输出结果:

请输入机票原价:
255
请输入当前的月份:
12
请输入当前购买的舱位类别:0--头等舱  1--经济舱
1
您的折后机票价为:165

写一个Getprice方法解决:

import java.util.Scanner;
public class test01 {
  public static void main(String args[]) {
	  
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入机票原价:");
	int ticket = sc.nextInt();
	
	System.out.println("请输入当前的月份:");
	int month = sc.nextInt();
	
	System.out.println("请输入当前购买的舱位类别:0--头等舱  1--经济舱");
	int seat = sc.nextInt();
	
	if(month >=5 && month <=10) {
		   ticket =Getprice(ticket,seat,0.9,0.85);
	}else if((month >=1 && month <=4) ||(month >=11 && month <=12) ) {
		   ticket =Getprice(ticket,seat,0.7,0.65);
	}
	else {
		System.out.println("输入月份不合理");
	}
	 
	System.out.println("您的折后机票价为:"+ticket);
	
  }

  public static int Getprice(int ticket,int seat,double v0,double v1) {
	  if(seat==0) {
			ticket = (int)(ticket *v0);//强制转类型
		}else if(seat==1) {
			ticket = (int)(ticket *v1);
		}else {
			System.out.println("输入舱位类型不合理");
		}
	  return ticket; 
  }
}

2.找质数

判断101~200之间有多少个素数,并输出。(素数又称质数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数)

public class test01 {
  public static void main(String args[]) {
	  int count=0;
	  for(int i=101;i<=200;i++) {
		 boolean flag = true;
		 for(int j=2;j<i;j++) {
			 if(i%j == 0) {
				 flag = false;
				 break;
			 }
		 } 
		 if(flag) {
			 System.out.println("数字"+i+"是一个质数");
			 count++;
		 }else {
			 System.out.println("数字"+i+"不是一个质数");
		 }
		 
	  }
	  System.out.println("共有"+count+"个质数");
  }
}

输出结果:

数字101是一个质数
数字102不是一个质数
......
数字200不是一个质数
共有21个质数

3.开发验证码

定义一个方法实现随机产生一个5位验证码,验证码的格式为:长度为5;前四位是大写字母或小写字母;最后一位是数字;

涉及知识:
1.ASCII码对照:大写字母65–90;小写字母:97–122;
2.Random随机数的使用

Random random = new Random();.//声明
int number=random.nextInt(100)//获取0到99之间的随机数字,并返回给number

代码:

import java.util.Random;
public class test01 {
  public static void main(String args[]) {
	//将小写字母和大写字母存储到一个数组里,再随机抽取一个索引
	char chs[] = new char[52];
	for(int i=0;i<52;i++) {
		//添加小写字母
		if(i>=0&&i<=25) {
			chs[i] = (char)(97+i);
		}else {
			//添加大写字母
			chs[i] = (char)(65+i-26);//因为i为位置,前26个放置了小写字母,需要减掉26从0开始
		}
	}
	//声明一个字符串,用来放置随机生成的结果
	String result = "";//初始字符串为空字符串
	Random random = new Random();
	for(int j=0;j<4;j++) {
		int number = random.nextInt(chs.length);//生成0~51之间的随机数
		result = result + chs[number];
	}
	int number2 = random.nextInt(10);//生成0~9之间的随机数
	result = result + number2;
	System.out.println(result);
  }
}

4.数组元素的复制

把一个数组的元素复制到一个新数组中去

public class test01 {
  public static void main(String args[]) {
	//两个for循环即可
	int s1[] = {1,2,3,4,5};
	int s2[] = new int[s1.length];
	for(int i=0;i<s1.length;i++) {
		s2[i] = s1[i];
	}
	for(int i=0;i<s2.length;i++) {
		System.out.println(s2[i]);
	}
  }
}

5.评委打分

歌唱比赛中,有6名评委打分,分数是【0~100】的整数,选手最后得分:去掉最高分、最低分,取剩下的4个评委的平均分。

import java.util.*;

public class test01 {
	public static void main(String[] args) {
		  //数组存储分数
		  int score[] = getScore();
		  int max= getMax(score);
		  int min= getMin(score);
		  int sum= getAll(score);
		  double result = (sum-max-min)/(score.length-2);
		  System.out.println("得分:"+result);
	  
	  }
	  
	  public static int[] getScore() {
			//未知情况,使用动态数组
			int scores[] = new int[6];
			Scanner sc = new Scanner(System.in);
			for(int i=0;i<scores.length;) {
				System.out.println("请输入第"+i+"位的评委分数:");
				int score =sc.nextInt();
				if(i>=0&&i<=100) {
					scores[i] = score;
					i++;//当数据不符合范围时,i不变,仍需重新输入
				}
				else {
					System.out.println("输入不符合要求!请重新输入第"+i+"位的评委分数:");
				}
			}
			return scores;
		}
	  
	  public static int getMax(int[] score){
		int max = 0;
		for(int i=0;i<score.length;i++) {
			if(score[i]>max) {
				max = score[i];
			  }
			}
		return max;
	  }
	  
	  public static int getMin(int[] score){
			int min = 0;
			for(int i=0;i<score.length;i++) {
				if(score[i]<min) {
					min = score[i];
				  }
				}
			return min;
		  }
	  
	  public static int getAll(int[] score){
			int sum = 0;
			for(int i=0;i<score.length;i++) {
				sum = sum +score[i];
				}
			return sum;
		  }


}

运行结果:

请输入第0位的评委分数:
74
请输入第1位的评委分数:
20
请输入第2位的评委分数:
86
请输入第3位的评委分数:
56
请输入第4位的评委分数:
55
请输入第5位的评委分数:
66
得分:67.0

6.数字加密

某系统的数字密码(大于0),比如1983,采用加密传输。先得到每位数,对每位数+5,再对10求余,最后将所有数字反转(倒换顺序),得到一串新数。

import java.util.*;

public class test01 {
	public static void main(String args[]) {
		//将获取的数字放到数组中
		int arrs[] = getNumber();
		//对数字+5再对10取余
		for(int i=0;i<arrs.length;i++) {
			arrs[i]=(arrs[i]+5)%10;
		}
		System.out.println("数组为:"+Arrays.toString(arrs));
		//翻转数组
		for(int i=0,j=arrs.length-1;i<j;i++,j--) {
			int temp = arrs[i];
			arrs[i] = arrs[j];
			arrs[j] = temp;
		}
		System.out.println("翻转后为:"+Arrays.toString(arrs));
	    //将数组里的数字进行拼接
		int number = 0;
		for(int i=0;i<arrs.length;i++) {
			number = number*10 + arrs[i];
		}
		System.out.println("加密后的数字为:"+number);
	  }
	
	public static int[] getNumber() {
		System.out.println("请输入需要加密的数字:");
		Scanner sc = new Scanner(System.in);
		int number = sc.nextInt();
		//将数组拆解成个位数
		int temp = number;
		//先获取数字的组成个数
		int count= 0;
		while(number!=0) {
			//对数字进行整除10运算,可得出数字字数,当number/10为0时代表已整除完
			number = number/10;
			count++;
		}
		System.out.println("数字个数为:"+count);
		//根据字数获取每一个数,并存到数组中
		int arr[] = new int[count];
		int i = count-1;
		while(count!=0) {
			int n = temp %10;//假设temp=125,125%10=5,此处获取的是最低位的数
			arr[i] = n;//需要倒序输入,因为是从最低位获取
			temp = temp/10;//125/10=12,再将最低数去掉		
			count--;
			i--;
		}
		System.out.println("数字拆解二后为:"+Arrays.toString(arr));
		return arr;
	}
}

运行结果:

请输入需要加密的数字:
8341
数字个数为:4
数字拆解二后为:[8, 3, 4, 1]
数组为:[3, 8, 9, 6]
翻转后为:[6, 9, 8, 3]
加密后的数字为:6983

7.数字解密

将6中的数字按相同方式进行解密。代码与上述基本相似。
关于取余:个位数范围为0~9,+5后的范围为5-14,对10取余得到:5,6,7,8,9,0,1,2,3,4,对于当前取余后得到的数5-9来说,取余前即为她们本身,对于0–4,取余前为10–14,需再+10.

8.抢红包

直播抽奖现金红包,金额为{2,588,888,1000,10000}。编写代码,模拟抽奖过程,打印出每个奖项,奖项的出现次数要随机且不重复。如:

2的奖金被抽出
888的奖金被抽出
10000的奖金被抽出
588的奖金被抽出
1000的奖金被抽出

import java.util.*;

public class test01 {
	public static void main(String args[]) {
		/*
		 * 定义一个数组存储抽奖结果 newArr[]
		 * 定义一个方法,对于当前生成的随机数,判断是否存在数组里 newArr[]
		 * 若存在,则重新生成
		 */
		int arr[] = {2,588,888,1000,10000};
		int newArr[] = new int[arr.length];
		//抽5次奖
		//随机生成索引
		Random r= new Random();
		for(int i=0;i<5;) {
			int randomIndex = r.nextInt(arr.length);
			int prize = arr[randomIndex];
			//判断奖项是否已经抽过
			boolean flag = getPrize(newArr,prize);
			//如果不存在,则抽取该奖项,并放到数组newArr[]记录
			if(!flag) {
				newArr[i] = prize;
				i++;// 只有当不存在时,才进行下一次循环,如果存在,则i不改变,重新抽取
			}
		}
		

		for(int i=0;i<newArr.length;i++) {
			System.out.println(newArr[i]+"奖项已抽出");
		}

	  }
	
	public static boolean getPrize(int arr[],int prize) {
		for(int i=0;i<arr.length;i++) {
			if(arr[i]==prize) {
				return true;
			}
		}
		return false;
	}

	
}

输出结果:

1000奖项已抽出
10000奖项已抽出
888奖项已抽出
2奖项已抽出
588奖项已抽出

9.模拟双色球

import java.util.*;

public class test01 {
	public static void main(String args[]) {
		//1.创建中奖号码
		int arrs[] = CreateNumber();
		System.out.println("=================");
		System.out.println("中奖号码为:"+Arrays.toString(arrs));
		System.out.println("=================");
		//2.创建用户抽奖号码
		int userarrs[] = CreateUsernumber();
		//3.判断是否中奖
		int redcount = 0;
		int bluecount = 0;
		//查找红球的中奖个数
	    for(int i=0;i<6;i++) {
	    	for(int j=0;j<6;j++) {
	    		if(userarrs[i]==arrs[j]) {
	    			redcount++;
	    			break;
	    		}
	    	}
	    }
	    if(arrs[6]==userarrs[6]) {
	    	bluecount++;
	    }
	    //判断个数
	    if(redcount==6&&bluecount==1) {
	    	System.out.println("恭喜中奖,奖金为1000万!");
	    }
	    else if(redcount==6&&bluecount==0) {
	    	System.out.println("恭喜中奖,奖金为500万!");
	    }
	    else if((redcount==5&&bluecount==1)||(redcount==5&&bluecount==0)) {
	    	System.out.println("恭喜中奖,奖金为3000!");
	    }
	    else if((redcount==4&&bluecount==1)||(redcount==4&&bluecount==0)) {
	    	System.out.println("恭喜中奖,奖金为200!");
	    }
	    else if((redcount==3&&bluecount==1)||(redcount==2&&bluecount==1)) {
	    	System.out.println("恭喜中奖,奖金为10!");
	    }
	    else if((redcount==1&&bluecount==1)||(redcount==0&&bluecount==1)) {
	    	System.out.println("恭喜中奖,奖金为5!");
	    }
	    else {
	    	System.out.println("未中奖!");
	    }
	}
	//1.
	public static int[] CreateNumber() {
		int arr[] = new int[7];
		//前6个放红色球
		Random r = new Random();
		for(int i=0;i<6;) {
			//随机生成1个数
			int rednumber = r.nextInt(33)+1;//random生成0~32的数,所以需要+1
			//需唯一且不重复
			boolean flag = isExist(arr,rednumber);
			if(!flag) {//如果不存在,使用该号码
				arr[i] = rednumber;
				i++;//号码合理再进行下次循环,否则重新生成
			}
		}
		//最后一个放蓝色球
		int bluenumber = r.nextInt(16)+1;
		arr[arr.length-1] = bluenumber;
		return arr;
	}
	//2.
	public static int[] CreateUsernumber() {
		int userarr[] = new int[7];
		//需要用户键盘输入
		Scanner sc = new Scanner(System.in);
		for(int i=0;i<6;) {
			System.out.println("请输入你的第"+(i+1)+"位号码");
			int rednumber = sc.nextInt();
			boolean flag = isExist(userarr,rednumber);
			if(!flag) {//如果不存在,使用该号码
				if(rednumber>=1&&rednumber<=33) {
					userarr[i] = rednumber;
					i++;
				}
			  }	
			}
		System.out.println("请输入你的第"+userarr.length+"位号码");		
		while(true) {
			int bluenumber = sc.nextInt();
			if(bluenumber>=1&&bluenumber<=16) {
				userarr[userarr.length-1] = bluenumber;	
				break;
			}else {
				System.out.println("请重新输入");
			}
		}
		return userarr;
		
	}
	
	//判断一个数是否存在于该数组中
	public static boolean isExist(int arr[],int number) {
		for(int i=0;i<arr.length;i++) {
			if(arr[i]==number) {
				return true;
			}
		}
		return false;
	}
}

输出结果:

=================
中奖号码为:[3, 26, 7, 28, 23, 22, 4]
=================
请输入你的第1位号码
3
请输入你的第2位号码
10
请输入你的第3位号码
26
请输入你的第4位号码
7
请输入你的第5位号码
22
请输入你的第6位号码
5
请输入你的第7位号码
4
恭喜中奖,奖金为200
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值