目录:
案例一:卖飞机票
案例二:找素数
案例三:开发验证码
案例四:复制数组
案例五:评委打分
案例六:数字加密
案例七:数字解密
案例八:抢红包
案例九:双色球抽奖
- 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
- 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
代码如下:switch写法
package com.itheima.demo1.lianxipackage;
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
//键盘录入机票的原价,月份,头等舱或经济舱
Scanner sc = new Scanner(System.in);
System.out.println("请输入机票原价:");
int yprice = sc.nextInt();
System.out.println("请输入月份:");
int month = sc.nextInt();
System.out.println("请输入您是头等舱(0) 还是经济舱(1):");
int cangwei = sc.nextInt();
if (cangwei == 0) {
switch (month) {
case 1:
case 2:
case 3:
case 4:
System.out.println("你需要缴费:"+yprice * 0.85+"元"); break;
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("你需要缴费:"+yprice * 0.9+"元"); break;
case 11:
case 12:
System.out.println("你需要缴费:"+yprice * 0.85+"元"); break;
default:
System.out.println("请输入正确月份");
}
} else if (cangwei == 1) {
switch (month) {
case 1:
case 2:
case 3:
case 4:
System.out.println("你需要缴费:"+yprice * 0.65+"元"); break;
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("你需要缴费:"+yprice * 0.7+"元"); break;
case 11:
case 12:
System.out.println("你需要缴费:"+yprice * 0.65+"元"); break;
default:
System.out.println("请输入正确月份");
}
} else
System.out.println("请输入正确仓位!");
}
}
//if((month >=1 && month <=4) || {month>=11 && month <=15}) 如果用if写法
采用方法来优化代码:
- 思路:将淡季和旺季写在主函数中,将求两种不同仓位的价格写在getPrice方法中
package com.itheima.demo1.lianxipackage;
import java.util.Scanner;
//用调用方法写飞机票问题
public class test2 {
public static void main(String[] args) {
//键盘录入机票的原价,月份,头等舱或经济舱
int ticket=0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入机票原价:");
int yprice = sc.nextInt();
System.out.println("请输入月份:");
int month = sc.nextInt();
System.out.println("请输入您是头等舱(0) 还是经济舱(1):");
int cangwei = sc.nextInt();
if (month >= 5 && month <= 10) {
ticket = getPrice(yprice, cangwei, 0.9, 0.85);
} else if ((month >= 1 && month <= 4) || (month >= 11 && month <= 12)) {
ticket = getPrice(yprice, cangwei, 0.7, 0.65);
} else System.out.println("请输入正确月份");
System.out.println(ticket);
}
//方法里面只用来不同仓位的不同价格,在主方法里面已经分好了淡季和旺季
public static int getPrice(int price, int seat, double d0, double d1) {
if (seat == 0) {
price = (int)(price * d0);
} else if (seat == 1) {
price = (int)(price * d1);
} else System.out.println("请输入正确仓位");
return price;
}
}
案例二:找素数
需求:
- 判断101-200之间有多少素数,并输出所有素数(素数:能被1和本身整除的数就是素数)
package com.itheima.demo1.lianxipackage;
public class test5 {
public static void main(String[] args) {
int i, j, count = 0;
for (i = 101; i < 200; i += 2) {
for (j = 2; j < i; j++) {
if (i % j == 0) {
break;
}
if (j == i - 1) {
count++;
System.out.print(i + " ");
}
}
}
System.out.println("\n");
System.out.println("一共有" + count + "个素数");
}
}
运行结果:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
一共有21个素数
- 定义方法实现随机产生一个5位的验证码
- 验证码格式:长度为5 前四位时大写字母或小写字母 最后一位时数字
package com.itheima.demo1.lianxipackage;
import java.util.Random;
public class test61 {
public static void main(String[] args) {
char[] c = new char[52];
for (int i = 0; i < c.length; i++) {
if (i <= 25)
c[i] = (char) (97 + i);
else
c[i] = (char) (65 + i - 26);
}
//随机四次取数
Random r = new Random();
int index;
//定义一个字符串类型的变量,用来记录最终的结果
String result = "";
for (int i = 0; i < 4; i++) {
index = r.nextInt(c.length);
result = result + c[index];
}
int sui = r.nextInt(9);
result = result + sui;
System.out.println(result);
// int s = r.nextInt(9);
}
}
- 注意:String result = " "; 是定义一个字符串类型的变量 , 用result = result + c[index];来将一个一个的字符拼接起来形成一个字符串
- 返回目录
案例四:复制数组
需求:将一个数组中的元素复制到另一个新数组中去
package com.itheima.demo1.lianxipackage;
public class test7 {
public static void main(String[] args) {
//分析:定义一个老数组并存储一些元素
int[] arr= {1,2,4,5,32,6,7,7,7,7};
//定义一个新数组,且长度和老数组一样长
int[] arrx=new int[arr.length];
//遍历老数组将元素复制到新数组中
for (int i = 0; i < arr.length; i++) {
arrx[i] = arr[i];
}
for (int i = 0; i < arrx.length; i++) {
System.out.print(arrx[i]+" ");
}
}
}
个人建议:一个for循环里干一件事,不要把多件事情放在一个for循环里,容易乱
返回目录
- 需求:在歌唱比赛中,有6名评委给选手打分,分数范围是[1-100]之间的整数。
- 选手的最后得分为:去掉最高分、最低分后的4个评委的平均数,请完成上诉过程并计算除选手的得分
package com.itheima.demo1.lianxipackage;
import java.util.Scanner;
public class test8 {
public static void main(String[] args) {
//shift + f6 批量修改变量名,方法名等
int[] scores = getScore(); //1.定义一个数组方法,将成绩依次存入数组,并将数组返回主方法,在主方法中调用
int max = getMax(scores); //2.定义分支方法,将返回数组依次作为参数传入其他方法
int min = getMin(scores);
int sum = getSum(scores);
int avg = getAvg(sum,max,min,scores);
System.out.println(avg);
}
public static int[] getScore() {
int[] score = new int[6];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 6; ) {
System.out.println("请第" + (i + 1) + "位评审输入分数:");
score[i] = sc.nextInt();
if (score[i] > 100 || score[i] < 0) {
System.out.println("请重新输入:");
score[i] = sc.nextInt();
} else i++;
}
return score;
}
public static int getMax(int[] scoreArr) {
int max = scoreArr[0];
for (int i = 1; i < scoreArr.length; i++) {
if (max < scoreArr[i])
max = scoreArr[i];
}
return max;
}
public static int getMin(int[] scoreArr) {
int min = scoreArr[0];
for (int i = 1; i < scoreArr.length; i++) {
if (min > scoreArr[i])
min = scoreArr[i];
}
return min;
}
public static int getSum(int[] scoreArr) {
int sum = 0;
for (int i = 0; i < scoreArr.length; i++) {
sum = sum + scoreArr[i];
}
return sum;
}
public static int getAvg(int sum,int max,int min,int[] scoreArr){
int avg = 0;
avg = (sum - max - min) / (scoreArr.length-2);
return avg;
}
}
需求:
- 某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
- 规则如下:
先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
第一种写法:
package com.itheima.demo1.lianxipackage;
import java.util.Scanner;
public class test9 {
public static void main(String[] args) {
// 需求:
// 某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
// 规则如下:
// 先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
//1.定义一个密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入密码:");
int password = sc.nextInt();
int newpassword = getnewPassword(password);
System.out.println(newpassword);
}
//2.得到每位数
public static int getnewPassword(int ypassword){
int gw,sw,bw,qw;
qw = ypassword / 1000 ;
bw = ypassword % 1000 /100;
sw = ypassword % 1000 % 100 / 10;
gw = ypassword % 1000 % 100 % 10;
qw = (qw + 5)%10;
bw = (bw + 5)%10;
sw = (sw + 5)%10;
gw = (gw + 5)%10;
int newpassword = gw*1000 + sw * 100 + bw * 10 + qw;
return newpassword;
}
}
加大难度:没有确定的密码,也不知道是几位
代码如下:
package com.itheima.demo1.lianxipackage;
import java.util.Scanner;
public class test92 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入密码:");
int number = sc.nextInt(); //1.接收这个密码
int temp = number; //用在下面,暂时不用管
int count = 0; //2.接下来确定密码是几位
while (number>0){ //比如:123/10=12 然后count++
number = number/10; // 然后 12/10=1 count++
count++; // 1/10= count++ 然后执行number>0 不成立 跳出 count=3
}
int[] arr = new int[count]; //3.定义一个count位的数组
int index = arr.length-1;
while (temp != 0) { //4.将密码逐个存入arr数组中
int ge = temp%10;
temp = temp/10; //依次用密码对10取整,去掉位后一位直到结果为0
arr[index] = ge;
index--;
}
for (int i = 0; i < arr.length; i++) { //5.将数组中的数+5 再对10求余
arr[i] = (arr[i]+5)%10;
}
int temp1 = 0;
for (int i = 0; i < arr.length/2; i++) { //6.反转密码
temp1 = arr[i];
arr[i]=arr[arr.length-i-1];
arr[arr.length-i-1]=temp1;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}
返回目录
案例七:数字解密:
package com.itheima.demo1.lianxipackage;
import java.util.Scanner;
public class test10 {
public static void main(String[] args) {
//1.将密码翻转过来
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要解密的数字:");
int password = sc.nextInt();
int temp = password;
//1.1 将密码逐个存入数组
//1.1.1 判断密码是几位
int count = 0;
while (password > 0) { //判断方法与上一个加密相同
password = password / 10;
count++;
}
// 1.1.2 定义一个count位的数组,将密码逐个装入数组
int[] passwordArr = new int[count];
int ge = 0;
int index = passwordArr.length-1;
while (temp > 0 ) {
ge = temp % 10;
temp = temp / 10;
passwordArr[index] = ge;
index--;
}
int temp1 = 0;
for (int i = 0; i < passwordArr.length/2; i++) {
temp1 = passwordArr[i];
passwordArr[i]=passwordArr[passwordArr.length-i-1];
passwordArr[passwordArr.length-i-1]=temp1;
}
//1.2 逆向方法将每位数字进行解密
for (int i = 0; i < passwordArr.length; i++) {
if(passwordArr[i]>=0&&passwordArr[i]<=4) //正向思考,你输入的密码只能是0-9 所以给他们都+5变成
passwordArr[i] = passwordArr[i]+10; // 0 1 2 3 4 5 6 7 8 9 + 5
} // 5 6 7 8 9 10 11 12 13 14 % 10
// 5 6 7 8 9 0 1 2 3 4
//从上看出当+5是56789时对10取余也不会变
//但后五个对10取余就会变成01234 所以当反向解密碰到01234时就要+10
//56789不变
for (int i = 0; i < passwordArr.length; i++) {
passwordArr[i]=passwordArr[i]-5;
}
System.out.println('\n');
for (int i = 0; i < passwordArr.length; i++) {
System.out.print(passwordArr[i]);
}
}
}
- 需求:一个大V直播抽奖,将平时现金红包,分别由{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
package basic_code01;
import java.util.Random;
public class test01 {
public static void main(String[] args) {
//大V抽奖
//1.定义数组表示奖池
int[] arr = {2,588,888,1000,10000};
//2.定义新数组用于存储抽奖结果
int[] newArr = new int[arr.length];
//3.随机生成索引,模拟抽取奖品
Random r = new Random();
int prizeindex=0,i;
for(i=0;i<arr.length;) {
prizeindex = r.nextInt(arr.length);
//调用方法,用result承接结果
boolean result = contains(newArr,arr[prizeindex]);
if(result == false) {
if(i==arr.length)
break;
else {
newArr[i] = arr[prizeindex];
i++;}
}
else
continue;
}
for(i=0;i<arr.length;i++)
System.out.print(newArr[i]+" ");
}
//定义一个方法判断prize在数组当中是否存在
//存在返回true 不存在返回false
public static boolean contains(int[] arr,int prize){
int i;
for(i=0;i<arr.length;i++) {
if(arr[i]==prize)
//如果有一样的立刻用return结束contains方法
return true;
}
//当上面的for循环没能找到一样的奖项才返回flase
return false;
}
}
代码优化:直接打乱奖池顺序
package com.itheima.likou9l;
import java.util.Random;
public class test01 {
public static void main(String[] args) {
//将奖池里传递所有奖项打乱顺序
int[] arr = {2,588,888,1000,10000};
Random r = new Random();
int temp=0;
for (int i = 0; i < arr.length; i++) {
int index = r.nextInt(arr.length);
temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
package com.itheima.likou9l;
import java.util.Random;
import java.util.Scanner;
public class shuangSeQiu {
public static void main(String[] args) {
//双色球抽奖案例
//1.生成中奖号码
//调用方法判断奖项 用switch判断
int[] arr = creatNumber();
System.out.println("本期奖池");
System.out.println("******************************************");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
if (i == arr.length - 1)
System.out.println('\n');
}
System.out.println("******************************************");
//用户输入彩票号码(红球+篮球)
int[] userInputArr = userInputNumber();
//判断用户的中奖情况
int redCount = 0;
int blueCount = 0;
//判断红球个数,所以用数组-1
for (int i = 0; i < userInputArr.length - 1; i++) {
int redNumber = arr[i];
//用一个循环去比对是否存在
for (int j = 0; j < userInputArr.length - 1; j++) {
if (redNumber == userInputArr[j]) {
redCount++;
//如果找到了就不需要比较剩下的了
//跳出循环继续判断下一个红球号码是否中奖
break;
}
}
}
int blueNumber = userInputArr[6];
if (blueNumber == arr[6])
blueCount++;
//用红篮球个数判断用户中了几等奖
if (redCount == 6 && blueCount == 1) {
System.out.println("您中了1000w元");
} else if (redCount == 6 && blueCount == 0) {
System.out.println("您中了500w元");
} else if (redCount == 5 && blueCount == 1) {
System.out.println("您中了1000元");
} else if (redCount == 5 && blueCount == 0) {
System.out.println("您中了200元");
} else if (redCount == 4 && blueCount == 1) {
System.out.println("您中了200元");
} else if (redCount == 4 && blueCount == 0) {
System.out.println("您中了10元");
} else if (redCount == 3 && blueCount == 1) {
System.out.println("您中了10元");
} else if (redCount == 2 && blueCount == 1) {
System.out.println("您中了10元");
} else if (redCount == 1 && blueCount == 1) {
System.out.println("您中了5元");
} else if (redCount == 0 && blueCount == 1) {
System.out.println("您中了5元");
} else {
System.out.println("很遗憾,啥都没中");
}
}
//用户输入自己的双色球号码
public static int[] userInputNumber() {
Scanner sc = new Scanner(System.in);
//定义一个数组,用于存放用户购买彩票号码
int[] arr = new int[7];
//用户分别输入篮球和红球的号码,且判断在不在范围内,且不重复
for (int i = 0; i < 6; ) {
System.out.println("请输入第" + (i + 1) + "红球号码:");
int red = sc.nextInt();
boolean result = panDuanUser(arr, red);
if (red >= 1 && red <= 33) {
if (result == false) {
arr[i] = red;
i++;
} else
System.out.println("当前红球号码已纯在,请重新输入:");
} else
System.out.println("您输入的号码不在范围,请重新输入:");
}
//用户输入篮球号码
System.out.println("请输入篮球号码:");
while (true) { //无限循环用break跳出
int blue = sc.nextInt();
if (blue >= 1 && blue <= 16) {
arr[6] = blue;
break;
} else System.out.println("当前篮球号码错误");
}
return arr;
}
//用方法判断你抽的什么奖 随机定义奖池
public static int[] creatNumber() {
//1.创建数组用于添加中将号码,6个红球1个篮球 数组长度:7
int[] arr = new int[7];
//2.随机生成号码并添加到数组中
//红球:抽6个且不重复 1-33中选择
//篮球:抽一个随机抽 1-16中选择
Random r = new Random();
//抽6个红球
int i;
for (i = 0; i < 6; ) {
int numberRed = r.nextInt(33) + 1; //1-33
boolean flag = panDuan(arr, numberRed);
if (!flag) {
arr[i] = numberRed;
i++;
}
}
//抽篮球
int numberBlue = r.nextInt(16) + 1; // 1-16
arr[i] = numberBlue;
return arr;
}
//判断奖项是否重复
public static boolean panDuan(int[] arr, int numberRed) {
for (int i = 0; i < 6; i++) {
if (numberRed == arr[i]) {
return true;
}
}
return false;
}
//判断用户输入奖项是否重复
public static boolean panDuanUser(int[] arr, int red) {
for (int i = 0; i < 6; i++) {
if (red == arr[i])
return true;
}
return false;
}
}