2013-01-31 59 views
1

我完全不熟悉Java,所以我很抱歉如果我的問題是愚蠢的。我正在完成這項任務,而且我現在幾個小時一直在閱讀主要方法,但我無法弄清楚。我把我的一些代碼放在下面。我可能會離開這裏,但是我希望完成的是獲得啓動構造函數的主要方法,但是當我編譯時,我得到一個錯誤,提示「無法找到符號 - 構造函數播放器」。現在,我猜這與構造函數的字符串參數有關,但我全力以赴。如果任何人都可以在此提供一些線索,可能是很簡單的問題,我會很高興:)Java - 找不到符號構造函數

public class Player { 
private String nick; 
private String type; 
private int health; 


public static void main(String[] args) 
{ 
    Player player = new Player(); 
    player.print(); 
} 


public Player(String nickName, String playerType) 
{ 

    nick = nickName; 
    type = playerType; 
    health = 100; 
    System.out.println("Welcome " + nick +" the " + type + ". I hope you are ready for an adventure!"); 
} 

    public void print() 
{ 
    System.out.println("Name: " + nick); 
    System.out.println("Class: " + type); 
    System.out.println("Remanining Health: " + health); 
} 
+1

你正在嘗試創建一個'Player',但是你沒有傳入'nickname'或'playerType'。 –

回答

3

Player沒有無參數的構造函數,你可以使用:

Player player = new Player("My Nickname", "Player Type"); 

如果您想提示輸入Player參數的用戶,你可以閱讀像這樣:

Scanner scanner = new Scanner(System.in); 
System.out.print("Enter Player Name:"); 
String nickName = scanner.nextLine(); 
System.out.print("Enter Player Type:"); 
String playerType = scanner.nextLine(); 
Player player = new Player(nickName, playerType); 
+0

我想要做的是讓程序啓動,然後提示用戶輸入名稱和暱稱字符串。這不僅僅是玩家和班級「我的暱稱」和「玩家類型」的名字? –

+0

好吧,看更新.... – Reimeus

+0

找不到符號級掃描儀。難道我做錯了什麼? –

0

當你的類明確定義constructor,隱含的無參數的構造不會被創建。

你有明確的構造函數類

public Player(String nickName, String playerType) 
{ 

    nick = nickName; 
    type = playerType; 
    health = 100; 
    System.out.println("Welcome " + nick +" the " + type + ". I hope you are ready for an adventure!"); 
} 

,並試圖調用無參數的構造

Player player = new Player(); 

要麼你需要通過在上面的代碼參數(或)創建無參數的構造函數。

1

顯然使用的是0-arg constructor,當你還沒有得到一個: -

Player player = new Player(); 

需要注意的是,當你在你的類提供一個參數的構造函數,編譯器將不會添加默認的構造函數。如果您正在使用它,則必須手動添加一個0-arg構造函數。

所以,要麼你可以添加一個0-arg constructor這樣: -

public Player() { 
    this.nick = ""; 
    this.type = ""; 
    this.health = -1; 
} 

,或者使用參數的構造函數來創建對象。

+0

如何使用參數化構造函數創建對象?這就是我所希望的。我想要做的是讓程序啓動,然後在用戶輸入字符串之前提示用戶輸入名稱和暱稱字符串,而沒有任何playerType和暱稱的值。 再次,我100%的綠色,所以如果沒有任何意義,告訴我:) –

+0

@JarandBoge ..然後首先閱讀用戶的價值觀。將它存儲在一些變量中。然後使用參數化構造函數,將這些變量作爲參數傳遞。那不會那麼困難。這只是將字符串文字作爲參數傳遞的方式。 –

0

默認構造函數由java在缺少構造函數的情況下創建,這個構造函數只是簡單地調用超類。當你定義一個顯式的構造函數時,java不會創建一個。因此,您可以在您的類 中定義一個默認構造函數,例如

public Player() 
{ nick = "abc"; 
    type = "type"; 
    health = 100; 
    System.out.println("Welcome " + nick +" the " + type + ". I hope you are ready for an adventure!"); 
} 

或修改代碼來調用您定義的構造函數。

Player player = new Player("nick","type"); 
0

你試圖在你的main()中做什麼 - 方法是創建一個新的Player對象。但問題是你必須使用你實現的構造函數(Player(String, String)),但是你使用了一個沒有任何參數的構造函數(Player())。

您應該使用空字符串(例如,如果你想獲得玩家虛擬)

Player player = new Player("",""); 

,或者你應該給新的播放器實例名稱,並輸入您要,因此,例如

Player player = new Player("flashdrive2049","Player"); 

問候。