java练习题

(1)飞机票
package com.wqj;
import java.util.Scanner;

public class test1 {
    public static void main(String[] args) {
        //目标:买飞机票
    Scanner scanner=new Scanner(System.in);
        double price=scanner.nextDouble();
        double month=scanner.nextDouble();
    String type=scanner.next();
    double sum=caculate(price,month,type);
    System.out.println("价格为"+sum);
    }


    public static double caculate ( double price,double month,String type) {
        if(month>=5&&month<=10){
            switch(type){
                case "头等舱":
                    price *= 0.9;
                    break;
                case "经济舱":
                    price *= 0.85;
                    break;
                default:
                    System.out.println("没有你输入的这种舱位");
            }
        }else {
            switch(type){
                case "头等舱":
                    price *= 0.7;
                    break;
                case"经济舱":
                    price *= 0.65;
                    break;
                default:
                    System.out.println("没有你输入的这种舱位");
            }
        }
        return price;
    }

}

(2)随机排名

package com.wqj;
import java.util.Random;
import java.util.Scanner;
public class test2 {
    public static void main(String[] args) {
        //目标:掌握数组与随机索引之间的互换
        Scanner scanner=new Scanner(System.in);
        System.out.println("随机排名的个数");
        int n=scanner.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++){
            arr[i]=scanner.nextInt();//存入每个排名的值
        }
        int []array=way(arr);
        for(int i=0;i< array.length;i++){
            System.out.print(i==array.length-1?  array[i]:array[i]+",");//三元运算符末尾不加逗号
        }
    }

    public static int[] way(int[] arr){
            for (int i = 0; i < arr.length; i++)
             {
                 Random r=new Random();
                      int index = r.nextInt(arr.length);
                       int temp=arr[i];
                       arr[i]=arr[index];
                       arr[index]=temp;
            }
            return arr;
    }
}

/*c
静态数组的定义:int[] arr=new int[]{元素,元素,元素};
int []arr={元素,元素}
动态数组的定义:int[] arr=new int[长度]
* */

(3) 生成随机验证码

package com.wqj;
import java.util.Scanner;
import java.util.Random;

public class test3 {
    public static void main(String[] args) {
        //目标:生成随机验证码,可以是数字,大小字母
        Scanner scanner = new Scanner(System.in);
        System.out.println("请设置验证码的位数");
        int n=scanner.nextInt();
        //调用
        char[] array=way(n);
        //输出结果
        for(int i=0;i<array.length;i++) {
            System.out.print((i==array.length-1?array[i]:array[i]+","));
        }
    }

    public static char[] way(int n){
        char[] arr = new char[n];
        Random r = new Random();
        for(int i = 0; i < n; i++) {
            int m = r.nextInt(3)+1;
            switch (m) {
                case 1://数字
                    arr[i]=(char)('0'+r.nextInt(10));//例如:将数字9转化为字符9
                    break;
                case 2://大写字母
                    arr[i]=(char)(r.nextInt(26)+65);
                    break;
                case 3://小写字母
                    arr[i]=(char)(r.nextInt(26)+97);
                    break;
            }
        }
        return arr;
    }


}




/*
另一种方法:
不用数组,用一个字符串code来存储
case 条件一: code+=(char)(r.nextInt());
这样就可以不用‘0’连接了
知识点
int n = 9;
char c = (char) (n + '0'); // 等价于 (char) (9 + 48),结果是 (char) 57,即 '9'
* */

(4) 评委随机打分(去掉最低和最高)

package com.wqj;
import javax.swing.plaf.synth.SynthOptionPaneUI;
import java.util.Scanner;
import java.util.Random;
public class test4 {
    public static void main(String[] args) {
        //目标:多个评委随机打分,范围为0到100,最后去掉一个最高分和最低分,求选手的平均成绩。
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入评委的人数");
        int n = scanner.nextInt();
        //调用
        double aver=way(n);
        System.out.println("选手的平均成绩为"+aver);
    }
    public static double way(int n) {
        int[] arr=new int[n];
        int sum=0,max=0,min=0;
        double average=0;
        Random r=new Random();
        for(int i=0;i<n;i++){
            int m=r.nextInt(101);
            arr[i]=m;
            sum=sum+arr[i];
        }     ///23 56  4 78  99
        max=arr[0];
        min=arr[0];
        for (int i = 0; i <n ; i++) {
            if(arr[i]>max){
                max=arr[i];
            }else{
                min=arr[i];
            }
        }
        for (int i = 0; i < n; i++) {
            System.out.println("第"+(i+1)+"个评委的成绩:"+(i==arr.length-1?arr[i]:arr[i]+","));
        }
        sum=sum-max-min;
        average=sum*1.0/(n-2);
        return average;
    }
}

 (5)密码加密

