Java–经典八道练习题

  • Post author:
  • Post category:java


文章目录

一、卖飞机票

二、找质数

三、开发验证码

四、数组元素的复制

五、评委打分

六、数字加密

七、数字解密

八、抢红包

1、卖飞机票

需求:

  • 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱
  • 按照如下规则计算机票价格:旺季(5~10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折
  • 方法一:
public static void main(String[] args) {
		// TODO Auto-generated method stub
		//方法一:
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入您要选择的座位: 0 头等舱  1经济舱");
		int seat=sc.nextInt();
		System.out.println("请输入当前的月份:");
		int month=sc.nextInt();
		System.out.println("请输入机票的原价:");
		int ticket=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("没有这个舱位");
			}
		}
		System.out.println("您应该支付"+ticket+"元的机票");
		

方法二:

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
		System.out.println("请输入您要选择的座位: 0 头等舱  1经济舱");
		int seat=sc.nextInt();
		System.out.println("请输入当前的月份:");
		int month=sc.nextInt();
		System.out.println("请输入机票的原价:");
		int ticket=sc.nextInt();
		if(month>=5 && month<=10) {
			ticket=getPrice(seat,ticket,0.9,0.85);
		}else if((month>=1 && month<=4) || (month>=11 && month<=12)) {
			ticket=getPrice(seat,ticket,0.7,0.65);
		}
		System.out.println("您应该支付"+ticket+"元的机票");

	}
	public static int getPrice(int seat,int ticket,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之间有多少个素数,并输出所有素数
package Lianxi;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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) {
				count++;
				System.out.println(i+"这个数是质数");
			}
		}
		System.out.println("101~200之间一共有"+count+"个质数");
		
		
		/*int i=7;
		boolean flag=true;
		for(int j=2;i<i;j++) {
			if(i%j==0) {
				flag=false;
				break;
			}
		}
		if(flag) {
			System.out.println("这个数是质数");
		}else {
			System.out.println("这个数不是质数");
		}*/

	}

}

3、开发验证码

需求:

  • 定义方法实现随机产生一个5位的验证码
  • 验证码格式

    • 长度为5
    • 前四位是大写字母或者小写字母
    • 最后以为是数字
package Lianxi;

import java.util.Random;

public class Test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		/*
		 如果我们要在一堆没有什么规律的数据中随机抽取
		 可以先把这些数据放到数组当中,在随机抽取一个索引 
		 */
		
		//分析:
		//1.大写字母和小写字母都放到数组当中
		char[] chs=new char[52];
		for(int i=0;i<chs.length;i++) {
			//ASCII码表
			if(i<=25) {
				chs[i]=(char)(97+i);
			}else {
				chs[i]=(char)(65+i-26);
			}
		}
		//2.随机抽取四次
		//随机抽取数组中的索引
		String  result="";
		Random r=new Random();
		for(int i=0;i<4;i++) {
			int randomIndex=r.nextInt(chs.length);
			//利用随即索引,获取对应的元素
			result=result+chs[randomIndex];
		}
		//3.随机抽取0~9的数字
		int number=r.nextInt(10);
		result=result+number;
		//4.打印最终结果
		System.out.println(result);
	}

}

4、数组元素的复制

需求:

  • 把一个数组的元素复制到另一个新数组中去
package Lianxi;

public class Test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//分析:
		//1.定义一个老数组并存储一些元素
		int[] arr= {1,2,3,4,5};
		//2.定义一个新数组并存储一些元素
		int[] newArr=new int[arr.length];
		//3.遍历老数组得到老数组中的每一个元素,一次存入到新数组当中
		for(int i=0;i<arr.length;i++) {
			//i表示老数组中的索引,新数组中的索引
			//arr[i]表示老数组中的元素
			newArr[i]=arr[i];
			
		}
		//4.新数组已经存满
		for(int i=0;i<newArr.length;i++) {
			System.out.print(newArr[i]+" ");
		}

	}

}

5、评委打分

需求:

  • 在歌唱比赛中,有6名评委给选手打分,分数范围是[0-100]范围之间的整数。选手的最后得分为:起掉最高分、去掉最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分
  • 方法一:
package Lianxi;

import java.util.Scanner;

public class Test5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//分析:
		//1.定义一个数组,用来存放6名评委的打分(0~100)
		int[] arr=new int[5];
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入6个评委打的分数:");
		for(int i=0;i<arr.length;i++) {
			int number=sc.nextInt();
			arr[i]=number;
		}
		
		//2.求出数组中的最大值
		int max=arr[0];
		for(int i=0;i<arr.length;i++) {
			if(arr[i]>max) {
				max=arr[i];
			}
		}
		//3.求出数组中的最小值
		int min=0;
		for(int i=0;i<arr.length;i++) {
			if(arr[i]<min) {
				min=arr[i];
			}
		}
		//4.求出数组中6个分数的总和
		int sum=0;
		for(int i=0;i<arr.length;i++) {
			sum+=arr[i];
		}
		//5.(总和-最大值-最小值)/4
		int avg=0;
		avg=(sum-max-min)/4;
		System.out.println("这位选手最后的得分为:"+avg);

	}

}

