Java练习题

Java练习


前言

温故而知新


第一题、模拟彩票双色球

1.1 版本一(覆盖加扩容的方式解决重复问题)

package day06;

import java.util.Arrays;
import java.util.Random;

public class BoubleColorBalls {
	
	public static void main(String[] args) {
		String[] redPoolStrings = {"01","02","03","04","05","06"
				,"07","08","09","10","11","12","13","14","15","16","17","18"
				,"19","20","21","22","23","24","25","26","27","28","29","30"
				,"31","32","33"};
		String[] balls = new String[6];
		//创建Random对象,随机生成33个红球下表
		Random rdRandom = new Random();
		for (int i = 0; i < balls.length; i++) {
			//随机生成红球下标
			int index = rdRandom.nextInt(redPoolStrings.length);
			
			//通过下标取出一个红球放置到球罐里
			 balls[i] = redPoolStrings[index];
			 redPoolStrings[index] = redPoolStrings[redPoolStrings.length - 1 - i];
			 redPoolStrings = Arrays.copyOf(redPoolStrings, redPoolStrings.length - 1);
			 System.out.println(Arrays.toString(redPoolStrings));
			 
		}
		Arrays.sort(balls);
		System.out.println(Arrays.toString(balls));
		String[] bluePoolStrings = {"01","02","03","04","05","06"
				,"07","08","09","10","11","12","13","14","15","16"};
		String blueBall = bluePoolStrings[rdRandom.nextInt(bluePoolStrings.length)];
		balls = Arrays.copyOf(balls,balls.length + 1);
		balls[balls.length - 1] = blueBall;
		System.out.println(Arrays.toString(balls));
 	}

}

2.2 版本二(使用贴标签的方式解决重复问题)

package day06;

import java.util.Arrays;
import java.util.Random;

public class BoubleColorBalls2 {
	
	public static void main(String[] args) {
		String[] redPoolStrings = {"01","02","03","04","05","06"
				,"07","08","09","10","11","12","13","14","15","16","17","18"
				,"19","20","21","22","23","24","25","26","27","28","29","30"
				,"31","32","33"};
		
		String[] balls = new String[6];
		
		boolean[] bq = new boolean[redPoolStrings.length];
		//创建Random对象,随机生成33个红球下表
		Random rdRandom = new Random();
		int i = 0;
		do {
			
			int index = rdRandom.nextInt(redPoolStrings.length);
			if (bq[index]) {
				
				continue;
			}
			balls[i] = redPoolStrings[index];
			bq[index] = true;
			
			i++;
			
		} while (i != 6);
		Arrays.sort(balls);
		System.out.println(Arrays.toString(balls));
		
		String blueBall = redPoolStrings[rdRandom.nextInt(16)];
		balls = Arrays.copyOf(balls,balls.length + 1);
		balls[balls.length - 1] = blueBall;
		System.out.println(Arrays.toString(balls));
 	}

}

2.3版本三(含对比检查)

package com.xms.homework.day05;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

//需求6:双色球模拟
public class Test02 {
	public static void main(String[] args) {
		//获取中奖号码
		String[] prize = getPrize();
		System.out.println(Arrays.toString(prize));
		
		//用户录入号码
		String[] input = getInput();
		System.out.println(Arrays.toString(input));
		
		//检查中奖信息
		check(prize,input);
		
	}

	private static void check(String[] prize, String[] input) {
		int redCount = 0;//红球中的个数
		int blueCount = 0;//蓝球中的个数
		for(int i=0;i<prize.length-1;i++) {
			for(int j=0;j<input.length-1;j++) {
				if(prize[i].equals(input[j])) {
					redCount++;
					break;
				}
			}
		}
		blueCount = prize[prize.length-1].equals(input[input.length-1])?1:0;
		if(redCount==6&&blueCount==1) {
			System.out.println("中了一等奖,一共500w");
		}else if(redCount==6&&blueCount==0) {
			System.out.println("中了二等奖,一共10w");
		}else if(redCount==5&&blueCount==1) {
			System.out.println("中了三等奖,一共1w");
		}else if((redCount==5&&blueCount==0)
				||(redCount==4&&blueCount==1)) {
			System.out.println("中了四等奖,一共1000");
		}else if((redCount==4&&blueCount==0)
				||(redCount==3&&blueCount==1)) {
			System.out.println("中了五等奖,一共100");
		}else if((redCount==2&&blueCount==1)
				||(redCount==1&&blueCount==1)
				||(redCount==0&&blueCount==1)) {
			System.out.println("中了六等奖,一共5");
		}else {
			System.out.println("毛都没有");
		}
		
	}

