2017-06-04 111 views
-1
public static void createPlayers(int x) { 
    System.out.println("How many players/AI will be playing this game?"); 
    numOfPlayers = scan.nextInt(); 
    HoldEmTurns players[] = new HoldEmTurns[x]; 
    for (int c = 0; c < x; c++) { 
     players[c] = new HoldEmTurns(players[c].getHuman(),players[c].getName()); 
    } 

}如何使一個對象在數組中調用其構造函數?

每當我運行此,它運行這兩條線,然後終止:

System.out.println("How many players/AI will be playing this game?"); 
    numOfPlayers = scan.nextInt(); 

所以非常如何在使一個對象調用它的構造在一個陣列?

+6

此行是沒有意義的:'玩家[C] =新HoldEmTurns(玩家[C] .getHuman(),播放器[C] .getName());'你要初始化'玩家[c]',但你也可以在玩家身上調用方法[c]'並假裝它已經被初始化了。 – Tom

+0

@Tom完全是我的問題,我希望它創建該對象,然後一旦構造函數被調用它就被初始化。 –

+0

@JackB如果對象不存在,你希望'getHuman()'和'getName()'返回什麼?一個新初始化的(引用)數組將所有元素都設置爲'null'... – glglgl

回答

1

考慮這個例如

假設你有一個類SomeClass,它包含兩個字段String &的int

public class SomeClass { 

    String aString; 
    int someInteger; 
    ............... 
} 

您可以創建一個構造成每次使用一個Instance類型SomeClass已創建。因此,您創建的每個Object類型SomeClass您必須使用參數對其進行初始化。最終,它會存在,它的領域現在有值,而不是null

public SomeClass(String aString, int someInteger){ 
    this.aString = aString; 
    this.someInteger = someInteger; 
} 

此外,還可以創建不接受任何參數/參數(這就是所謂的超載),另一個構造。其結果是,你可以創建這個類的一個實例,並初始化它的屬性或創建它的屬性尚未初始化空對象(所以你分配後創建的對象後,他們通過制定者的值):

public SomeClass(){ 
// Empty constructor 
} 

現在考慮可以在創建的對象上調用的setter方法。通過您可以設置/獲取對象屬性/字段的方法。例如,這方法改變aString字段值:

public void changeTheString(String newString){ 
     aString = newString; 
} 

您可以創建其他的方法來操作創建的對象的屬性,例如:

public void changeTheInteger(int newInteger){ 
    someInteger = newInteger; 
} 

public String getTheString(){ 
    return aString; 
} 

現在讓我們來測試創建數組SomeClassSomeClass的對象,請考慮此數組可能有多達3個對象類型SomeClass

SomeClass array[] = new SomeClass[3]; 

現在陣列是EMPTY,但它CAN容納類型SomeClassTHREE對象。在各項指標(無論您使用的是循環或不),你要添加的對象和初始化這樣的:

for(int i=0; i<3; i++){ 
    array[i] = new SomeClass("Some String", i); // values are for example 
} 

現在你可以調用時創建的每一個對象的方法指數,例如:

String theString = array[0].getTheString(); 
System.out.println(theString); //to print it out 

// changing the String field for SomeClass Object/Instance at index 1 in the array 
array[1].changeTheString("I am changing the String"); 

// and so on 
array[2].changeTheInteger(5); 
相關問題