JavaSE基础——练习题

不积跬步无以至千里;不积小流无以成江海。

涉及到的知识点:

  • 变量、数组
  • 运算符:基本运算符、关系运算符、逻辑运算符......
  • 程序流程控制:if、switch;for、while;死循环、嵌套循环
  • 跳转关键字:break、continue、return。
  • 方法等等

1、需求:机票价格按淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。机票的最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折;淡季(11月到来年4月)头等舱7折,经济舱6.5折。

public static void main(String[] args) {
        //需求:机票价格按淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
        //机票的最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折;
        // 淡季(11月到来年4月)头等舱7折,经济舱6.5折。
        Scanner sc = new Scanner(System.in );
        //1、让用户输入机票原价,月份,舱位类型

        System.out.println("请输入机票原价: ");
        double money = sc.nextDouble();

        System.out.println("请输入月份(1-12月): ");
        int month = sc.nextInt();

        System.out.println("请输入舱位类型:头等舱/经济舱: ");
        String type = sc.next();

        // 4、调用方法统计结果:
        System.out.println("机票优惠后的价格是: " + calc(money,month,type));
    }

    /**
     2、定义方法接收信息,统计优惠后的价格返回
     */
    public static double calc(double money , int month , String type){
        //3、判断用户选择的信息情况
        if (month >= 5 && month <=10){
            //旺季
            switch (type){
                case "头等舱" :
                    money *=0.9; // money = money * 0.9;
                    break;
                case "经济舱" :
                    money *=0.85; // money = money * 0.8;
                    break;
                    default:
                        System.out.println("您输入的舱位类型有误--");
                        money = -1; //表示当前无法计算价格!
            }
        }else if (month == 11||month == 12 || month >=1 && month <=4){
            //淡季
            switch (type) {
                case "头等舱":
                    money *= 0.7; // money = money * 0.7;
                    break;
                case "经济舱":
                    money *= 0.65; // money = money * 0065;
                    break;
                default:
                    System.out.println("您输入的舱位类型有误--");
                    money = -1; // 表示当前无法计算价格!
            }
        }else{
            System.out.println("对不起,您输入的月份有问题---");
            money = -1; // 表示当前无法计算价格!
        }
            return money; //最终的价格。
    }

2、找素数。判断101-200之间有多少素数,并输出所有素数 素数:只能被1和它本身整除,不能被其他正整数整除。

/*
    分析:101-200采用循环可以拿到,每拿到一个数,判断它是否是素数
    判断规则:从2开始遍历到该数字的一半的数据,看有没有数据能整除它,如果有,不是素数;如果没有,是素数。
     */
    public static void main(String[] args) {
        // 1、定义一个循环,找到101 到200之间的全部数据
        for (int i = 101; i <= 200; i++) {
            // i= 101 102 。。。。。200

            //信号位:标记
            boolean flag = true;//一开始认为当前数据是素数。

            //2、判断当前遍历的这个数据是否是素数
            for (int j = 2; j < i/ 2; j++) {
                if (i % j == 0){
                    flag = false;
                    break;
                }
            }
            //3、根据判断的结果选择是否输出这个数据,是素数则输出
            if (flag){
                System.out.print(i + "\t");
            }
        }
    }

3、开发验证码:需求:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

 分析:1、定义一个方法,生成验证码返回:方法参数是位数,方法的返回值类型是String。
          2、方法内部,使用for循环生成指定位数的随机字符,并连接。
          3、把连接好的随机字符作为一组验证码返回
     */
    public static void main(String[] args) {
        //5、调用生成验证码的方法
        String code = Code(5);
        System.out.println("生成验证码是:" + code);
//        System.out.println(Code(5));//简写
    }

    //1、定义一个方法,生成验证码返回,方法参数为:int a 返回值类型为String。
    //num指的是几位验证码
    public static String Code (int a ){
        //定义一个字符串接随机生成的字母或数字
        String code = "";
        //2、遍历num位数的随机字符char
        for (int i = 0; i < a; i++) {
            Random r = new Random();
            //3、随机生成三种(数字1,大写字母2,小写字母3)
            int type = r.nextInt(3)+1;
            //4、使用switch,1时生成数字,2时生成大写字母,3时生成小写字母。
            switch (type){
                case 1:
                    code += r.nextInt(10);//0-9
                    break;
                case 2:
                    //使用强制类型转换,转换成char类型。
                    char letter1 = (char)(r.nextInt(26)+65);//大写字符(A:65 Z:65+25) (0-25) + 65
                    code += letter1;
                    break;
                case 3:
                    //使用强制类型转换,转换成char类型。
                    char letter2 = (char)(r.nextInt(26)+97);//小写字符(a:97 z:97+25) (0-25) + 97
                    code += letter2;
                    break;
            }
        }
        return code;
    }