	private static String[] getInput() {
		String[] input = new String[7];
		Scanner sc = new Scanner(System.in);
		for(int i=0;i<6;i++) {
			System.out.println("请输入第"+(i+1)+"个红球的号码");
			input[i] = sc.next();
		}
		System.out.println("请输入蓝球的号码");
		input[input.length-1] = sc.next();
		return input;
	}

	private static String[] getPrize() {
		String[] prize = new String[6];
		//1)获取6颗红球,放入prize
		//1.1 获取所有的33颗红球
		String[] redPool = getRedPool();
		//1.2 在33颗红球中随机获取6颗红球放入prize(红球不能重复)
		Random r = new Random();
		putEle(prize,redPool,r);
		
		//2)6颗红球排序
		Arrays.sort(prize);
		
		//3)获取1颗蓝球,放入prize
		//3.1 获取所有的16颗蓝球
		String[] bluePool = Arrays.copyOf(redPool, 16);
		//3.2 随机获取1颗蓝球
		String blueBall = bluePool[r.nextInt(bluePool.length)];
		//3.3 将蓝球放入prize中
		prize = Arrays.copyOf(prize, prize.length+1);
		prize[prize.length-1] = blueBall;
		return prize;
	}

	/**
	 * 在资源池中获取指定个数的随机元素(不能重复),放入到目的端数组中
	 * 将获取到的元素从资源池中直接删除,保证元素的唯一性
	 * 指定个数:目的端数组长度
	 * @param target 目的端数组
	 * @param source 资源池
	 */
	private static void putEle(String[] target, String[] source,Random r) {
		int index = -1;
		for(int i=0;i<target.length;i++) {
			index = r.nextInt(source.length);//随机资源下标
			//将source中获取到的随机元素放入target中
			target[i] = source[index];
			//将获取到的元素从资源池中直接删除
			source[index] = source[source.length-1];
			source = Arrays.copyOf(source, source.length-1);
		}
	}

	//获取所有的红球
	private static String[] getRedPool() {
		String[] redPool = new String[33];
		for(int i=0;i<redPool.length;i++) {
			if(i<9) {
				//放入前面的9颗球(01,02...09)
				redPool[i] = "0"+(i+1);
			}else {
				//放入后面所有球(10,11...33)
				redPool[i] = ""+(i+1);
			}
		}
		return redPool;
	}
}

第二题、数组排序

2.1 冒泡排序

package day07;

import java.util.Arrays;

public class SortDemo {
	
	public static void main(String[] args) {
		
		int[] ary = new int[] {5,6,4,7,8,3,};
		Arrays.sort(ary);
		System.out.println(Arrays.toString(ary));
		
		bubbleSort(ary);
		System.out.println(Arrays.toString(ary));
		
	}
	
	//冒泡排序
	public static void bubbleSort(int[] ary) {
		
		for (int i = 0; i < ary.length; i++) {
			for (int j = 0; j < ary.length - i -1; j++) {
				
				if (ary[j] < ary[j + 1]) {
					
					int temp = ary[j];
					ary[j] = ary[j + 1];
					ary[j + 1] = temp;
					
				}
				
			}
		}
		
	}

}

2.2 选择排序

package day07;

import java.util.Arrays;

public class SortDemo {
	
	public static void main(String[] args) {
		
		int[] ary = new int[] {5,6,4,7,8,3,};
		Arrays.sort(ary);
		System.out.println(Arrays.toString(ary));
		selectSort(ary);
		System.out.println(Arrays.toString(ary));
	}
	
	
	//选择排序
	public static void selectSort(int[] ary) {
		
		for (int i = 0; i < ary.length - 1; i++) {
			for (int j = i + 1; j < ary.length; j++) {
				
				if(ary[i] > ary[j]) {
					int temp = ary[i];
					ary[i] = ary[j];
					ary[j] = temp;
				}
				
			}
			
		}
		
	}

}

package day07;

import java.net.CacheRequest;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;

import javax.naming.ldap.Rdn;

public class GuessNumber {
	
	public static void main(String[] args) {
			
		System.out.println("欢迎进入猜字游戏,请输入难度级别:");
		
		Scanner scanner = new Scanner(System.in);
		int num = scanner.nextInt();
		char[] ans = gen(num);
		System.out.println(Arrays.toString(ans));
		Scanner s = new Scanner(System.in);
		
		
		for (;/* true */ ; ) {
			
			System.out.println("请输入你猜的答案:");
			String str = s.nextLine();
			if ("exit".equals(str)) {
				System.out.println("猜不出来,不玩了!");
				break;
			}
			
			char[] gs = str.toCharArray();
			int[] cs = compare(gs, ans);
			System.out.println("你猜对了"+cs[0]+"个字母,猜对"+cs[1]+"个位置。");
			if (num == cs[1]) {
				
				System.out.println("棒棒哒!");
				break;
				
			}
		}			
		
	}	
	
