异常和常用类和枚举习题

  1. 设计Person类,将性别属性设置为枚举类型。在测试类中,输出Person对象的时候,要求格式如下:

    Person {name = xiaoming, gender =}
    
    enum Gender{
        male("男"),Female("女");
        String sex;
    
        Gender(String sex) {
            this.sex = sex;
        }
    
        @Override
        public String toString() {
            return ""+sex;
        }
    }
    class Person{
        private String name;
    
        private Gender Male;
        public Person(){}
        public Person(String name, Gender male) {
            this.name = name;
            Male = male;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Gender getMale() {
            return Male;
        }
    
        public void setMale(Gender male) {
            Male = male;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", Gender=" + Male +
                    '}';
        }
    }
    public class Work1 {
        public static void main(String[] args) {
            Person person = new Person("小明",Gender.male);
    
            System.out.println(person);
        }
    }
    
  2. 在Person类中,添加一个方法,用来设置Person的性别。

    // 如果实参为 "男",将gender设置为 Gender.Male 
    // 如果实参为 "女",将gender设置为 Gender.Female 
    public void setGender(String gender);
    
    enum Gender {
        Male("男"), Female("女");
    
        private String desc;
    
        Gender(String desc) {
            this.desc = desc;
        }
    
        public static Gender getGender(String gender) {
            if (gender.equals("男")) {
                return Gender.Male;
            } else if (gender.equals("女")) {
                return Gender.Female;
            }
            return null;
        }
    
        @Override
        public String toString() {
            return this.desc;
        }
    }
    
    class Person {
        private String name;
        private Gender gender;
    
        public Person() {
        }
    
        public Person(String name, Gender gender) {
            this.name = name;
            this.gender = gender;
        }
    
        public void setGender(String gender) {
            this.gender = Gender.getGender(gender);
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", gender=" + gender +
                    '}';
        }
    }
    
    public class Work2 {
        public static void main(String[] args) {
            Person person = new Person("小明", Gender.Male);
            System.out.println(person);
    
            person.setGender("女");
            System.out.println(person);
        }
    }
    
  3. 设计一个方法,计算从控制台输入的两个数字的和,并处理各种输入的时候的异常

    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    public class Work3 {
        public static void main(String[] args) {
            add();
        }
    
        public static int add() {
            Scanner scanner = new Scanner(System.in);
    
            try {
                System.out.println("请输入一个数字:");
                int num1 = scanner.nextInt();
                System.out.println("请在输入一个数字:");
                int num2 = scanner.nextInt();
    
                return num1 + num2;
            } catch (InputMismatchException e) {
                //InputMismatchException:Java中捕获异常一种,检测是否为数字
                System.out.println("数字输入错误");
    
                return 0;
            }
        }
    }
    
  4. 小明去饭店吃饭,身上带了22块钱,随机产生[15, 30]范围的饭钱,如果小明的钱不够支付饭钱,抛出一个 NotEnoughMoneyException的运行时异常。

    import java.util.Random;
    
    class NotEnoughMoneyException extends RuntimeException {}
    
    class Person{
        private int money;  //身上钱的数量
    
        public Person(int money){
            this.money = money;
        }
    
        public void pay(int money) throws NotEnoughMoneyException{
            if(this.money>money){
                System.out.println("钱足够,支付成功!");
            }else{
                throw new NotEnoughMoneyException();
            }
        }
    }
    public class Work4 {
        public static void main(String[] args) {
            Person xiaoming = new Person(22);
            
            //随机生成饭钱
            Random random = new Random();
            int cost = random.nextInt(16)+15;
            
            //支付
            xiaoming.pay(cost);
        }
    }
    
  5. 【最难】设计一个方法,将一个数组中的元素随机排列

  • 利用随机数下标交换

    import java.util.Arrays;
    import java.util.Random;
    
    public class Work5 {
        public static void main(String[] args) {
            int[] arr = new int[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
            System.out.println(Arrays.toString(arr));
            sort(arr);
            System.out.println(Arrays.toString(arr));
        }
    
        public static void sort(int[] arr) {
            Random random = new Random();
            int temp = 0;
            for (int i = 0; i < arr.length; i++) {
                int num = random.nextInt(arr.length);
                temp = arr[i];
                arr[i] = arr[num];
                arr[num] = temp;
            }
        }
    }
    
  • 用类实现

    import java.util.Arrays;
    import java.util.Random;
    
    class ArrayTools{
        //将一个数组中的元素随机排列
        public static void shuffle(int[] array){
            //1.将原数组中的元素拷贝到新的数组中
            int[] copy = Arrays.copyOf(array,array.length);
            //2.遍历拷贝数组
            int i = 0;
            Random random = new Random();
            while(copy.length!=0){
                //3.随机一个下标
                int index = random.nextInt(copy.length);
                //4.将这个下标的元素拷贝到array中
                array[i++] = copy[index];
                //5.把这个元素从拷贝数组中删除
                copy = removeAt(copy,index);
            }
        }
    
        //删除指定下标位的元素
        public static int[] removeAt(int[] array,int index){
            //将index后的元素依次向前移
            System.arraycopy(array,index+1,array,index,array.length-index-1);
            return Arrays.copyOf(array,array.length-1);
        }
    }
    
    public class Work5 {
        public static void main(String[] args) {
            int[] array = new int[]{0,1,2,3,4,5,6,7,8,9,10};
            System.out.println("排序前"+Arrays.toString(array));
            ArrayTools.shuffle(array);
            System.out.println("排序后"+Arrays.toString(array));
        }
    }
    
  1. 修改课上练习三,在随机产生数字的同时也能随机产生花色,代码完成后每次运行程序时,都能随机出牌,如“梅花5”、“方块J”等

    import java.util.Random;
    
    public class Work6 {
        public static void main(String[] args) {
            computerPlayCard();//调用电脑出牌的函数
        }
        public static void computerPlayCard() {
            Random random = new Random();
            int count = 0;//定义了一个count没啥用,只是单纯的让循环终止,否则CPU会直接飙到100
            while (true) {
                int num = random.nextInt(13) + 1;//随机产生1~13的数
                int suit = random.nextInt(4) + 1;
                if (num < 11 && num > 1) {
                    System.out.println("电脑出啦一张"+Suit(suit) + num);
                } else if (num == 11) {
                    System.out.println("电脑出啦一张"+Suit(suit)+"J");
                } else if (num == 12) {
                    System.out.println("电脑出啦一张"+Suit(suit)+"Q");
                } else if (num == 1) {
                    System.out.println("电脑出啦一张"+Suit(suit)+"A");
                } else {
                    System.out.println("电脑出啦一张"+Suit(suit)+"K");
                }
                count++;
                if (count == 10) {//这里和上面的作用一样,就是没啥用
                    break;
                }
            }
        }
    
        public static String Suit(int suit){
            if(suit == 1)
                return "红桃";
            else if(suit == 2)
                return "方块";
            else if(suit == 3)
                return "黑桃";
            else
                return "梅花";
        }
    }
    

    (附加题)输入两个小数,先将他们的整数部分拿出求和, 如果大于10,就拿出他们的小数部分的求和,如果他们小数部分的和大于1.0 就输出“这两个数的小数部分大于1.0”,否则就说“这两个数的小数部分小于1.0”; 如果他们整数部分求和不大于10,就拿出他们的小数部分的求差,如果他们小数部分的差大于0.0 就输出“这两个数的小数部分的差大于 0.0”,否则就说“这两个数的小数部分的差小于0.0”;(嵌套if)

    import java.util.Scanner;
    
    public class Work6 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入两个小数:");
            double num1 = scanner.nextDouble();
            double num2 = scanner.nextDouble();
    
            System.out.println(test(num1,num2));
        }
        public static String test(double num1,double num2){
            int a = (int)Math.floor(num1);
            int b = (int)Math.floor(num2);
    
            if(a+b>10){
                return (num1-a)+(num2-b)>1.0? "这两个数的小数部分大于1.0":"这两个数的小数部分小于1.0";
            }else
                return (num1-a)-(num2-b)>0.0? "这两个数的小数部分的差大于 0.0":"这两个数的小数部分的差小于0.0";
    
        }
    }
    
  2. 获取系统的当前时间,并打印以下信息

    xxxx年xx月xx日 xx时xx分xx秒

    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Work7 {
        public static void main(String[] args) {
            //⾃定义时间格式
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM⽉dd⽇ hh时mm分ss秒");
            String dateStr = dateFormat.format(new Date());
            System.out.println(dateStr);
        }
    }
    
  3. 输出2~32之间6个偶数的和

    import java.util.Random;
    
    public class Work8 {
        public static void main(String[] args) {
            Random random = new Random();
            int sum = 0;
            int i = 0;
    
            while(true){
                int temp = 2 +random.nextInt(30);//产生2-32随机数
                if(temp%2==0){
                    sum += temp;
                    i++;
                }
                if(i==6)
                    break;
            }
            System.out.println(sum);
        }
    }
    
  4. 求圆面积结果保留5位小数

    import java.util.Scanner;
    
    public class Work9 {
        public static void main(String[] args) {
            System.out.println("输入圆的半径:");
            Scanner scanner = new Scanner(System.in);
            double r = scanner.nextDouble();
            double S = Math.PI*r*r;
            System.out.printf("圆的面积为:%.5f",S);
        }
    }
    
  5. 使用StringBuilder附加字符串

    import java.util.Random;
    
    /
    public class Work10 {
        public static void main(String[] args) {
            String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            for (int k = 0; k < 5; k++) {
                String strA = "";
                for (int i = 1; i <= 4; i++) {
                    Random ran = new Random();
                    int sui = ran.nextInt(36);//Random 0~36不会包括36的
                    strA += str.substring(sui, sui + 1);
                }
                System.out.println(strA);
            }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值