方法二:

package Lianxi;

import java.util.Scanner;

public class Test6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//1.定义一个数组,用来存放6名评委的打分(0~100)
		int[] scoreArr=getScores();
		//2.求出数组中的最大值
		int max=getMax(scoreArr);
		//3.求出数组中的最小值
		int min=getMin(scoreArr);
		//4.求出数组中6个分数的总和
		int sum=getSum(scoreArr);
		//5.(总和-最大值-最小值)/4
		int avg=0;
		avg=(sum-max-min)/4;
		//6.打印结果
		System.out.println("这位选手最后的得分为:"+avg);

	}
	public static int getSum(int arr[]) {
		int sum=0;
		for(int i=0;i<arr.length;i++) {
			sum+=arr[i];
		}
		return sum;
	}
	public static int getMin(int arr[]) {
		int min=arr[0];
		for(int i=0;i<arr.length;i++) {
			if(arr[i]<min) {
				min=arr[i];
			}
		}
		return min;
	}
	public static int getMax(int arr[]) {
		int max=arr[0];
		for(int i=0;i<arr.length;i++) {
			if(arr[i]>max) {
				max=arr[i];
			}
		}
		return max;
	}
	public static int[] getScores() {
		int scores[]=new int[6];
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入6个评委打的分数:");
		for(int i=0;i<scores.length;) {
			int number=sc.nextInt();
			if(number>=0 && number<=100) {
				scores[i]=number;
				i++;
			}else {
				System.out.println("成绩超出了范围,继续录入,当前i为:"+i);
			}
			
		}
		return scores;
	}

}

6、数字加密

需求:

  • 某系统的数字密码(大于0),比如1983,采用加密方式进行传输
  • 规则如下:

    • 先得到每位数,然后每位数都加上5,在对10求余,最后将所有数字反转,得到一串新数
package Lianxi;

public class Test7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//分析:
		//1.把整数里面的每一位放到数组里面
		int[] arr= {1,9,8,3};
		//2.加密
		//每位数加上5
		for(int i=0;i<arr.length;i++) {
			arr[i]+=5;
		}
		//在对10求余
		for(int i=0;i<arr.length;i++) {
			arr[i]=arr[i]%10;
		}
		//将所有数字反转
		for(int i=0,j=arr.length-1;i<j;i++,j--) {
			int temp=arr[i];
			arr[i]=arr[j];
			arr[j]=temp;
		}
		//3.把数组里面的每一个数字进行拼接,变成加密之后的结果
		int number=0;
		for(int i=0;i<arr.length;i++) {
			number=number*10+arr[i];
		}
		System.out.println("加密后的结果为:"+number);

	}

}

7、数字解密

package Lianxi;

public class Test8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//分析:
		//1.定义数组记录解密后的结果
		int[] arr= {8,3,4,6};
		//2.反转
		for(int i=0,j=arr.length-1;i<j;i++,j--) {
			int temp=arr[i];
			arr[i]=arr[j];
			arr[j]=temp;
		}
		//3.由于加密是通过对10取余的方式获取的
		//所以在加密的时候就需要判断,如果在0~4之间+10
		for(int i=0;i<arr.length;i++) {
			if(arr[i]>=0 && arr[i]<=4) {
				arr[i]+=10;
			}
		}
		//4.每一位-5
		for(int i=0;i<arr.length;i++) {
			arr[i]-=5;
		}
		//5.获取数组里面的每一位数字拼接成最终的结果
		int number=0;
		for(int i=0;i<arr.length;i++) {
			number=number*10+arr[i];
		}
		//6.打印最终结果
		System.out.println("最终的数字为:"+number);

	}

}

8、抢红包

需求:

  • 一个大V直播抽奖,奖品是现金红包,分别有[2,588,888,1000,10000]五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下(随机顺序,不一定是下面的顺序)
  • 888元的奖金被抽出
  • 588元的奖金被抽出
  • 10000元的奖金被抽出
  • 1000元的奖金被抽出
  • 2元的奖金被抽出
package Lianxi;

import java.util.Random;

public class Test9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//分析:
		//1.定义数组表示奖池
		int[] arr= {2,588,888,1000,10000};
		//2.定义新数组用于存储抽奖的结果
		int[] newArr= new int[arr.length];
		//3.抽奖
		Random r=new Random();
		for(int i=0;i<5;) {
			int randomIndex=r.nextInt(arr.length);
			int prize=arr[randomIndex];
			boolean flag=contains(newArr,prize);
			if(!flag) {
				newArr[i]=prize;
				i++;
			}
		}
		//4.遍历
		for(int i=0;i<newArr.length;i++) {
			System.out.println(newArr[i]);
		}

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

}



版权声明:本文为m0_73703409原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。