	public static char[] gen(int m) {
		
		//
		char[] str = {'A','B','C','D','E','F','G','H','I'
				,'J','K','L','M','N','O','P','Q','R','S'
				,'T','U','V','W','X','Y','Z'};
		//
		char[] cs = new char[m];
		Random random = new Random();
		int i = 0;
		while (true) {
			int index = random.nextInt(str.length);
			cs[i] = str[index];
			//
			str[index] = str[str.length - 1];
			str = Arrays.copyOf(str, str.length - 1);
			i++;		
			if (i == m) {			
				break;
			}		
		}		
		return cs;		
	}
	
	public static int[] compare(char[] gues,char[] right) {
		
		int[] ins = new int[2];
		int nums = 0;
		int indexs = 0;
		for (int i = 0; i < gues.length; i++) {
			for (int j = 0; j < right.length; j++) {
				
				if(gues[i] == right[j]) {
					nums++;
					
					if (i == j) {
						indexs++;
					}
				}
				
			}
		}
		ins[0] = nums;
		ins[1] = indexs;
		return ins;
		
	}
	
	
//	private static void bijiao(int num) {
//		
//		System.out.println("请输入"+ num +"个字母(大写):");
//		Scanner scanner = new Scanner(System.in);
//		String str = scanner.next();
//		char[] yonghu = str.toCharArray();
//		
//		while (true) {
//			char[] sj = suiji(num);
//			if (yonghu.length != num) {
//			
//			System.out.println("您输入的字母个数不对!请重新输入:");
//			bijiao(num);
//			
//		}else if (yonghu.equals(sj)){
//			
//			System.out.println("您猜的全对了");
//			
//		}else  {
//			
//			int count = 0;
//			for (int i = 0; i < yonghu.length; i++) {
//				for (int j = 0; j < sj.length; j++) {
//					if (yonghu[i] == sj[j]) {
//					
//					count++;			
//				}
//				}			
//				
//			}
//			if (count == 0) {
//				
//				System.out.println("错完了");
//				break;
//
//			}else {
//				System.out.println("" +count);
//				
//				break;
//			}
//			
//		}
//		
//		}
//		
//			
//		}
		
		
		
	
	
	
	
//	public static char[] suiji(int n) {
//		
//		char[] cha = new char[n];
//		for (int i = 0; i < n; i++) {
//			
//			Random random = new Random();
//			int num = random.nextInt(26) + 65;
//			cha[i] = (char)num;
//			System.out.println(Arrays.toString(cha));		
//			
//		}
//		return cha;	
//		
//	}

}

第三题、打印杨辉三角

package com.xms.homework.day05;

/*
 * 打印输出杨辉三角
 * 1 
 * 1	1
 * 1	2	1
 * 1	3	3	1
 * 1	4	6	4	1
 * 1	5	10	10	5	1
 * 。。。。。。。
 */
public class YangHuiSanJiao {
	public static void main(String[] args) {
		int height = 6;
		printYH(height);
	}

	private static void printYH(int height) {
		// TODO Auto-generated method stub
		/*
		 * 将杨辉三角形作为一个二维数组 杨辉三角中的每一行作为二维数组中的元素
		 */
		int[][] arr = new int[height][];
		// 动态创建1维数组
		for (int i = 0; i < arr.length; i++) {
			arr[i] = new int[i + 1];
			/*
			 * 给一维数组里面的元素赋值 1)第一行和最后一行赋值一 2)其他列值 = 上一行当前列值+上一行前一列值
			 */
			for (int j = 0; j < arr[i].length; j++) {
				if (j == 0 || j == arr[i].length - 1) {
					arr[i][j] = 1;
				} else {
					arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
				}
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();

		}
	}
}

第四题、定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

package com.xms.homework.day05;

import java.util.Arrays;
import java.util.Random;

/*
 * 需求2:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
 */
public class YanZhengMa {
	public static void main(String[] args) {
		char[] arr = new char[5];
		for (int i = 0; i < 5; i++) {
			Random random = new Random();

			int num3 = random.nextInt(3);
			if (num3 == 0) {
				arr[i] = (char) (random.nextInt(10) + '0');
			} else if (num3 == 1) {
				arr[i] = (char) (random.nextInt(26) + 'a');
			} else {
				arr[i] = (char) (random.nextInt(26) + 'A');
			}

		}
		System.out.println(Arrays.toString(arr));

		int[] allDegit = getAllDegit();
		char[] allLower = getAllLower();
		char[] allUpper = getAllUpper();
		int count = 5;
		String code = getCode(allDegit, allLower, allUpper, count);
		System.out.println(code);
	}