4、数组元素复制。需求:把一个数组中的元素复制到另一个新数组中去

    分析:1、定义一个打印数组的方法
          2、定义一个复制数组的方法。输入原始数组的长度,将原始数组的元素复制给新数组
          两个方法都没有返回值类型
          3、调用方法实现数组复制
     */
    public static void main(String[] args) {
        int arr1 [] = {11,22,33,44,55,66};
        int arr2 [] = new int[arr1.length];
        copy(arr1,arr2);

        printArray(arr1);
        printArray(arr2);
    }

    //1、打印数组的方法
    public static void printArray(int arr[]){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");//\t代表空格的意思。
        }
        System.out.println("]");
    }

    //2、复制的方法
    //a是指数组的长度
    public static void copy(int arr1[] , int arr2 []){
        //数组复制
        for (int i = 0; i < arr2.length; i++) {
            arr2[i] = arr1[i];
        }
    }

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

    /**
     * 分析:1、使用数组,接到六名评委的打分分数范围为0-100
     * 2、定义变量:得分之和sum,最高分max,最低分min
     * 遍历数组,求和。在找出最高分和最低分
     * 3、输出最后得分为sum - max - min /数组长度-2
     */

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //1、定义一个长度为6的数组
        int array [] = new int[6];
        //2、遍历数组,输入打的分数
        for (int i = 0; i < array.length; i++) {
            System.out.println("输入第" + (i+1) + "位评委的打分(0-100之间的整数):");
            array[i] = sc.nextInt();//把输入的数,存入到相应索引的位置上去。
        }
        printArray(array);//可以打印出来数组看一下。

        //3、定义变量:得分之和sum,最高分max,最低分min
        int sum = 0;
        int max = array[0];
        int min = array[0];//默认最大值和最小值都是数组里的第一个值。

        for (int i = 0; i < array.length; i++) {
            sum += array[i];//遍历数组求和
            //找数组里的最大值:
            if (array[i] > max){
                max = array[i];//替换最大值变量里的值
            }
            //找数组里的最小值:
            if (array[i] < min){
                min = array[i];//替换最小值变量里的值
            }
        }

        //4、统计平均分即可
        double result = (sum - max - min) / (array.length-2);
        System.out.println("去掉一个最高分,去掉一个最低分,选手的最后得分为:" + result);
    }

    //打印数组的方法
    public static void printArray(int arr[]){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");//\t代表空格的意思。
        }
        System.out.println("]");
    }

6、需求:数据加密:某系统的数字密码:比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上5, 再对10求余,最后将所有数字反转,得到一串新数。

/**
     *       1  9  8  3
     *  +5   6  14 13 8
     *  %10  6  4  3  8
     *  反转 8  3  4  6
     */

    /*、
    思考,如何给数字解密呢???
     */

    public static void main(String[] args) {
        //1、定义一个数组存入要加密的数字
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要加密的数字的位数:");
        int num = sc.nextInt();
        //定义一个num位长度的数组
        int array [] = new int[num];

        //2、遍历数组将要加密的数字放进去
        for (int i = 0; i < array.length; i++) {
            System.out.println("请输入要加密的第" + (i+1) + "个数字(1-9):");
            array[i] = sc.nextInt();
        }
//        printArray(array);//可以打印出来数组看一下//[1	9	8	3	]
        //3、将数组中的数字进行加密
        for (int i = 0; i < array.length; i++) {
            //每位数加5
            array[i] += 5;
            //对10取余
            array[i] %= 10;
        }
//        printArray(array);//[6	4	3	8	]
        //                   i          j
        //4、将所有数字反转(换数组元素的位置)重点
        //定义两个变量i和j ,分别在数组的首尾位置
        //i变量往后走,j变量往前走,同步交换双方位置处的值
        //当i < j时停止交换。
        for (int i = 0 , j = array.length-1 ; i < j; i++ , j--) {
            //交换两者位置的值。
                int temp = array[j];
                array[j] = array[i];
                array[i] = temp;
        }
        printArray(array);//[8	3	4	6	]
    }

    //打印数组的方法
    public static void printArray(int arr[]){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");//\t代表空格的意思。
        }
        System.out.println("]");
    }

