文章目录
一、卖飞机票
二、找质数
三、开发验证码
四、数组元素的复制
五、评委打分
六、数字加密
七、数字解密
八、抢红包
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;
}
}