package com.wqj;
import java.util.Scanner;
import java.util.Random;
public class test5 {
    public static void main(String[] args) {
        //目标;对一个n位数的密码进行加密,每位数加5,再对10取余,最后将所有数字取反,得到一串新密码
        Scanner scanner=new Scanner(System.in);
        System.out.println("密码的位数:");
        int n=scanner.nextInt();
        int[] arr=new int [n];
        System.out.println("初始的密码:");
        for (int i = 0; i < n; i++) {
            arr[i]=scanner.nextInt();
        }
        int[] array=way(arr);
        System.out.println("加密后的新密码为");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
    public static int[] way(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            arr[i]+=5;
            arr[i]=arr[i]%10;
        }
        for (int i = 0, j=arr.length-1; i <=(arr.length/2); i++,j--) {
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        return arr;
    }
}

 (6)拷贝数组

package com.wqj;
public class test6 {
    public static void main(String[] args) {
        //目标:请把一个整形数组一摸一样的拷贝给另一个数组(开辟出另一个数组对象,堆内存中也有对应的区域)
        int[] arr=new int[]{99,55,77,33};
        int[] array=new int[arr.length];

        for (int i = 0; i < arr.length; i++) {
            array[i]=arr[i];
            System.out.println(array[i]);
        }
    }
}
/*
另一种
int[] array=arr;注意;这个不是拷贝数组,是把该数组变量赋值给另一个数组变量,俩个数组指向同一个数组对象,在堆内存中只开辟了一块区域
改变一个,另一个也会受影响。
* */

(7) 发红包

package com.wqj;
import java.util.Scanner;
import java.util.Random;
public class test7 {
    public static void main(String[] args) {
        // write your code
        System.out.println("请输入红包的数量");
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int[] arr=new int[n];
        //System.out.println("请输入红包金额");
        for (int i = 0; i <n ; i++) {
            System.out.println("设定第"+(i+1)+"个红包金额:");
            arr[i]=scanner.nextInt();
        }
        way(arr);
    }
    public static void way(int[] arr){
        Random r=new Random();
        int money;
        for (int i = 0; i < arr.length; i++) {
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入第"+(i+1)+"个中奖嘉宾的幸运号码:");
            scanner.nextInt();
            while(true) {
                int m = r.nextInt(arr.length);
                //System.out.println(m);
                if (arr[m] != 0) {
                    money = arr[m];
                    System.out.println("获得的红包为"+money+"元大礼包");   //注意:这里不可以为arr[i]=arr[m],不然arr[i]会被覆盖为0
                    // 这里将值存入一个整形变量,直接输出,若将数组返回main在输出,会陆续被零覆盖,所以找到一个输出一个。
                    arr[m] = 0;//标记过的索引后面不可以用
                    break;
                }
            }
        }
        return ;
    }
}

(8) 找素数

package com.wqj;
import java.util.Scanner;
public class test8 {
    public static void main(String[] args) {
    //目标:找素数  判断100到200之间有多少素数?
        //下列方法:核心:找符合条件的素数
        // 通过遍历,与1到该值之间除法取余测试,都符合,则为素数
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入区间范围n1和n2来表示起始值和最终值");
        int n1=scanner.nextInt();
        int n2=scanner.nextInt();
        int[] arr=new int[(n2-n1+1)];
        int count=0;
        for (int i = 0; i < arr.length; i++) {
            arr[i]=i+n1;
        }//存值
        for (int i = 0; i < arr.length ; i++) {
            if(arr[i]==2){
                System.out.println(arr[i]);
                count++;
                continue;//不进入后面循环,
            }
            for (int j= 2; j < (arr[i]); j++) {
                if ((arr[i]%j)==0) {
                  break;
                }
                else if(j==(arr[i]-1)){
                    System.out.println(arr[i]);
                    count++;
                }
            }
        }
        System.out.print("素数的总数为:"+count);
    }
}


/*
* 方法二:核心:排除不是素数的数!(推荐)
* 写一个循环,循环最后放要打印的数值,能走带最后,即为通过测试,是素数
* 测试条件:1到该值之间做除法,等于0,即为失败,跳出循环
* 跳出循环有俩种:
* (1)continue OUT //记得在第一个for之前加标签OUT
* (2)设立一个flag,再break;跳出除法循环,打印条件用if将此拦截
* */

(9)乘法表和三角形

package com.wqj;
import java.util.Scanner;
public class test9 {
    public static void main(String[] args) {
        //目标:打印输出9X9乘法表

        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                if (j != i) {
                    System.out.print(j + "x" + i + "=" + (j * i) + " ");
                } else {
                    System.out.println(j + "x" + i + "=" + (j * i) + " ");
                }
            }
        }
System.out.println("---------------------------------------------------------------------------------------");
        /*目标二;打印三角
          核心:可以分为好几个循环来看,最外层控制行,内部遍历几个循环,一个打印空格,一个负责打印*
         |   *                                            行数      空格      星星
         |  ***                                            1        3         1
         | *****                                           2        2         3
         |*******                                          3        1         5
         ---------------------------                       4        0         7
                                                           n       n-i       2i-1


         进阶:  将每排星星数的偶数列改为空格
         |   *
         |  * *
         | * * *
         |* * * *
         ——————————————
         */

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入三角的层数:");
        int n = scanner.nextInt();//层数
        System.out.println("进阶如图:");
        for (int i = 1; i <= n; i++) {

            for (int j = 1; j <= (n - i); j++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= (2 * i - 1); j++) {
                 if(j==(2*i-1)) {
                     System.out.println("*");
                 }else {
                     if(j%2!=0) {
                         System.out.print("*");
                     }else {
                         System.out.print(" ");
                     }
                 }
            }
        }
        System.out.println("-----------------------------------------------------------------------------------");
    }

}

