前言
這學(xué)期才開始接觸Java,之前只學(xué)了C語言,所以一開始寫題目的代碼的時候?qū)ava的眾多函數(shù)和語法不是太熟悉,一開始就上手寫代碼有點不適應(yīng)。
??關(guān)于類:
1、類似C中的struct,構(gòu)造函數(shù)、內(nèi)置方法(函數(shù) )都比較相似
2、盡量避免代碼的重復(fù),把private和public的方法搞清晰。
3、把我們需要解決的問題進(jìn)行拆分,拆得好就寫得快
三次題目集的知識點、題量、難度等情況
(對于重難點題目將會給出完整題目)
第一次作業(yè):1、 身體質(zhì)量指數(shù)(BMI)測算? 2、NCHU_奇數(shù)求和? 3、NCHU_房產(chǎn)稅費計算? 4、游戲角色選擇??5、NCHU_學(xué)號識別 6、NCHU_巴比倫法求平方根近似值 7、二進(jìn)制數(shù)值提取 8、判斷三角形類型 9、長度質(zhì)量計量單位換算
第一次作業(yè)較為簡單,熟悉了java的一些基本操作,和一些簡單函數(shù)的運用。
第二次作業(yè):1、成績計算-1-類、數(shù)組的基本運用
2、成績計算-2-關(guān)聯(lián)類
創(chuàng)建成績類,包含:
屬性:平時成績(int)、期末成績(int)
方法:計算總成績(計算規(guī)則:平時成績*0.4+期末成績*0.6,保留整數(shù)部分,小數(shù)部分直接丟棄)
創(chuàng)建學(xué)生類,包含:
屬性:學(xué)號(String)、姓名(String)、語文成績(成績類)、數(shù)學(xué)成績(成績類)、物理成績(成績類)
方法:計算總分、計算平均分
輸入3個學(xué)生的信息,將每個學(xué)生的信息封裝在一個學(xué)生對象中。
按輸入順序依次輸出3個學(xué)生的總分、平均分(精確到小數(shù)點后兩位,舍去部分按四舍五入規(guī)則計入最后一位)。
浮點數(shù)保留小數(shù)的相關(guān)知識可參考:https://blog.csdn.net/huaishuming/article/details/17752365
注意:未用學(xué)生類對象封裝數(shù)據(jù)的,本題計0分
?文章來源地址http://www.zghlxwxcb.cn/news/detail-710469.html
輸入格式:
依次輸入3個學(xué)生的每門課成績,每個學(xué)生成績信息格式:
學(xué)號+英文空格+姓名+英文空格+課程名+英文空格+平時成績+英文空格+期末成績
注:3個學(xué)生的課程順序可能會不一致
例如:
22201311 張琳 語文 70 80
22201311 張琳 數(shù)學(xué) 85 89
22201311 張琳 物理 75 83
22201312 黃昊 語文 66 78
22201312 黃昊 數(shù)學(xué) 76 82
22201312 黃昊 物理 83 82
22201313 李少辰 語文 86 76
22201313 李少辰 數(shù)學(xué) 78 76
22201313 李少辰 物理 87 76
輸出格式:
3個學(xué)生信息,每個學(xué)生信息格式:
學(xué)號+英文空格+姓名+英文空格+總成績+英文空格+平均分
例如:
22201311 張琳 242 80.67
22201312 黃昊 234 78.00
22201313 李少辰 236 78.67
?文章來源:http://www.zghlxwxcb.cn/news/detail-710469.html
輸入樣例:
在這里給出一組輸入。例如:
22201311 張琳 語文 70 80
22201311 張琳 數(shù)學(xué) 85 89
22201311 張琳 物理 75 83
22201312 黃昊 語文 66 78
22201312 黃昊 數(shù)學(xué) 76 82
22201312 黃昊 物理 83 82
22201313 李少辰 語文 86 76
22201313 李少辰 數(shù)學(xué) 78 76
22201313 李少辰 物理 87 76
輸出樣例:
在這里給出相應(yīng)的輸出。例如:
22201311 張琳 242 76.67 84.00 80.67
22201312 黃昊 234 75.00 80.67 78.00
22201313 李少辰 236 83.67 76.00 78.67
?
代碼長度限制16 KB
時間限制400 ms
內(nèi)存限制64 MB
?
3、有重復(fù)的數(shù)據(jù) 4、去掉重復(fù)的數(shù)據(jù) 5、面向?qū)ο缶幊?封裝性) ?6、GPS測繪中度分秒轉(zhuǎn)換
7、菜單計價程序-1
某飯店提供4種菜,每種菜品的基礎(chǔ)價格如下:
西紅柿炒蛋 15
清炒土豆絲 12
麻婆豆腐 12
油淋生菜 9
設(shè)計點菜計價程序,根據(jù)輸入的訂單,計算并輸出總價格。
訂單由一條或多條點菜記錄組成,每條記錄一行,最后以"end"結(jié)束
每條點菜記錄包含:菜名、份額兩個信息。
份額可選項包括:1、2、3,分別代表小、中、大份)
不同份額菜價的計算方法:
小份菜的價格=菜品的基礎(chǔ)價格。
中份菜的價格=菜品的基礎(chǔ)價格1.5。
小份菜的價格=菜品的基礎(chǔ)價格2。
如果計算出現(xiàn)小數(shù),按四舍五入的規(guī)則進(jìn)行處理。
?
參考以下類的模板進(jìn)行設(shè)計:
菜品類:對應(yīng)菜譜上一道菜的信息。
Dish {
String name;//菜品名稱
int unit_price; //單價
int getPrice(int portion)//計算菜品價格的方法,輸入?yún)?shù)是點菜的份額(輸入數(shù)據(jù)只能是1/2/3,代表小/中/大份)
}
菜譜類:對應(yīng)菜譜,包含飯店提供的所有菜的信息。
Menu {
Dish[] dishs ;//菜品數(shù)組,保存所有菜品信息
Dish searthDish(String dishName)//根據(jù)菜名在菜譜中查找菜品信息,返回Dish對象。
}
點菜記錄類:保存訂單上的一道菜品記錄
Record {
Dish d;//菜品
int portion;//份額(1/2/3代表小/中/大份)
int getPrice()//計價,計算本條記錄的價格
}
訂單類:保存用戶點的所有菜的信息。
Order {
Record[] records;//保存訂單上每一道的記錄
int getTotalPrice()//計算訂單的總價
Record addARecord(String dishName,int portion)
//添加一條菜品信息到訂單中。
}
輸入格式:
每條點菜記錄的格式:
菜名+空格(英文)+份額
注:份額可輸入(1/2/3), 1代表小份,2代表中份,3代表大份。
最后一條記錄以“end”結(jié)束。
輸出格式:
訂單上所有菜品的總價(整數(shù)數(shù)值),每份菜
如果訂單中包含不能識別的菜名,則在總價之前輸出“** does not exist”,**是不能識別的菜名
?
輸入樣例:
在這里給出一組輸入。例如:
麻婆豆腐 2
西紅柿炒蛋 3
End
輸出樣例:
在這里給出相應(yīng)的輸出。例如:
48
?
輸入樣例1:
訂單中包含不存在的菜品記錄。例如:
麻婆豆腐 2
炒脆肚 2
西紅柿炒蛋 3
End
輸出樣例1:
在這里給出相應(yīng)的輸出。例如:
炒脆肚 does not exist
48
?
代碼長度限制 16 KB
時間限制 400 ms
內(nèi)存限制 64 MB
?
8、jmu-java-日期類的基本使用
第二次作業(yè)的第一、二題學(xué)生成績計算,七題菜單計價較為復(fù)雜,涉及到的類比較多。這三題的難度較大,一些結(jié)構(gòu)的設(shè)計較為繁復(fù)。我個人認(rèn)為第8題的日期計算的代碼調(diào)試比較困難,因為你必須去猜老師給的測試用例到底是怎么算出來的(ps:老師給的測試用例的輸出其實是錯的,但是要過測試點的話,錯也要和老師提供的一樣QAQ
第三次作業(yè):1、jmu-java-日期類的基本使用 ?
2、課程成績統(tǒng)計程序-1
某高校課程從性質(zhì)上分為:必修課、選修課,從考核方式上分為:考試、考察。
考試的總成績由平時成績、期末成績分別乘以權(quán)重值得出,比如平時成績權(quán)重0.3,期末成績權(quán)重0.7,總成績=平時成績*0.3+期末成績*0.7。
考察的總成績直接等于期末成績
必修課的考核方式必須為考試,選修課可以選擇考試、考察任一考核方式。
1、輸入:
包括課程、課程成績兩類信息。
課程信息包括:課程名稱、課程性質(zhì)、考核方式(可選,如果性質(zhì)是必修課,考核方式可以沒有)三個數(shù)據(jù)項。
課程信息格式:課程名稱+英文空格+課程性質(zhì)+英文空格+考核方式
課程性質(zhì)輸入項:必修、選修
考核方式輸入選項:考試、考察
課程成績信息包括:學(xué)號、姓名、課程名稱、平時成績(可選)、期末成績
課程信息格式:學(xué)號+英文空格+姓名+英文空格+課程名稱+英文空格+平時成績+英文空格+期末成績
以上信息的相關(guān)約束:
1)平時成績和期末成績的權(quán)重默認(rèn)為0.3、0.7
2)成績是整數(shù),不包含小數(shù)部分,成績的取值范圍是【0,100】
3)學(xué)號由8位數(shù)字組成
4)姓名不超過10個字符
5)課程名稱不超過10個字符
6)不特別輸入班級信息,班級號是學(xué)號的前6位。
2、輸出:
輸出包含三個部分,包括學(xué)生所有課程總成績的平均分、單門課程成績平均分、單門課程總成績平均分、班級所有課程總成績平均分。為避免誤差,平均分的計算方法為累加所有符合條件的單個成績,最后除以總數(shù)。
1)學(xué)生課程總成績平均分按學(xué)號由低到高排序輸出,格式:學(xué)號+英文空格+姓名+英文空格+總成績平均分
如果某個學(xué)生沒有任何成績信息,輸出:學(xué)號+英文空格+姓名+英文空格+"did not take any exams"
2)單門課程成績平均分分為三個分值:平時成績平均分(可選)、期末考試平均分、總成績平均分,按課程名稱的字符順序輸出,格式:課程名稱+英文空格+平時成績平均分+英文空格+期末考試平均分+英文空格+總成績平均分
如果某門課程沒有任何成績信息,輸出:課程名稱+英文空格+"has no grades yet"
3)班級所有課程總成績平均分按班級由低到高排序輸出,格式:班級號+英文空格+總成績平均分
如果某個班級沒有任何成績信息,輸出:班級名稱+英文空格+ "has no grades yet"
異常情況:
1)如果解析某個成績信息時,課程名稱不在已輸入的課程列表中,輸出:學(xué)號+英文空格+姓名+英文空格+":"+課程名稱+英文空格+"does not exist"
2)如果解析某個成績信息時,輸入的成績數(shù)量和課程的考核方式不匹配,輸出:學(xué)號+英文空格+姓名+英文空格+": access mode mismatch"
以上兩種情況如果同時出現(xiàn),按第一種情況輸出結(jié)果。
3)如果解析某個課程信息時,輸入的課程性質(zhì)和課程的考核方式不匹配,輸出:課程名稱+" : course type & access mode mismatch"
4)格式錯誤以及其他信息異常如成績超出范圍等,均按格式錯誤處理,輸出"wrong format"
5)若出現(xiàn)重復(fù)的課程/成績信息,只保留第一個課程信息,忽略后面輸入的。
信息約束:
1) 成績平均分只取整數(shù)部分,小數(shù)部分丟棄
?
3、面向?qū)ο缶幊?封裝性)? 4、判斷兩個日期的先后,計算間隔天數(shù)、周數(shù)
第三次作業(yè)第二題的難度較大,需要建立很多的類,各個類之間的關(guān)系也比較復(fù)雜,真的很難TAT,測試點還有很多沒過。
?
設(shè)計與分析與主要問題和其解決方法
(這里只會提供重點題目的重點代碼)
第二次作業(yè):題目一(成績計算-1-類、數(shù)組的基本運用):
1 public class Main { 2 public static void main(String[] args) { 3 Scanner sc = new Scanner(System.in); 4 Student stu[] = new Student[5]; 5 6 int i ; 7 //依次輸入5個學(xué)生的信息 8 for(i = 0; i < 5; i++){ 9 stu[i] = new Student(sc.next(), sc.next(),sc.nextFloat(),sc.nextFloat(),sc.nextFloat()); 10 float[] totoal = new float[5]; //總成績 11 float[] average = new float[5]; //平均成績 12 totoal[i] = stu[i].getChinese() + stu[i].getMath() + stu[i].getPhysic(); 13 average[i] = totoal[i]/3; 14 System.out.println(stu[i].getIdnum() + " " + stu[i].getName()+ " " + (int)totoal[i] + " " + String.format("%.2f",average[i])); 15 stu[i] = null; 16 } 17 } 18 }
這題主要要注意成績和平均成績不能存為int類型,不然會導(dǎo)致最后結(jié)果的四舍五入的結(jié)果不太精確,所以這里我們直接選擇在最后輸出的時候才將總成績和平均成績轉(zhuǎn)化成int類型。
?
第二次作業(yè):題目二(成績計算-2-關(guān)聯(lián)類):
1 class Student1 { 2 String idnum; 3 String name; 4 double chinese; 5 double math; 6 double physic; 7 double total; 8 double usual_average; 9 double final_average; 10 public Student1(String idnum, String name, double chinese, double math, double physic,double total,double usual_average,double final_average){ 11 this.idnum = idnum;//獲取學(xué)號 12 this.name = name;//獲取姓名 13 this.chinese = chinese;//獲取中文成績 14 this.math = math; //獲取數(shù)學(xué)成績 15 this.physic = physic; //獲取物理成績 16 this.total = total; //獲取平時成績的總分 17 this.usual_average = usual_average; 18 this.final_average = final_average; 19 } 20 } 21 22 class Student2{//學(xué)生成績 23 float usual; 24 float Final; 25 public Student2( float usual, float Final) { 26 this.usual = usual; 27 this.Final = Final; 28 } 29 } 30 31 public class Main { 32 public static void main(String[] args) { 33 Scanner sc = new Scanner(System.in); 34 Student1 stu[] = new Student1[3]; 35 36 //依次輸入3個學(xué)生的信息 37 for(int i = 0; i < 3; i++) {//學(xué)生 38 String student_idnum = ""; 39 String student_name = ""; 40 double chinese_grades = 0;//初始化語文成績 41 float chinese_usual = 0; 42 float chinese_final = 0; 43 double math_grades = 0;//初始化數(shù)學(xué)成績 44 float math_usual = 0; 45 float math_final = 0; 46 double physic_grades = 0;//初始化物理成績 47 float physic_usual = 0; 48 float physic_final = 0; 49 double total_grades ; 50 double usual_grades; //平時成績的平均分 51 double final_grades; //期末成績的平均分 52 53 for(int j = 0; j < 3; j ++) { 54 String str1 = sc.nextLine();//直接讀取一整行信息 55 //將讀取到的信息按一個英文空格進(jìn)行分割成多個字符串,存在strs數(shù)組中,方便后續(xù)課程的匹配 56 String[] strs = str1.split(" "); 57 student_idnum = strs[0]; 58 student_name = strs[1]; 59 //判斷課程 60 if ("語文".equals(strs[2])) { 61 chinese_usual = Float.parseFloat(strs[3]); 62 chinese_final = Float.parseFloat(strs[4]); 63 Student2 Chinese = new Student2(chinese_usual, chinese_final); 64 chinese_grades = chinese_usual * 0.4 + chinese_final * 0.6; 65 } else if ("數(shù)學(xué)".equals(strs[2])) { 66 math_usual = Float.parseFloat(strs[3]); 67 math_final = Float.parseFloat(strs[4]); 68 Student2 Math = new Student2(math_usual, math_final); 69 math_grades = math_usual * 0.4 + math_final * 0.6; 70 } else if ("物理".equals(strs[2])) { 71 physic_usual = Float.parseFloat(strs[3]); 72 physic_final = Float.parseFloat(strs[4]); 73 Student2 Physic = new Student2(physic_usual, physic_final); 74 physic_grades = physic_usual * 0.4 + physic_final * 0.6; 75 } 76 } 77 total_grades = (int)chinese_grades + (int)math_grades + (int) physic_grades ; 78 usual_grades = (chinese_usual + math_usual + physic_usual)/3; 79 final_grades = (chinese_final + math_final + physic_final)/3; 80 stu[i] = new Student1(student_idnum,student_name,chinese_grades,math_grades,physic_grades,total_grades,usual_grades,final_grades); 81 } 82 for(Student1 student : stu){ 83 System.out.println(student.idnum + " " + student.name + " " + String.format("%.0f",student.total) + " " + String.format("%.2f",student.usual_average) + " " + String.format("%.2f",student.final_average) + " " + String.format("%.2f",student.total/3)); 84 } 85 } 86 }
這個題目需要注意:
- 使用合適的輸入方法:根據(jù)題目要求,在Java中可以使用
Scanner
類來讀取輸入。通過創(chuàng)建Scanner
對象,可以使用其提供的方法(如nextInt()
、nextLine()
等)逐行讀取輸入數(shù)據(jù)。這題的輸入格式我們讀取的話,最好選用讀取一整行,然后利用分割函數(shù)按照空格來分割,將對應(yīng)的姓名、課程、學(xué)號分別進(jìn)行判斷和處理會更加容易。
- 使用合適的輸入方法:根據(jù)題目要求,在Java中可以使用
-
確定輸入數(shù)據(jù)的格式:在讀取輸入之前,需要確定輸入數(shù)據(jù)的格式,以便正確地使用適當(dāng)?shù)姆椒ㄗx取和處理數(shù)據(jù)。根據(jù)題目中給出的輸入格式,可以通過調(diào)用
Scanner
對象的相應(yīng)方法來按格式逐行讀取輸入。 -
錯誤處理和異常情況:在讀取輸入數(shù)據(jù)時,可以考慮加入適當(dāng)?shù)腻e誤處理和異常情況處理機(jī)制。例如,可以使用
try-catch
語句塊來捕獲輸入格式錯誤、類型轉(zhuǎn)換錯誤等可能發(fā)生的異常,并根據(jù)具體情況進(jìn)行相應(yīng)的處理和輸出錯誤提示。 -
循環(huán)讀取輸入數(shù)據(jù):根據(jù)題目要求,需要依次輸入多個學(xué)生的成績信息。可以使用循環(huán)結(jié)構(gòu)(如
for
循環(huán)或while
循環(huán))來重復(fù)讀取輸入,直到滿足停止輸入的條件(如輸入end
后停止)。 -
數(shù)據(jù)存儲和處理:將讀取的數(shù)據(jù)存儲在合適的數(shù)據(jù)結(jié)構(gòu)中,如學(xué)生對象、成績對象等,以便后續(xù)的計算和處理。根據(jù)題目要求,可以設(shè)計學(xué)生類和成績類,并將讀取的數(shù)據(jù)封裝在對應(yīng)的對象中。
?
第二次作業(yè):題目七(菜單計價):
1 public class Main { 2 public static void main(String[] args) { 3 // 初始化菜譜 4 Dish dish1 = new Dish("西紅柿炒蛋", 15); 5 Dish dish2 = new Dish("清炒土豆絲", 12); 6 Dish dish3 = new Dish("麻婆豆腐", 12); 7 Dish dish4 = new Dish("油淋生菜", 9); 8 9 Menu menu = new Menu(); 10 menu.addDish(dish1); 11 menu.addDish(dish2); 12 menu.addDish(dish3); 13 menu.addDish(dish4); 14 15 // 輸入訂單信息 16 Scanner scanner = new Scanner(System.in); 17 Order order = new Order(); 18 19 String input = scanner.nextLine(); 20 while (!input.equals("end")) { 21 String[] parts = input.split(" "); 22 String dishName = parts[0]; 23 int portion = Integer.parseInt(parts[1]); 24 Dish dish = menu.searchDish(dishName); 25 if (dish == null) { 26 System.out.println(dishName + " does not exist"); 27 } else { 28 Record record = new Record(dish, portion); 29 order.addRecord(record); 30 } 31 input = scanner.nextLine(); 32 } 33 34 // 計算訂單總價并輸出 35 int totalPrice = order.getTotalPrice(); 36 System.out.println( totalPrice); 37 } 38 }
這個題目需要注意的點:
-
輸入數(shù)據(jù)的合法性驗證:確保輸入的菜名和份額符合要求,菜名必須在菜譜中存在,份額必須是1、2、3中的一個。如果輸入的菜名無法識別或者份額不合法,需要進(jìn)行相應(yīng)的錯誤處理。
-
價格計算的精確性和規(guī)則:根據(jù)輸入的菜名和份額,使用菜譜中對應(yīng)菜品的基礎(chǔ)價格以及份額規(guī)則計算菜品的價格。小份菜的價格等于基礎(chǔ)價格,中份菜的價格為基礎(chǔ)價格乘以1.5,大份菜的價格為基礎(chǔ)價格乘以2。對于計算結(jié)果可能存在的小數(shù)部分,需要按照四舍五入的規(guī)則進(jìn)行處理,最后輸出整數(shù)結(jié)果。
-
訂單的數(shù)據(jù)存儲和計算:使用訂單類來保存用戶點的所有菜的信息,每一條記錄包括菜品和份額。訂單類需要提供方法來添加一條菜品記錄和計算訂單的總價。在添加記錄時,需要根據(jù)菜名查找對應(yīng)的菜品信息,如果菜名無法識別,需要進(jìn)行相應(yīng)的錯誤處理。
-
輸出結(jié)果的格式:輸出訂單的總價,以及每份菜的價格??們r為整數(shù)結(jié)果,每份菜的價格也為整數(shù)。如果訂單中包含不能識別的菜名,需要在輸出總價之前輸出對應(yīng)的錯誤提示。
-
異常情況的處理:在處理輸入數(shù)據(jù)和計算過程中,可能會遇到異常情況,比如輸入錯誤、菜名無法識別等。需要進(jìn)行適當(dāng)?shù)腻e誤處理,包括錯誤提示和相關(guān)輸出。
?
第三次作業(yè):題目二(課程成績統(tǒng)計程序-1):
?
這個題的測試點——單門考試課程 單個學(xué)生、考核數(shù)據(jù)與考核方式不匹配、多門課程,單個學(xué)生,含錯誤信息、單個班級,多個學(xué)生,多門課程、多個班級,多門課程,多個學(xué)生? 均未通過,我在題目截至之后又調(diào)試了下代碼,發(fā)現(xiàn)多對多、多對單、單對多方面均有一些問題
1 //選課 2 class choose{ 3 scores score; 4 Stu student; 5 lessons lesson; 6 } 7 //課程 8 class lessons{ 9 String lesson_name; 10 String course;//必修或選修 11 String option;//考察方式 12 public void setLesson_name(String lesson_name){ 13 this.lesson_name = lesson_name; 14 } 15 public String getLesson_name(){ 16 return lesson_name; 17 } 18 public void setCourse(String course){ 19 this.course = course; 20 } 21 public String getCourse(){ 22 return course; 23 } 24 public void setOption(String option){ 25 this.option = option; 26 } 27 public String getOption(){ 28 return option; 29 } 30 lessons(String lesson_name , String course , String option){ 31 setLesson_name(lesson_name); 32 setCourse(course); 33 setOption(option); 34 } 35 } 36 //學(xué)生 37 class Stu{ 38 String idnum; 39 String name; 40 public void setIdnum(String idnum){ 41 this.idnum = idnum; 42 } 43 public String getIdnum(){ 44 return idnum; 45 } 46 public void setName(String name){ 47 this.name = name; 48 } 49 public String getName(){ 50 return name; 51 } 52 Stu(String idnum,String name){ 53 setIdnum(idnum); 54 setName(name); 55 } 56 } 57 //班級 58 class Classes{ 59 Stu student; 60 String class_num; 61 HashMap<String,Stu> Stus; 62 Classes(String class_num){ 63 setClassNum(class_num); 64 } 65 public void setClassNum(String class_num) { 66 this.class_num = class_num; 67 } 68 public String getClassNum() { 69 return class_num; 70 } 71 public void addStudent(Stu student) { 72 Stus.put(student.getIdnum() , student); 73 } 74 } 75 //成績 76 abstract class scores{ 77 int All_score; 78 abstract void getAll_score(); 79 } 80 //考試成績 81 class exam_score extends scores{ 82 int usual_score; 83 int final_score; 84 exam_score(int usual_score , int final_score){ 85 setUsual_score(usual_score); 86 setFinal_score(final_score); 87 } 88 public void setUsual_score(int usual_score) { 89 this.usual_score = usual_score; 90 } 91 public int getUsual_score() { 92 return usual_score; 93 } 94 public void setFinal_score(int final_score) { 95 this.final_score = final_score; 96 } 97 public int getFinal_score() { 98 return final_score; 99 } 100 @Override 101 void getAll_score() { 102 All_score = (int) (usual_score*0.3+final_score*0.7); 103 } 104 } 105 //考察成績 106 class inspect_score extends scores{ 107 int finalGrade; 108 inspect_score(int finalGrade) { 109 setFinalGrade(finalGrade); 110 } 111 public void setFinalGrade(int finalGrade) { 112 this.finalGrade = finalGrade; 113 } 114 public int getFinalGrade() { 115 return finalGrade; 116 } 117 @Override 118 void getAll_score() { 119 All_score = finalGrade; 120 } 121 } 122 /**********此處省略輸入、輸出類**********/308 309 public class Main { 310 //throws IOException表示該方法可能會拋出IOException異常,需要通過異常處理機(jī)制進(jìn)行處理 311 public static void main(String[] args) throws IOException{ 312 //InputStreamReader(System.in)用于將字節(jié)流轉(zhuǎn)換為字符流,這樣我們可以按字符的方式來讀取用戶輸入。 313 //BufferedReader則是一個字符緩沖流,它提供了更高效的讀取文本的方法,其中readLine()方法可以讀取一行用戶輸入。 314 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 315 input inputs = new input(); 316 inputs.outputs = new output(); 317 String strs; 318 319 while ((strs = in.readLine()) != null){ 320 if(strs.equals("end")) break; 321 inputs.getData(strs); 322 } 323 324 inputs.outputs.stu_print(inputs.Stus , inputs.Choose ); 325 inputs.outputs.lesson_print(inputs.Lessons , inputs.Choose ); 326 inputs.outputs.class_print(inputs.Class , inputs.Choose ); 327 } 328 }
本實驗旨在對某高校的課程進(jìn)行考核方式和性質(zhì)的分析,并計算學(xué)生和班級的成績平均分。實驗過程中,我們根據(jù)輸入的課程信息和成績信息,按照規(guī)定的權(quán)重和計算方法計算了各門課程的總成績,并分析了學(xué)生和班級的成績情況。
通過對輸入信息的處理,實驗過程中遵循了一些約束條件,包括成績的整數(shù)取值范圍、學(xué)號和姓名的長度限制等。對于異常情況,比如課程名稱不在已輸入的課程列表中、輸入的成績數(shù)量和考核方式不匹配等,我們進(jìn)行了相應(yīng)的錯誤處理和輸出。
在實驗結(jié)果方面,我們成功計算出了學(xué)生所有課程總成績的平均分,并按照學(xué)號由低到高的順序進(jìn)行了排序輸出。同時,我們也計算了單門課程的平時成績平均分、期末考試平均分和總成績平均分,并按照課程名稱的字符順序輸出。最后,我們還按班級由低到高的順序計算了班級所有課程總成績的平均分。
總的來說,本實驗通過輸入課程和成績信息,按照規(guī)定的權(quán)重和計算方法進(jìn)行了成績計算和分析,最終得出了學(xué)生和班級的成績平均分。實驗為我們提供了對課程考核和性質(zhì)的理解,并展示了計算和數(shù)據(jù)處理的能力。然而在實驗過程中,我們也要注意對輸入信息的準(zhǔn)確性和合法性進(jìn)行驗證,以確保計算結(jié)果的可靠性。
在做這個實驗的時候需要注意以下幾點:
-
數(shù)據(jù)的準(zhǔn)確性:確保輸入的課程信息和成績信息準(zhǔn)確無誤,包括學(xué)號、姓名、課程名稱、平時成績和期末成績等。輸入錯誤或者不準(zhǔn)確的數(shù)據(jù)可能導(dǎo)致計算結(jié)果的錯誤或者偏差。
-
約束條件的遵守:根據(jù)實驗要求,確保輸入數(shù)據(jù)符合預(yù)設(shè)的約束條件,比如成績范圍、學(xué)號和姓名的長度限制等。如果輸入的數(shù)據(jù)不符合約束條件,需要進(jìn)行相應(yīng)的錯誤處理和輸出。
-
異常情況的處理:在實驗過程中,可能會遇到異常情況,比如課程名稱不在已輸入的課程列表中、輸入的成績數(shù)量和考核方式不匹配等。針對這些異常情況,需要進(jìn)行適當(dāng)?shù)腻e誤處理和輸出,確保結(jié)果的準(zhǔn)確性和可靠性。
-
可讀性和清晰性:保持代碼的可讀性和清晰性,采用適當(dāng)?shù)拿?、注釋和縮進(jìn)等方法,以便于他人理解和維護(hù)代碼。此外,輸出結(jié)果的格式也應(yīng)該清晰明了,便于閱讀和理解。
-
測試和驗證:在編寫實驗代碼之前,先進(jìn)行適當(dāng)?shù)臏y試和驗證,確保代碼在不同情況下都能正常運行,并得到正確的結(jié)果??梢允褂靡恍┦纠龜?shù)據(jù)進(jìn)行測試,以確保代碼的正確性
?總結(jié)
通過這三次代碼大作業(yè),首先,我學(xué)習(xí)了如何創(chuàng)建和操作類及對象。Java 是一種面向?qū)ο蟮恼Z言,通過定義類和實例化對象,我們可以將問題進(jìn)行模塊化和封裝。通過合理地定義類的屬性和方法,可以實現(xiàn)數(shù)據(jù)和操作的高度內(nèi)聚性。
其次,我熟悉了 Java 的常用數(shù)據(jù)類型和控制流語句。在實驗過程中,我使用了整型、浮點型、字符型等不同的數(shù)據(jù)類型,以及條件語句和循環(huán)語句來控制程序的流程。這些基礎(chǔ)知識為我后續(xù)的實驗操作打下了堅實的基礎(chǔ)。另外,我也學(xué)習(xí)了如何使用 Java 的標(biāo)準(zhǔn)庫。Java 的標(biāo)準(zhǔn)庫包含了豐富的工具和類,可以幫助我們更高效地完成編程任務(wù)。我學(xué)習(xí)了如何使用 Java 的集合框架來處理數(shù)據(jù)集合,如何通過輸入輸出流來進(jìn)行文件讀寫操作,以及如何使用異常處理機(jī)制來處理程序運行中的錯誤。
我熟悉了Java的基本語法、常用函數(shù)、正則表達(dá)式的運用以及面向?qū)ο蟮拇a設(shè)計思想,同時,我覺得我應(yīng)該在清晰各個類之間的調(diào)用關(guān)系上要加強(qiáng),同時應(yīng)該要更加熟練的掌握哈希表和動態(tài)數(shù)組的各種操作。
通過實踐,我更加深入地理解了 Java 的特性和用法。
?
?
到了這里,關(guān)于第一次博客作業(yè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!