2012-04-26 95 views
1

我試圖編寫一個有方法的程序考試標記 這包含了學生類的對象和給出學生名字的字符串。該方法應返回學生考試標誌及其名稱。如果有一個叫喬的學生,他們的考試成績是32,那麼當喬經過時,應該打印32。使用一種方法返回一個字符串和整數

在學生類中,我有getter,對於getexamscore,在子類中我有getter getpupilname。 向量元素應該在瞳孔類中。

如果學生不在班級-1應該退回。

這裏是我的方法,一切都必須是隻此方法:

import java.util.*; 
public class vectors 
{ 
    public int lookforMark(Vector <pupil> v, String name) 
    { 
     int examscoremark=0; 
     name=""; 
     try{ 

      for(int i=0; i<=v.size(); i++){ 
       try 
       { 
        int element= v.elementAt(i).getexamscore(); 
        String element2= v.elementAt(i).getpupilname(); 


       } 
       catch(Exception e) 
       { 
        System.out.println("there is an error"); 
        return -1; 
       } 
      } 
     } 

有人可以幫助我在與學生的名字返回exammark?

+3

爲什麼不返回一個學生對象,而不是一個int的? – alegen 2012-04-26 09:22:54

+0

考慮使用ArrayList而不是Vector,除非您在併發環境中使用它,我相信您不這樣做。 – assylias 2012-04-26 09:23:39

+1

使用封裝類來封裝帶瞳孔名稱的檢查標記。爲什麼不把它稱爲「ExamGrade」 - 因爲這隱含地暗示了識別數據和商標。 – Jon 2012-04-26 09:28:43

回答

2

您可以在學生上創建setMark方法。

或者,創建一個對象來保存名稱並將其返回。

public class ExamMark { 
    private final String name; 
    private final int mark; 

    public ExamMark(String name, int mark){ 
     this.name = name; 
     this.mark = mark; 
    } 

    public String getName(){ 
     return name; 
    } 

    public int getMark(){ 
     return mark; 
    } 
} 

使用方法如下:

return new ExamMark(v.elementAt(i).getpupilname(), v.elementAt(i).getexamscore()); 
+0

我不能改變方法,我也已經在學生課上做過這個了。 – 2012-04-26 09:25:44

+0

@ f-dot如果您的方法簽名返回int,則不能返回考試標誌和學生名稱。你將不得不改變它。 – dogbane 2012-04-26 09:29:13

+0

那麼我將如何返回對象,因爲我不能改變方法的返回類型。 – 2012-04-26 09:36:59

1

有兩種回答這個問題:

  1. 使用Pair<E,K>類。有幾種可以通過谷歌獲得。這是捷徑。
  2. 創建一個特定於您想要返回的信息的保持對象。這是更清潔的方式,通常應該是首選。
0

它更好地使用列表或地圖,矢量降低性能?

創建將具有用戶和學生對象的類結果並用鍵作爲用戶初始化散列圖,並將值作爲結果對象。

Map userMap = new HashMap();

public Result getUserMarks(String user){ 

Result result = userMap.get(user); 

    return result; 
} 
1

可以明確地說

在學生課我有干將,爲getexamscore並在 子我有吸氣getpupilname。學生班的矢量元素應該是 。

因此,您不需要任何額外的包裝類。而不是返回一個int,返回像這樣的瞳孔對象

public pupil lookforMark(Vector <pupil> v, String name) { 
     for(int i = 0; i < v.size(); i++) 
     if(v.elementAt(i).getpupilname().equals(name)) 
      return v.elementAt(i); 
     return null; 
} 

那樣容易。現在學生擁有名字和等級。

稍後編輯:糾正for循環中的錯誤。

+0

謝謝,但你不能這樣做,因爲存在不兼容的類型 – 2012-04-26 09:52:01

+0

@ F.Dot對於不兼容的類型意味着什麼? – alegen 2012-04-26 09:53:05

+0

當你返回返回v.elementAt(i);有不兼容的字符串類型和int – 2012-04-26 09:56:58

0

一次返回兩個對象的最好方法是將這兩個對象包裝在可包含兩個值的標準java對象中。這將是Map.Entry<T1, T2>類型的對象。要創建這樣的對象,你可以使用:

你的情況

new AbstractMap.SimpleEntry<T1, T2>(value1, value2);

所以new AbstractMap.SimpleEntry<Integer, String>(mark, name);

相關問題