7、案例:双色球系统-业务分析、随机生成一组中奖号码

投注号码由6个红色球号码和1个蓝色球号码组成。

红色球号码从1-33中选择;蓝色球号码从1-16中选择。

中奖条件和奖金表: 

一等奖:红球命中6个,蓝球命中1个:最高1000万 ;

二等奖:红球命中6个,蓝球命中0个:最高500万 ;

三等奖:红球命中5个,蓝球命中1个:3000元 ;

四等奖:红球命中4个,蓝球命中1个或者红球命中5个,蓝球命中0个:200元 ;

五等奖:红球命中3个,蓝球命中1个或者红球命中4个,蓝球命中0个:10元 ;

六等奖:红球命中3个以下,蓝球命中1个:5元。

//1、随机生成一组中奖号码的方法
    //2、定义一个用户输入投注号码的方法
    //3、对比用户投注号码与中奖号码,得到命中红球和蓝球的个数
    //4、根据命中个数输出获得什么奖项
    public static void main(String[] args) {
        //1、
        int [] luckNumber = winningNumber();
        //2、
        int [] userNumber = usersNumber();

        //3、
        result(luckNumber,userNumber);

    }

    //3、对比用户投注号码与中奖号码,得到命中红球和蓝球的个数,根据命中个数输出获得什么奖项
    public static void result (int[] arr1 , int [] arr2){
        /*
        对比用户投注号码与中奖号码
        [24	33	18	13	9	32	8	]
        [24	33	18	13	9	32	8	]
         */
        //用两个变量接红球和蓝球个数
        int redBallNum = 0;
        int blueBallNum = 0;
        //比较红球号码相同的个数
        for (int i = 0; i < arr1.length-1; i++) {
            for (int j = 0; j < arr2.length-1; j++) {
                if (arr1[i] == arr2[j]){
                    redBallNum += 1;
                    break;
                }
            }
        }
        //判断蓝球相同不
        /*if (arr1[arr1.length-1] == arr2[arr2.length-1]){
            blueBallNum = 1;
        }else{
            blueBallNum = 0;
        }*/
        blueBallNum = arr1[arr1.length-1] == arr2[arr2.length-1] ? 1 : 0 ;

        System.out.println("中奖号码是:");
        printArray(winningNumber());//打印随机的中奖号码看一下
        System.out.println("您投注的号码是:");
        printArray(usersNumber());//打印用户投注的号码看一下
        System.out.println("您命中的红球数量为:" + redBallNum);
        System.out.println("您是否命中蓝球:" + (blueBallNum == 1? "是":"否"));


        if (redBallNum == 6 && blueBallNum == 1){
            System.out.println("恭喜您,中了一等奖,最高1000万。");
        }else if (redBallNum == 6 && blueBallNum == 0){
            System.out.println("恭喜您,中了二等奖,最高500万。");
        }else if (redBallNum == 5 && blueBallNum == 1){
            System.out.println("恭喜您,中了三等奖,3000元。");
        }else if ((redBallNum == 4 && blueBallNum == 1) || (redBallNum == 5 && blueBallNum == 0)){
            System.out.println("恭喜您,中了四等奖,200元。");
        }else if ((redBallNum == 3 && blueBallNum == 1) || (redBallNum == 4 && blueBallNum == 0)){
            System.out.println("恭喜您,中了五等奖10元。");
        }else if (redBallNum < 3){
            System.out.println("恭喜您,中了六等奖5元。");
        }else{
            System.out.println("感谢你为彩票事业做出的贡献,您本次没有中奖。");
        }

    }



    //2、定义一个用户输入投注号码的方法
    public static int [] usersNumber(){
        //1、定义一个7位的数组接用户猜测的七位数字
        int [] numbers = new int[7];
        //2、用户输入猜测的红球数字
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < numbers.length-1; i++) {
            System.out.println("请输入您猜测的第" +(i+1)+ "个红球数字(1-33)(要求不重复):");
            numbers[i] = sc.nextInt();
        }
        //2、用户输入猜测的蓝球数字
        System.out.println("请输入您猜测的蓝球数字(1-16):");
        numbers[numbers.length-1] = sc.nextInt();
        return numbers;
    }


    //1、随机生成一组中奖号码的方法
    public static int [] winningNumber(){
        Random r = new Random();
        //1、定义一个数组接一个中奖的七位号码
        int numbers [] = new int[7];
        //2、遍历数组,随机生成中奖的号码(红球)(1-33):
        for (int i = 0; i < numbers.length-1; i++) {
/*            numbers[i] = r.nextInt(33)+1;
            //判断它是否重复方法1
            for (int j = 0; j < i; j++) {
                if (numbers[i] == numbers[j]){
                    i--;
                    break;
                }
            }*/
            //判断是否重复方法2
            while (true){
                //定义一个临时数据生成随机数
                int data = r.nextInt(33)+1;
                //定义一个标记位
                Boolean flag = true;
                for (int j = 0; j < i; j++) {
                    if (data == numbers[j]){
                        //数字重复时,输出false
                        flag = false;
                        break;
                    }
                }
                //说明没有重复数字,可以将数据放到数组里去了
                if (flag){
                    numbers[i] = data;
                    break;
                }
            }
        }
        //3、随机生成中奖的蓝球号码
        numbers[numbers.length-1] = r.nextInt(16) + 1;
        return numbers;
    }

    //打印数组的方法
    public static void printArray(int arr[]){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");//\t代表空格的意思。
        }
        System.out.println("]");
    }

