-
设计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); } }
-
在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); } }
-
设计一个方法,计算从控制台输入的两个数字的和,并处理各种输入的时候的异常
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; } } }
-
小明去饭店吃饭,身上带了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); } }
-
【最难】设计一个方法,将一个数组中的元素随机排列
-
利用随机数下标交换
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)); } }
-
修改课上练习三,在随机产生数字的同时也能随机产生花色,代码完成后每次运行程序时,都能随机出牌,如“梅花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"; } }
-
获取系统的当前时间,并打印以下信息
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); } }
-
输出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); } }
-
求圆面积结果保留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); } }
-
使用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); } } }