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;
}
}
续作
-
控制台随机打印一个大写字母
-
控制台输入一个字符,判断是否为英文字母
-
控制台输入一个年费份,判断该年份是闰年还是平年
-
控制台输入一个百分制成绩,判断该成绩的等级
90~100 ->‘A’ 60~89 ->‘B’ 60以下->‘C’
-
控制台输入你的薪资,判断你回家的方式
sal>15000 “坐飞机”
-
控制台打印所有的水仙花数(三种循环结构)
利用循环完成累加案例:
-
1+2+3+4…+100
-
计算PI的值
-
9+99+999+…+99999999(8个9)
-
折纸超过珠穆朗玛峰的高度利用死循环
-
定义方法,打印M行列的(*)图案
-
定义方法,打印乘法口诀表
-
百钱百鸡 公:5 母:3 小:1/3
-
控制台输入一个不限位数的整数,判断是否为欸回文数
-
重构双色球案例(解决红球重复的问题两种方式)
-
利用递归求出处第N个斐波那契数列
-
猜字母案例
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。