2014-12-19 58 views
1

我做一個初學者的練習,目標是創建以下的輸出:不敢說我的字符串函數

比利你好,很高興認識你!

你好傑克,很高興見到你!

你好邁克爾,很高興見到你!

下面是我的代碼:

package apollo.exercises.ch03_methods; 

public class Ex2_SayMyName { 
    public static void main(String[] args) { 
     String name1 = "Billy"; 
     String name2 = "Jake"; 
     String name3 = "Michael"; 
    } 

    public void SayMyName(String name){ 
     System.out.println("Hello " + name + ", it's good to meet you!"); 
    } 

    SayMyName(name1); 
    SayMyName(name2); 
    SayMyName(name3); 
} 

我得到SayMyName(name1);和錯誤高於行}

對於},它說我需要插入另一個}來完成類體,但是它不是已經完成嗎?

對於SayMyName(name1),我得到「語法錯誤,插入」 ...... VariableDeclaratorId「完成FormalParameterList」

我在做什麼錯? :(執行什麼

+0

@DanielStanley - 完全不是:) ..一對夫婦*應答者*會學到一些東西(*靜態上下文*)這裏:P – TheLostMind

+0

@TheLostMind哈哈這是非常真實的! :) –

回答

2

移動方法的主要方法

public static void main(String[] args) { 
    String name1 = "Billy"; 
    String name2 = "Jake"; 
    String name3 = "Michael"; 

    SayMyName(name1); 
    SayMyName(name2); 
    SayMyName(name3); 
} 

也在裏面調用,如果喲調用SayMyName時必須做出的方法靜態的,恰克這個你不希望類Ex2_SayMyName的一個實例:

public static void SayMyName(String name) 

而最後一個雞蛋裏挑骨頭,尊重java的命名規則和重命名你的方法開始與小寫。變量和方法總是以小寫字母開頭,類名以大寫字母開頭。

+0

感謝您的支持!我從來不知道命名約定,所以我一定會堅持。 –

0

是你的類的main的方法,所以,把以SayMyName呼叫之外它沒有預期的效果。你需要把調用你的方法主要方法裏面。 此外,該SayMyName必須是爲了將其從主稱爲靜態您可能希望看到this(約在Java靜態方法) 就像這樣:

package apollo.exercises.ch03_methods; 
public class Ex2_SayMyName { 
public static void main(String[] args) { 

    String name1 = "Billy"; 
    String name2 = "Jake"; 
    String name3 = "Michael"; 

    SayMyName(name1); 
    SayMyName(name2); 
    SayMyName(name3); 
} 

public static void SayMyName(String name){ 
    System.out.println("Hello " + name + ", it's good to meet you!"); 
} 
+0

它不會編譯saymyname不是靜態的 – MihaiC

+0

是真的。將編輯 – aviad

+0

@aviad感謝您的靜態類的鏈接!我只是想確保我明白。使一個方法成爲靜態是爲了防止它受到同一類中其他元素的影響嗎? –

0

呼叫通過移動從main方法如下main

SayMyName(name1); 
SayMyName(name2); 
SayMyName(name3); 

所以,你的程序是這樣的:

public class Ex2_SayMyName { 
public static void main(String[] args) { 

    String name1 = "Billy"; 
    String name2 = "Jake"; 
    String name3 = "Michael"; 

    SayMyName(name1); 
    SayMyName(name2); 
    SayMyName(name3); 
} 

//note the static in the below line 
public static void SayMyName(String name){ 
    System.out.println("Hello " + name + ", it's good to meet you!"); 
} 
} 

如果你想直接調用你的方法未做類的實例,那麼你需要的static關鍵字的方法的聲明。這是我在上述程序中所做的。

2

把這幾行main()方法:

SayMyName(name1); 
SayMyName(name2); 
SayMyName(name3); 

而且使public void SayMyName()靜態這樣的:

public static void SayMyName(String name){ 
    System.out.println("Hello " + name + ", it's good to meet you!"); 
} 
1

您正在呼叫SayMyName函數在類邊界(在任何方法和塊之外),這是不可能的。在類邊界只有聲明實例化可以完成。
SayMyName放在主要或任何其他方法。

public static void main(String... args) 
{ 
    //your code here 
    SayMyName(name1); 
    SayMyName(name2); 
    SayMyName(name3); 
} 

並將SayMyName方法更改爲static
編輯 -級邊界< - 之外的任何方法和塊

+0

這是不正確的,我可以把靜態塊,在屏幕上打印值在該類空間上的屏幕上類加載 – MihaiC

+0

是的,但需要靜態變量意味着name1,2,3應該是靜態變量。但是這裏op是聲明main方法中的變量。不僅是靜態的,而且你可以把你的代碼放在匿名塊中。 – Devavrata

+0

我的觀點是「只能聲明和實例化」是錯誤的。我可以這樣做:static class {Sytem.out.println(「abc」);}在類邊界中,它編譯,運行,甚至在類加載期間將abc寫入控制檯 – MihaiC