Educoder–Java面向對象(第六章)- 常用類【筆記+參考代碼】
第一關
編程要求
請仔細閱讀右側代碼,根據方法內的提示,在Begin - End區域內進行代碼補充,具體任務如下:Demo類和Person類已經寫好,在測試類中創建Demo類對象d1,傳入輸入值num1, d1調用toString方法並打印輸出該值;
創建Demo類對象d2,同樣傳入輸入值num1,打印判斷d1和d2是否相等(實際是比較地址);
創建Person類對象p,傳入輸入值num2,打印判斷d1和p是否相等(實際是比較地址);
測試說明 補充完代碼後,點擊測評,平臺會對你編寫的代碼進行測試,當你的結果與預期輸出一致時,即爲通過。
測試輸入:100
100
預期輸出:
Demo:100
true
false
參考代碼
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.toString());
Demo d2=new Demo(num1);
if (d1.equals(d2)) {
System.out.println("true");
} else {
System.out.println("false");
}
/********* End *********/
// 創建Person類對象p,傳入輸入值num2,打印判斷d1和p是否相等(實際是比較地址)
/********* Begin *********/
Person p=new Person(num2);
if (d1.equals(p)) {
System.out.println("true");
} else {
System.out.println("false");
}
/********* 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;
}
}
第二關
編程要求
請仔細閱讀右側代碼,根據方法內的提示,在Begin - End區域內進行代碼補充,具體任務如下:編寫測試類,輸入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)。
測試說明 補充完代碼後,點擊測評,平臺會對你編寫的代碼進行測試,當你的結果與預期輸出一致時,即爲通過。
測試輸入:100
100
100
educoder
educoder
預期輸出:
false
true
true
true
false
true
參考代碼
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();
String bb = sc.next();
int c = sc.nextInt();
String str11 = sc.next();
String str22 = sc.next();
// 包裝類中“==”與equals的用法比較
// 值得注意的是,包裝類中的equals方法和String類一樣,都是重寫了Object類中的equals方法,因此比較的是內容而不是地址,
// 而“==”比較的依然是引用變量的地址,只是當包裝類型和與之相對應的基本類型進行“==”比較時會先做自動拆箱處理。
/********* Begin *********/
Integer a=new Integer(aa);
Integer b=Integer.parseInt(bb);
String str1=new String(str11);
String str2=new String(str22);
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 *********/
}
}
第三關
編程要求
請仔細閱讀右側代碼,根據方法內的提示,在Begin - End區域內進行代碼補充,具體任務如下:編寫測試類,輸入一個標準的網址,輸出其域名的主體;
將該主體轉換爲大寫,打印輸出;
具體輸出要求請看測試說明。
測試說明 補充完代碼後,點擊測評,平臺會對你編寫的代碼進行測試,當你的結果與預期輸出一致時,即爲通過。
測試輸入:https://www.educoder.net/
預期輸出:
educoder
EDUCODER
參考代碼
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 *********/
String str1=str.substring(12,str.lastIndexOf('.'));
if(str1.indexOf('.')>0){
str1=str1.substring(0,str1.indexOf('.'));
}
System.out.println(str1);
str1=str1.toUpperCase();
System.out.println(str1);
/********* End *********/
}
}
第四關
編程要求
請仔細閱讀右側代碼,根據方法內的提示,在Begin - End區域內進行代碼補充,具體任務如下:設計一個密碼的自動生成器:密碼由大寫字母/小寫字母/數字組成,生成六位隨機密碼。
分別以1、2、3作爲種子數創建Random對象,生成六位隨機密碼進行測試。
具體輸出要求請看測試說明。
測試說明 補充完代碼後,點擊測評,平臺會對你編寫的代碼進行測試,當你的結果與預期輸出一致時,即爲通過。
測試輸入:1
預期輸出:
NAvZuG
參考代碼
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);
pardStore[26+i]=(char)('a'+i);
}
for(int i=0;i<10;i++)
{
pardStore[52+i]= (char)('0' + i);
}
/********* End *********/
// 分別以1、2、3作爲種子數 生成6位隨機密碼
Scanner sc = new Scanner(System.in);
int seed = sc.nextInt();
/********* Begin *********/
Random r=new Random(seed);
String str="";
int[] arr=r.ints(6,0,62).toArray();
for(int i=0;i<6;i++)
{
str+=pardStore[arr[i]];
}
System.out.print(str);
/********* End *********/
}
}
第五關
編程要求
請仔細閱讀右側代碼,根據方法內的提示,在Begin - End區域內進行代碼補充,具體任務如下:編寫測試類,算一下你的出生日期到2020年10月1日總共有多少天;
具體輸出要求請看測試說明。
測試說明 補充完代碼後,點擊測評,平臺會對你編寫的代碼進行測試,當你的結果與預期輸出一致時,即爲通過。
測試輸入:1999-09-01
預期輸出:
你的出生日期距離2020年10月1日:7701天
參考代碼
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 *********/
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date d1=sdf.parse(line);
Date d2=sdf.parse("2020-10-01");
long diff=d2.getTime()-d1.getTime();
diff=diff/86400000;
System.out.println("你的出生日期距離2020年10月1日:"+diff+"天");
/********* End *********/
}
}
第六關
編程要求
請仔細閱讀右側代碼,根據方法內的提示,在Begin - End區域內進行代碼補充,具體任務如下:編寫測試類MathTest,輸入4個int類型數值,7個double類型數值;
分別輸出第一個數的平方根,第二個數的立方根,第三個數的第四個數次方,第五個數和第六個數的最大值、最小值,第七個數的絕對值,第八個數的ceil值,第九個數的floor值,第十個數的rint值,第十一個數的round值。
測試說明 補充完代碼後,點擊測評,平臺會對你編寫的代碼進行測試,當你的結果與預期輸出一致時,即爲通過。
測試輸入: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
參考代碼
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 *********/
}
}