(10) 福利双色球

package com.wqj;
import java.util.Scanner;
import java.util.Random;
public class test10 {
    public static void main(String[] args) {
        //目标:模拟双色球案例:
        // 红球范围为1—33,蓝球范围是1-16
        int[] arr=new int[7];//红色球+蓝色球
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你的中奖号码");

        for (int i=0;i<arr.length;i++) {
            while(true){
                System.out.println("请输入第"+(i+1)+"个号码");
                int number=scanner.nextInt();
                if (i!=arr.length-1) {//红球
                    if(number<1||number>33){
                        System.out.println("你输入的第"+(i+1)+"个号码超出范围,重新输入");
                    }else{
                        if(!exist(arr,number)){
                            arr[i]=number;
                            break;
                        }else {
                            System.out.println("你输入的第"+(i+1)+"个号码与之前的重复了,请重新输入");
                        };
                    }
                }else {//蓝球
                    if(number<1||number>16){
                        System.out.println("你输入的第"+(i+1)+"个号码超出范围,重新输入");
                    }else{
                        arr[i]=number;
                        break;
                    }
                }
            }
        }


        int count=0;

          count=way(arr);
        switch(count){
            case 61:
                System.out.println("恭喜你中大奖啦,喜提1000万奖金");
            break;
            case 60:
                System.out.println("恭喜你中大奖啦,喜提500万奖金");
                break;
            case 51:
                System.out.println("恭喜你中大奖啦,喜提3000奖金");
                break;
            case 50:
            case 41:
                System.out.println("恭喜你中大奖啦,200奖金");
                break;
            case 40:
            case 31:
            case 21:
                System.out.println("恭喜你中大奖啦,喜提10元奖金");
                break;
            case 11:
            case 1:
                System.out.println("恭喜你中大奖啦,喜提5元奖金");
                break;
            default:
                System.out.println("很遗憾你这次运气尚佳,没有获奖");
        }

    }


    public static int way(int[] arr){
        Random r=new Random();
        int red=0,blue=0,sum=0;
        int[] array=new int[arr.length];
        //(官方)系统设定的中奖号码
        for (int i = 0; i < arr.length; i++) {
            while (true) {
                if(i!=array.length-1) {
                    int number = r.nextInt(33) + 1;//红球
                    if(!exist(array,number)){
                        array[i]=number;
                        break;
                    }
                }else {
                    array[i]=r.nextInt(16)+1;//蓝球
                    break;
                }
            }
        }
        //进行对比,得出获奖的球数
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
               if(i!=arr.length-1){//红球进行匹配
                if(arr[i]==array[j]) {
                    red++;
                    break;
                }
                }else{//篮球进行匹配
                  if(arr[i]==array[j]){
                      blue++;
                      break;
                  }
               }
            }
        }
        //记录结果
        sum=red*10+blue;
        return sum;
    }
//检测号码是否与之前输入的号码重复
    public static boolean exist(int[] arr,int number){
        int flag=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==number){
                flag=1;
                break;
            }
        }
        if(flag==1){
            return true;
        }else {
            return false;
        }
    }
}

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值