	private static String getCode(int[] allDegit, char[] allLower, char[] allUpper, int count) {
		// TODO Auto-generated method stub
		Random r = new Random();
		int i = 0;
		int index = -1;// 数组随机下标
		String code = "";
		while (i < count) {
			int n = r.nextInt(3);
			switch (n) {
			case 0:
				// 获取allDegit数组中的随机下标
				index = r.nextInt(allDegit.length);
				code += allDegit[index];
				break;
			case 1:
				// 获取allDegit数组中的随机下标
				index = r.nextInt(allLower.length);
				code += allLower[index];
				break;
			case 2:
				// 获取allDegit数组中的随机下标
				index = r.nextInt(allUpper.length);
				code += allUpper[index];
				break;
			}
			i++;
		}

		return code;
	}

	public static int[] getAllDegit() {
		int[] degitArr = new int[10];
		for (int i = 0; i < degitArr.length; i++) {

			degitArr[i] = i;
		}
		return degitArr;
	}

	public static char[] getAllUpper() {
		char[] upperArr = new char[26];
		for (int i = 0; i < upperArr.length; i++) {

			upperArr[i] = (char) ('A' + i);
		}
		return upperArr;
	}

	public static char[] getAllLower() {
		char[] LowerAll = new char[26];
		for (int i = 0; i < LowerAll.length; i++) {

			LowerAll[i] = (char) ('a' + i);
		}
		return LowerAll;
	}
}

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

package com.xms.homework.day05;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/*
 * 需求3:在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。
 * 选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
 */
public class PingFeng {
	public static void main(String[] args) {
		Random random = new Random();
		double[] scores = getAllScorce(6);
		
		double avgScore = getAvgScore(scores);
		System.out.println(Arrays.toString(scores));
		System.out.println(avgScore);
		int num = 0;
		//排序
		for (int i = 0; i < scores.length; i++) {
			for (int j = 0; j < scores.length - 1 - i; j++) {
				if (scores[j] > scores[j + 1]) {
					double temp = scores[j];
					scores[j] = scores[j + 1];
					scores[j + 1] = temp;
				}
			}
		}
		
		
		//加上
		for (int i = 0; i < scores.length; i++) {
			num += scores[i];
		}
		System.out.println((num - scores[0] - scores[scores.length - 1]) / 4.0);

	}
	
	

	private static double getAvgScore(double[] scores) {
		// TODO Auto-generated method stub
		Arrays.sort(scores);
		//去掉最高分
		scores = Arrays.copyOf(scores, scores.length - 1);
		scores[0] = scores[scores.length - 1];
		scores = Arrays.copyOf(scores, scores.length - 1);
		//
		double sum = getSum(scores);
		return sum / scores.length;
	}



	private static double getSum(double[] scores) {
		// TODO Auto-generated method stub
		double sum = 0.0;
		for (int i = 0; i < scores.length; i++) {
			sum += scores[i];
		}
		return sum;
	}



	private static double[] getAllScorce(int count) {
		// TODO Auto-generated method stub
		double[] scores = new double[count];
		Scanner sc = new Scanner(System.in);
		
			for (int i = 0; i < scores.length; i++) {
			System.out.println("第"+(i+1)+"个评委的打分信息");
			double score = sc.nextDouble();
			while (score<0||score>100) {
				System.out.println("输入有误,请重新输入!");
				score = sc.nextDouble();
			}
			scores[i] = score;
			
		}
		
		return scores;
	}
}

续作

  1. 控制台随机打印一个大写字母

  2. 控制台输入一个字符,判断是否为英文字母

  3. 控制台输入一个年费份,判断该年份是闰年还是平年

  4. 控制台输入一个百分制成绩,判断该成绩的等级

    90~100 ->‘A’ 60~89 ->‘B’ 60以下->‘C’

  5. 控制台输入你的薪资,判断你回家的方式

    sal>15000 “坐飞机”

  6. 控制台打印所有的水仙花数(三种循环结构)

    利用循环完成累加案例:

  7. 1+2+3+4…+100

  8. 计算PI的值

  9. 9+99+999+…+99999999(8个9)

  10. 折纸超过珠穆朗玛峰的高度利用死循环

  11. 定义方法,打印M行列的(*)图案

  12. 定义方法,打印乘法口诀表

  13. 百钱百鸡 公:5 母:3 小:1/3

  14. 控制台输入一个不限位数的整数,判断是否为欸回文数

  15. 重构双色球案例(解决红球重复的问题两种方式)

  16. 利用递归求出处第N个斐波那契数列

  17. 猜字母案例

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值