8、实现一个简单的英中学员状态转换器: 输入表1中学员状况英文单词的第一个字母(大小写均可), 根据输入来判断学员学习状态,并输出学员状态的中文形式。 用户可重复输入进行转换,输入n退出系统。运行效果如图1所示。

JavaSE基础——练习题_第1张图片

 使用GUI的JOptionPane方法:

大家可以看这位博主写的,链接如下:

JOptionPane总结_flying_coder的博客-CSDN博客_joptionpane最近在做swing程序中遇到使用消息提示框的,JOptionPane类其中封装了很多的方法。很方便的,于是就简单的整理了一下。1.1 showMessageDialog 显示一个带有OK按钮的模态对话框。下面是几个使用showMessageDialog的例子:Java代码  JOptionPane.showMessageDialog(null, "友情提示"https://blog.csdn.net/qwezhaohaihong/article/details/78668549

 public static void main(String[] args) {
        JOptionPane.showMessageDialog(null,"* * * * * *欢迎使用学员状态转换器* * * * * *");
       input();
    }

    //定义一个输入学员状态的方法
    public static void input(){
        String  letter = JOptionPane.showInputDialog("请输入学员状态的英文单词:");
        //使用switch循环
        switch (letter){
            case "E":
            case"e":
                JOptionPane.showMessageDialog(null,"优");
                isBack();
                break;
            case "G":
            case "g":
                JOptionPane.showMessageDialog(null,"良");
                isBack();
                break;
            case "S":
            case "s":
                JOptionPane.showMessageDialog(null,"中");
                isBack();
                break;
            case "F":
            case "f":
                JOptionPane.showMessageDialog(null,"差");
                isBack();
                break;
            default:
                JOptionPane.showMessageDialog(null,"输入错误,无法转换");
        }
    }

    //定义一个您想继续吗(是否退出)的方法
    public static void isBack(){
        String  letter = JOptionPane.showInputDialog("您想继续吗?(y(继续)/n(退出系统))");
        if (letter.equals("y")){
            input();
        }else if (letter.equals("n")){
            JOptionPane.showMessageDialog(null,"退出系统");
        }else{
            JOptionPane.showMessageDialog(null,"输入错误,请重新输入:");
            isBack();
        }
    }

你可能感兴趣的:(JavaSE基础,java)