2015-11-19 63 views
2

我錯過了在Java中的一次演講中,並且對象是類,方法,構造等作業是一個任務:引用參考數組的方法?

創建一個類人,天體,其中描述的人,並 只包含兩個felds:name(String)和出生年份(int)。在 這一類,定義

  • 構造函數取姓名和出生年份;

  • 構造函數只接受名稱並將出生年份設置爲默認值1990;

  • 方法是女性如果這個人是一個女人(我們假設,不是非常理智的,只有女性和所有女性的名字結尾 字母'a');否則該方法返回false;

  • static function getOlder將兩個對Person類的對象進行引用,並將引用返回給這兩個人中的較老者;

  • 靜態函數getOldest接受對Person類的對象的引用數組的引用,並將該引用返回爲數組中表示的最老的人;

  • 靜態函數getYoungestFemale服用參照refe-分配辦法的陣列,以類Person的對象並返回參考 到陣列中所表示的最年輕的女性,或零,如果沒有 女人陣列中。

在一個單獨的類,寫在其中類人的整個 功能進行測試的主功能。

我查了一些教程和解釋,我沒去直奔這裏尋求幫助,但2小時撕扯我的頭髮,我一直只能夠想出這個後:

public class Person { 
    String name; 
    int yob; //year of birth 

    public Person() { 
     Person jan = new Person("Jan", 1995); //the names are polish 
     Person joanna = new Person("Joanna", 1993); 
     Person michal = new Person("Michal", 1980); 
     Person beata = new Person("Beata", 1979); 
     Person kazimierz = new Person("Kazimierz", 1998); 
     Person magdalena = new Person("Magdalena", 1999); 
    } 

    public Person(String name, int yob) { 
     this.name = name; 
     this.yob = yob; 
    } 

    public Person(String name) { 
     this.name = name; 
     this.yob = 1990; 
    } 

    public static boolean isFemale(String name) { 
     if(name.equals("Joanna")) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public static String getOlder(Person x?, Person y?) { // if I understand the task correctly, I should reference any two names? 
     if(x?.yob>y?.yob) { 
      return x?.name; 
     } else { 
      return y?.name; 
     } 

    //getOldest and getYoungestFemale methods go here 

    } 
} 

但是,我無法將頭圍繞最後三步。我的大腦正在沸騰。這將真正幫助,如果任何人能解釋的最後三個要點(getOlder參考任何2人,getOldest/getYoungestFemale

如果你沒有時間來解釋,一個「方法的一些示例帶至一個參考陣列「應該足以讓我獲得基本的理解。

在此先感謝。

+0

拋開事實與實例的問題涉及'Person':如果你被要求從一個數組中獲得最大的'int',或者最小的'int',你能做到嗎? –

+4

你還沒有完全得到3分或4分。你幾乎肯定不想在Person的默認構造函數中創建6個Person實例。 –

+0

@AndyTurner我知道如何在「public static void main(String [] args)」主體中編寫「hello,world」級程序,就像用循環排序數組,找到最大值等等。突然需要使用構造函數和多個類。編輯:點3只需要用最後一個字符檢查重新選擇「喬安娜」,我可以稍後再做。 – Shamanix

回答

2

下面是一些提示,這將有助於你自己沒有我放棄解決工作問題的答案;)

1)

public static String getOlder(Person x?, Person y?) { 
     // if I understand the task correctly, I should reference any two names?  
    if(x?.yob>y?.yob) { 
      return x?.name;  
    } else {   
      return y?.name;  
    } 
} 

此代碼幾乎是正確的!只需刪除問號!另外請記住,老年人將有一個較早的yob。編輯,你也需要返回引用的人,而不是他們的名字,所以返回x或y。

2)getOldestgetYoungestWoman

Person[] 

是Person對象的引用的數組。您應該能夠閱讀如何遍歷數組元素並比較值。 3)額外的:如果你在構造函數中聲明這6個Person對象,你將不能在類的其他方法中訪問它們。可以在那裏創建Person對象,但是你必須在構造函數之外聲明它們。在課堂上宣佈他們。

+1

1)類型不正確。該問題指出,該方法應該返回對老年人的引用,而不是*老年人的名字。 –

+0

_Just刪除問號!_ - 我把它們放在那裏表明我不知道該寫什麼,當然我不會在最終的代碼中使用它們。所以,如果我刪除它們,我怎麼找到例如先生。 Jan如果參考是x? – Shamanix

+1

getOlder方法只需要取2個人對象。你已經叫這些人和人y。在這個方法裏面,你不關心他們是誰的對象。爲了使用這個方法,你在'main'方法中創建了兩個person對象,比如person1 = new Person(「bob」);',類似於person2,然後像getOlder(person1, person2);' – EkcenierK

2

通常..你不稱之爲「引用某些東西的引用」你只是說「某些東西」。即使對象的數組對象的引用數組。就像對象的變量只是對象的引用一樣。

Type heyImAReference = new ImTheObject(); 

所以,當你寫

Person person = new Person(); 

您將有類Person類型,person爲該類的實例(或對象)的引用和new Person()作爲所產生的實體被引用的實際事物。通常稱爲「實例」或在你的情況下「對象」。

當涉及到人的陣列和你做

Person[] persons = new Person[5]; 

您通過new Person[5]創建具有5個插槽,每個插槽可象徵性地走了Person實例的數組實例,但實際上你有5個引用。第一個爲Person[0],第二個爲Person[1]等。所以這是一個「Person類的對象的引用數組」。

persons是對此的參考。所以它是一個「參考引用的陣列,以類Person對象」

  • static功能getOldest取參考引用的陣列,以類Person的對象並返回參照在所表示的最老的人陣列

意味着無非

static Person getOldest(Person[] persons) { 
    ... 
} 

我將調用該需要的人的一個數組並返回一個Person的方法。儘管從技術上講,這只是引用而已。 Person對象不「移動」

2

首先創建另一個具有主要方法的類。在主創建磁盤陣列:

Person[] parr = new Person[6]; 
//Then fill all your person to this array: 
parr[0] = new Person("name", year); 
parr[1] = .... 

,那麼這個數組處理程序傳遞給你的方法:

Person p1 = Person.findSomething(parr); 

在Person類:

public static Person findSomething(Person[] parr){ 
    for (Person p : parr){ 
    if (p.name.endsWith("a")) return p; 
    } 
    return null; 
}