有一個程式可以計算學生的平均分。程式運行時,首先會詢問學生的姓名。然后,學生將能夠輸入科目名稱,然后輸入該科目的分數。輸入所有分數后,將顯示平均值。
我需要一次將String(對于subjects)和Integer(對于marks)值存盤在一個單元格(單元格表示資料結構的一個框)中。是否有資料結構可以這樣做,或者如果沒有,最好的方法是什么?
uj5u.com熱心網友回復:
您可以使用一個哈希圖,其中學生姓名是鍵,值是另一個哈希圖。對于每個學生,使用另一個哈希圖,其中主題是鍵,值是存盤分數的陣列。
uj5u.com熱心網友回復:
是的,您可以將陣列宣告為 Object[] 陣列。
您可以創建一個 2D Object[][] 陣列,其中每個單元格對應一個學生。以下代碼顯示了如何創建和迭代它。
Object[][] array = {{"Mark1", 1, "Mark2", 4}, {"Mark1", 1, "Mark2", 4}};
for(Object[] i : array) {
for(Object j : i) {
System.out.print(j " ");
}
System.out.println("");
}
但是,您可能更喜歡使用HashMap。
import java.util.HashMap;
HashMap<String, HashMap<String, Integer>> marks = new HashMap<>();
HashMap<String, Integer> marks1 = new HashMap<>();
marks1.put("course1", 53);
marks.put("student1", marks1);
System.out.println(marks.get("student1").get("course1"));
uj5u.com熱心網友回復:
記錄
有沒有資料結構
在 Java 中,您可以通過撰寫類來定義自己的資料結構。
Java 16 及更高版本通過新的記錄功能使這更容易。記錄是撰寫類的一種簡短方式,其主要目的是透明且不可變地傳遞資料。編譯器隱式創建建構式、getter、equals&hashCode和toString.
record SubjectMark ( String subject , int mark ) {}
并定義學生。
record Student ( String name , Set< SubjectMark > marks ) {}
示例用法。
List< Student > students = new ArrayList <> () ;
…
students.add(
new Student(
"Alice" ,
Set.of(
new SubjectMark ( "French" , 3 ) ,
new SubjectMark ( "Math" , 4 ) ,
new SubjectMark ( "History" , 2 )
)
)
);
請注意,您可以在方法中本地宣告記錄,也可以嵌套宣告記錄,也可以在其自己的.java檔案中宣告記錄。
要計算平均分數,請回圈SubjectMark物件。
record Student ( String name , Set< SubjectMark > marks )
{
double average()
{
int sum = 0 ;
for( SubjectMark subjectMark : this.marks )
{
sum = sum subjectMark.mark ;
}
return ( sum / this.marks.size() ) ;
}
}
Streams 將使此代碼更簡單,但這是更高級的 Java。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/462237.html
上一篇:如何將物件推送到名稱相似的陣列?
下一篇:編輯從方法呼叫的陣列?
