Educoder -Java面向对象 - 常用类
第1关:Object类
1、编程要求:
-
Demo
类和Person
类已经写好,在测试类中创建Demo
类对象d1
,传入输入值num1
,d1
调用toString
方法并打印输出该值; -
创建
Demo
类对象d2
,同样传入输入值num1
,打印判断d1
和d2
是否相等(实际是比较地址); -
创建
Person
类对象p
,传入输入值num2
,打印判断d1
和p
是否相等(实际是比较地址);
2、测试说明:
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
测试输入:
100
100
预期输出:
Demo:100
true
false
3、代码展示:
package case1; import java.util.Scanner; public class ObjectTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num1 = sc.nextInt(); int num2 = sc.nextInt(); // 在测试类中创建Demo类对象d1,传入输入值num1, d1调用toString方法并打印输出该值 // 创建Demo类对象d2,同样传入输入值num1,打印判断d1和d2是否相等(实际是比较地址) /********* Begin *********/ Demo d1= new Demo(num1); System.out.println(d1); Demo d2=new Demo(num1); System.out.println(d1.equals(d2)); /********* End *********/ // 创建Person类对象p,传入输入值num2,打印判断d1和p是否相等(实际是比较地址) /********* Begin *********/ Person p= new Person(num2); System.out.println(d1.equals(p)); /********* End *********/ } } class Demo { private int num; public Demo(int num) { this.num = num; } public boolean equals(Object obj) // Object obj = new Demo() { if (!(obj instanceof Demo)) // 判断obj是否和Demo是同类 return false; Demo d = (Demo) obj; // 将父类的引用(Object)向下转换为子类(Demo) return this.num == d.num; } public String toString() { return "Demo:" + num; // 返回对象的值(每一个对象都有自己的特定的字符串) } } class Person { private int num; public Person(int num) { this.num = num; } }
第2关:JAVA基础类型包装类-练习
1、编程要求:
-
编写测试类,输入
int
型值aa
传递给Integer
类对象a
,String
型值bb
传递给Integer
类对象b
,输入int
型值c
,aa
、bb
、c
对应的数值相等; -
输入
String
型值str11
传递给String
类对象str1
,输入String
型值str22
传递给String
类对象str2
,str1
和str2
对应的内容相同; -
打印输出
a == b
、a == c
、b == c
、a.equals(b)
; -
打印输出
str1 == str2
、str1.equals(str2)
。
2、测试效果:
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
测试输入:
100
100
100
educoder
educoder
预期输出:
false
true
true
true
false
true
3、代码展示:
package case2; import java.util.Scanner; public class WrapperTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int aa = sc.nextInt(); Integer a= new Integer(aa); String bb = sc.next(); Integer b= new Integer(bb); int c = sc.nextInt(); String str11 = sc.next(); String str1 = str11; String str22 = sc.next(); String str2 = str22; // 包装类中“==”与equals的用法比较 // 值得注意的是,包装类中的equals方法和String类一样,都是重写了Object类中的equals方法,因此比较的是内容而不是地址, // 而“==”比较的依然是引用变量的地址,只是当包装类型和与之相对应的基本类型进行“==”比较时会先做自动拆箱处理。 /********* Begin *********/ System.out.println(a==b); System.out.println(a==c); System.out.println(b==c); System.out.println(a.equals(b)); System.out.println(str1 ==str2); System.out.println(str1.equals(str2)); /********* End *********/ } }
第3关:String&StringBuilder&StringBuffer类-练习
1、编程要求:
-
编写测试类,输入一个标准的网址,输出其域名的主体;
-
将该主体转换为大写,打印输出;
-
具体输出要求请看测试说明。
2、测试效果:
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
测试输入:
https://www.educoder.net/
预期输出:
educoder
EDUCODER
3、代码展示:
package case3; import java.util.Scanner; public class StringTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); // String substring(int start,int end) // 截取字符串,传入的两个参数分别为要截取边界的下标 // 在java api 中,通常使用两个数字表示范围时,都是含头不含尾,即包含起始下标对应的内容,但不包含结束下标的处对应的内容 // String toUpperCase() 将当前字符串中的英文部分转换为全大写 /********* Begin *********/ int a=str.indexOf(".",12); String str1 =str.substring(12,a); System.out.println(str1); System.out.println(str1.toUpperCase()); /********* End *********/ } }
第4关:Random类
1、编程要求:
-
设计一个密码的自动生成器:密码由大写字母/小写字母/数字组成,生成六位随机密码。
-
分别以
1
、2
、3
作为种子数创建Random
对象,生成六位随机密码进行测试。 -
具体输出要求请看测试说明。
2、测试效果:
测试输入: 1
预期输出: NAvZuG
3、代码展示:
package case4; //密码的自动生成器:密码由大写字母/小写字母/数字组成,生成六位随机密码 import java.util.Random; import java.util.Scanner; public class RandomTest { public static void main(String[] args) { // 定义一个字符型数组 char[] pardStore = new char[62]; // 把所有的大写字母放进去 把所有的小写字母放进去 把0到9放进去 /********* Begin *********/ for (int i = 0; i < 26; i++) { pardStore[i]=(char)('A'+i); } for (int i = 26; i < 52; i++) { pardStore[i]=(char)('a'+(i-26)); } for (int i = 52; i < 62; i++) { pardStore[i]=(char)('0'+(i-52)); } /********* End *********/ // 分别以1、2、3作为种子数 生成6位随机密码 Scanner sc = new Scanner(System.in); int seed = sc.nextInt(); /********* Begin *********/ Random r= new Random(seed); for (int i = 0; i < 6; i++) { int n = r.nextInt(62); System.out.print(pardStore[n]); } /********* End *********/ } }
第5关:Date类和SimpleDateFormat类的用法
1、编程要求:
-
编写测试类,算一下你的出生日期到2020年10月1日总共有多少天;
-
具体输出要求请看测试说明。
2、测试说明:
测试输入:
1999-09-01
预期输出:
你的出生日期距离2020年10月1日:7701天
3、代码展示:
package case5; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class DateTest { public static void main(String[] args) throws ParseException { // 键盘录入你的出生年月日 格式为yyyy-MM-dd // 把该字符串转换为一个日期 // 通过该日期得到一个毫秒值 // 获取2020年10月1日的毫秒值 // 两者想减得到一个毫秒值 // 把该毫秒值转换为天 打印输出 Scanner sc = new Scanner(System.in); String line = sc.nextLine(); /********* Begin *********/ // 将字符串转换为date类型 SimpleDateFormat StoDate = new SimpleDateFormat("yyyy-MM-dd"); Date birthdayDate = StoDate.parse(line); // 获取当前日期 Date nowDate = StoDate.parse("2020-10-01"); // 转为毫秒值进行换算 long nowSecond = nowDate.getTime(); long birthdaySecond = birthdayDate.getTime(); long second = nowSecond-birthdaySecond; System.out.println("你的出生日期距离2020年10月1日:"+second/1000/60/60/24+"天"); /********* End *********/ } }
第6关:Math类
1、编程要求:
-
编写测试类
MathTest
,输入4
个int
类型数值,7
个double
类型数值; -
分别输出第一个数的平方根,第二个数的立方根,第三个数的第四个数次方,第五个数和第六个数的最大值、最小值,第七个数的绝对值,第八个数的
ceil
值,第九个数的floor
值,第十个数的rint
值,第十一个数的round
值。
2、测试说明:
测试输入:
25
27
4
3
3.5
5.5
-8.8
10.8
9.6
10.62
11.51
预期输出:
5.0
3.0
64.0
5.5
3.5
8.8
11.0
9.0
11.0
12
3、代码展示:
package case6; import java.util.Scanner; import java.lang.Math; public class MathTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a1 = sc.nextInt(); int a2 = sc.nextInt(); int a3 = sc.nextInt(); int a4 = sc.nextInt(); double a5 = sc.nextDouble(); double a6 = sc.nextDouble(); double a7 = sc.nextDouble(); double a8 = sc.nextDouble(); double a9 = sc.nextDouble(); double a10 = sc.nextDouble(); double a11 = sc.nextDouble(); /********* Begin *********/ System.out.println(Math.sqrt(a1)); System.out.println(Math.cbrt(a2)); System.out.println(Math.pow(a3,a4)); System.out.println(Math.max(a5,a6)); System.out.println(Math.min(a5,a6)); System.out.println(Math.abs(a7)); System.out.println(Math.ceil(a8)); System.out.println(Math.floor(a9)); System.out.println(Math.rint(a10)); System.out.println(Math.round(a11)); /********* End *********/ } }