Day42--練習--操作題1
題目:
以下是一道Java操作練習題,你可以嘗試進行編寫程式碼來解決哦:
題目要求:
建立一個名為Student
的類,這個類有以下幾個私有屬性:
name
:表示學生的姓名,型別為String
。age
:表示學生的年齡,型別為int
。scores
:表示學生的各科成績,型別為int
陣列,可以用來儲存多門課程的成績。
該類需要具備以下方法:
-
構造方法:
- 建立一個帶有三個引數的構造方法,引數分別對應姓名、年齡、成績陣列(按照順序傳入),在構造方法中完成對類中對應私有屬性的初始化賦值。
-
獲取平均成績的方法:
- 建立一個名為
getAverageScore
的方法,該方法返回值型別為double
,用於計算並返回這個學生的各科成績的平均值(也就是成績陣列中所有元素的平均值)。
- 建立一個名為
-
判斷是否成年的方法:
- 建立一個名為
isAdult
的方法,該方法返回值型別為boolean
,用於判斷該學生的年齡是否大於等於18歲,如果是則返回true
,否則返回false
。
- 建立一個名為
-
展示學生資訊的方法:
- 建立一個名為
showStudentInfo
的方法,此方法無返回值,在方法中按照如下格式輸出學生的資訊:
姓名:[學生姓名],年齡:[學生年齡],平均成績:[平均成績數值]
(其中[學生姓名]
、[學生年齡]
、[平均成績數值]
要替換為實際對應的值)。
- 建立一個名為
在main
方法中(可以建立一個包含main
方法的測試類,或者就在Student
類裡建立main
方法):
- 建立一個
Student
類的物件,傳入姓名為“張三”,年齡為20,成績陣列為{85, 90, 78}
。 - 呼叫這個物件的
getAverageScore
方法獲取平均成績,並輸出平均成績(輸出語句格式自行設計)。 - 呼叫這個物件的
isAdult
方法判斷是否成年,並輸出判斷結果(輸出語句格式自行設計)。 - 呼叫這個物件的
showStudentInfo
方法展示學生的完整資訊。
你可以嘗試根據這些要求進行程式碼編寫呀,希望對你鞏固Java基礎語法有所幫助呢。如果之後想要核對答案或者有疑問,可以再來問我哦。
我寫的答案:
package com.liu.exercise;
public class Student {
private String name;
private int age;
private int[] scores;
public double getAverageScore(int[] scores){
int sum=0;
int average=0;
for (int i : scores) {
sum+=i;
}
average=sum/scores.length;
return average;
}
public boolean isAdult(int age){
if(age>18){
System.out.println("true");
}
}
public static void main(String[] args) {
Student student = new Student();
student.name="張三";
student.age=20;
student.scores= new int[]{85, 90, 78};
System.out.println(student.getAverageScore(student.scores));
System.out.println(student.isAdult(student.age));
}
}
解析:
以下是對你這段程式碼的評價以及指出存在的問題和相應解析:
1. getAverageScore
方法
-
問題:
方法的返回值型別定義不太準確。目前方法中計算平均成績時,是使用int
型別的變數average
來儲存計算結果,然後返回這個int
型別的結果,但實際平均成績可能會出現小數情況(比如成績總和不能被課程數量整除時),而方法定義的返回值型別是double
,這樣可能導致精度丟失。 -
解析:
按照需求應該準確地返回一個double
型別的平均成績,所以在計算平均成績時,應該將總和轉換為double
型別再進行除法運算,以確保能得到正確的帶有小數的平均成績值。修改後的程式碼如下:
public double getAverageScore(int[] scores) {
int sum = 0;
for (int i : scores) {
sum += i;
}
return (double) sum / scores.length;
}
透過將sum
強制轉換為double
型別後再除以成績陣列的長度,就能保證返回符合要求的double
型別的平均成績了。
2. isAdult
方法
-
問題:
方法的返回值型別定義為boolean
,表示應該返回一個布林值(true
或者false
)來表示是否成年,但在方法體中,當前是使用System.out.println("true");
直接輸出了字串“true”,而沒有按照返回值要求返回相應的布林值,這樣呼叫這個方法獲取的返回結果就不符合預期了,並且方法內直接輸出內容也不符合方法設計的初衷(方法一般是返回結果給呼叫者去決定如何使用這個結果進行後續操作)。 -
解析:
應該將方法修改為按照正確的邏輯返回boolean
值,程式碼可修改為:
public boolean isAdult(int age) {
return age >= 18;
}
這樣當呼叫isAdult
方法時,就會根據傳入的年齡判斷是否大於等於18歲,然後準確地返回對應的布林值,方便在main
方法或者其他呼叫處根據返回的布林值進行相應的邏輯處理,比如進行條件判斷等。
3. main
方法中的程式碼邏輯
-
問題:
在main
方法中呼叫isAdult
方法時,又重複傳入了student.age
作為引數,其實是沒必要的,因為isAdult
方法本身就是Student
類中的例項方法,它可以直接訪問類中的age
例項變數,不需要再次傳入這個值。 -
解析:
可以直接呼叫student.isAdult()
就可以了,方法內部會自動使用物件自身的age
例項變數來進行是否成年的判斷。修改後的main
方法整體程式碼如下:
public static void main(String[] args) {
Student student = new Student();
student.name = "張三";
student.age = 20;
student.scores = new int[]{85, 90, 78};
System.out.println(student.getAverageScore(student.scores));
System.out.println(student.isAdult());
student.showStudentInfo();
}
另外,還缺少按照題目要求實現的showStudentInfo
方法,你需要根據題目給定的格式去補充這個方法來完整地展示學生資訊哦,例如:
public void showStudentInfo() {
double averageScore = getAverageScore(scores);
System.out.println("姓名:" + name + ",年齡:" + age + ",平均成績:" + averageScore);
}
總體來說,你已經對題目的基本結構和要求有了一定理解,只是在方法的返回值處理以及部分呼叫邏輯上存在一些小的偏差,按照上述建議修改後,程式碼就能更準確地滿足題目要求啦。
正確的程式碼
package com.liu.exercise;
public class Student {
private String name;
private int age;
private int[] scores;
public double getAverageScore(int[] scores){
int sum=0;
double average=0;
for (int i : scores) {
sum+=i;
}
average=(double)sum/scores.length;
return average;
}
public boolean isAdult(){
return age>=18;
}
public void showStudentInfo(){
System.out.println("姓名:"+name+",年齡:"+age+",平均年齡:"+getAverageScore(scores));
}
public static void main(String[] args) {
Student student = new Student();
student.name="張三";
student.age=20;
student.scores= new int[]{85, 90, 78};
System.out.println(student.getAverageScore(student.scores));
System.out.println(student.isAdult());
student.showStudentInfo();
}
}