關于OOP第一階段的作業總結
閱讀提示:本文目錄導航,PC端頁面位于文章右側,移動端點擊文章標題右側小圖示,需下滑后(頂部圖片消失)目錄才完全顯示,可根據目錄跳轉文章位置,
一、前言
以下題目來源PTA題目集1-3,基本為Java的基本語法及一點面向物件的思想,
- 知識點:Java基本語法
(沒什么好講的),正則運算式 - 題量:適中
- 難度:除題目集7-3 一元多項式求導 無
二、設計與分析
1. 題目集一
輸入三角形三條邊,判斷該三角形為什么型別的三角形,
輸入格式:
在一行中輸入三角形的三條邊的值(實型數),可以用一個或多個空格或回車分隔,其中三條邊的取值范圍均為[1,200],
輸出格式:
(1)如果輸入資料非法,則輸出“Wrong Format”; (2)如果輸入資料合法,但三條邊不能構成三角形,則輸出“Not a triangle”; (3)如果輸入資料合法且能夠成等邊三角形,則輸出“Equilateral triangle”; (3)如果輸入資料合法且能夠成等腰直角三角形,則輸出“Isosceles right-angled triangle”; (5)如果輸入資料合法且能夠成等腰三角形,則輸出“Isosceles triangle”; (6)如果輸入資料合法且能夠成直角三角形,則輸出“Right-angled triangle”; (7)如果輸入資料合法且能夠成一般三角形,則輸出“General triangle”,
分析與心得: 先給輸入的三條邊排好序,可以減少很多判斷, 使用\(x^2 + y^2 = z^2\)判斷直角三角形時,若為浮點數會出現浮點誤差無法相等,如\(\sqrt2\)
核心代碼:
Arrays.sort(arr);
final double EPS = 1e-5;//寫-8 不行 這精度卡的,,,
if (arr[0] < 1 || arr[2] > 200)
System.out.print("Wrong Format");
else if (arr[0] + arr[1] <= arr[2])
System.out.print("Not a triangle");//wow 看錯題了,還以為和上一行輸出一樣
else if (arr[0] == arr[1] && arr[1] == arr[2])
System.out.print("Equilateral triangle");
else if (arr[0] == arr[1] || arr[1] == arr[2]) {
if (Math.abs(arr[0] * arr[0] + arr[1] * arr[1] - arr[2] * arr[2]) <= EPS)//卡精度??????
System.out.print("Isosceles right-angled triangle");
else
System.out.print("Isosceles triangle");
} else if (Math.abs(arr[0] * arr[0] + arr[1] * arr[1] - arr[2] * arr[2]) <= EPS)
System.out.print("Right-angled triangle");
else
System.out.print("General triangle");
2. 題目集二
要求:Main類中必須含有如下方法,簽名如下:
public static void main(String[] args);//主方法
public static boolean isLeapYear(int year) ;//判斷year是否為閏年,回傳boolean型別
public static boolean checkInputValidity(int year,int month,int day);//判斷輸入日期是否合法,回傳布林值
public static void nextDate(int year,int month,int day) ; //求輸入日期的下一天
輸入格式:
在一行內輸入年月日的值,均為整型數,可以用一到多個空格或回車分隔,
輸出格式:
當輸入資料非法及輸入日期不存在時,輸出“Wrong Format”;
當輸入日期合法,輸出下一天,格式如下:Next date is:年-月-日
分析與心得: 注意各月的天數需嚴格符合實際,求下一天時注意邊界進制,
核心代碼:
public static void nextDate() {
int[] monthDay = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isLeapYear(year))
monthDay[2]++;
if (day < monthDay[month])
day++;
else if (day == monthDay[month] && month < 12) {
month++;
day = 1;
} else if (day == monthDay[month] && month == 12) {
year++;
month = 1;
day = 1;
}
}
輸入格式:
在一行中輸入年月日的值以及n的值,可以用一個或多個空格或回車分隔,
輸出格式:
當輸入的年、月、日以及n的值非法時,輸出“Wrong Format”;
當輸入資料合法時,輸出“n days ago is:年-月-日”
分析與心得: 注意各月的天數需嚴格符合實際,求下一天時注意邊界進制,
核心代碼:
public static void beforeDate(int n) {
int[] monthDay = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isLeapYear(year))
monthDay[2]++;
if ((day - n) <= monthDay[month] && (day - n) >= 1) {
day = day - n;
} else if ((day - n) > monthDay[month] && month < 12) {
day = day - n - monthDay[month];
month++;
} else if ((day - n) < 1 && month > 1) {
month--;
day = day - n + monthDay[month];
} else if ((day - n) > monthDay[month] && month == 12) {
day = day - n - monthDay[month];
month = 1;
year++;
} else if ((day - n) < 1 && month == 1) {
month = 12;
day = day - n + monthDay[month];
year--;
}
}
3. 題目集三
要求:Date類結構如下圖所示:

三、踩坑心得
四、改進建議
五、總結
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/272429.html
標籤:Java
上一篇:OO第一次博客作業
下一篇:初學JVAVA題目總結
