2013-12-21 59 views
-3

我有打印模式試圖讓我的靜態類

public static void Pattern1() 
{ 
    for (i = rowQuantity; i >= 1; i--) 
    { 
     for (j = 0; j < i; j++) 
     { 
      System.out.print(rowQuantity-j); 
     } 
     System.out.println(); 
    } 
    System.out.println(); 
} 

我有類似這樣的幾種不同的模式,我想要做的(如果可能的話)的類的數組創建靜態類,它打印一個數組,其中每個元素都是這些模式之一。我可以這樣做嗎?我希望能夠並排打印圖案。

我想這樣的事情無濟於事:

public static void display() 
{ 
    rowQuantity = 5; 
    TriangleDiamondPrinter[] pattern = new TriangleDiamondPrinter[4]; 
    pattern[0] = Pattern1(); 
    pattern[1] = Pattern2(); 
    pattern[2] = Pattern3(); 
    pattern[3] = Pattern4(); 

    for (i=0; i<4; i++) 
     //System.out.print((i+1) + ") " + pattern[i] + " "); 
} 

第(i + 1)部分只是標記每個陣列由它的模式#和空的空間只是創造模式之間的一些空間。

任何人都可以幫我嗎?

+0

你有什麼方法,它們本身沒有可以放入數組的對象。 – zapl

+0

在Java中沒有獨立的「靜態類」。你有靜態方法 - 這是一個很大的區別。小細節在這裏重要。 –

+0

謝謝zapl我對此很新,並且與所有術語混淆。 – user2348639

回答

2

很確定你可以。請注意,當你說

pattern[i] 

你只是指對象本身存儲在模式數組中的索引我。如果您想要的圖案實際打印,你必須在這種情況下做這樣的事情

pattern[i].printPattern() 

上面你實際上是通過調用其類結構屬於對象的方法。

請注意,你上面有什麼不是一個類。

public static void Pattern1() 

這是聲明一個方法/函數。你想要把裏面的東西一樣

public class FirstPattern {...} 

如果你真的想了一堆不同的類,如FirstPattern,SecondPattern等的我建議你擁有所有這些延長其持有printPattern一個共同的模式類()。一個簡單的例子如下:

public class Pattern { 
    public void printPattern() { 
     System.out.println("This should not print"); 
    } 
} 

而現在......

public class FirstPattern extends Pattern { 
    @override 
    public void printPattern() { 
     //print your pattern stuff here... 
    } 
} 

因此,您FirstPattern,SecondPattern等類都可以重寫用自己獨特的模式printPattern()方法。這樣,你可以讓你的數組保存Pattern類型的對象。現在

Pattern[] array = new Pattern[...]; 

,您可以通過數組迭代,並且因爲它們都延伸模式,您可以撥打printPattern每個FirstPattern,SecondPattern等對象和模式打印。請注意,在[]之前的Pattern關鍵字基本上是指「這個數組將保存模式對象」 - 通過讓所有子類(FirstPattern等)擴展Pattern超類,FirstPattern對象是一個Pattern,一個SecondPattern對象也是一個模式,等等。因此,雖然FirstPattern與SecondPattern不同,但繼承允許您將這兩個「不同」類型存儲在同一個數組中。我相信你試圖實現一個簡單的形式多態,這基本上意味着你有一組對象,當從每個對象調用單個方法時,這些對象的行爲可能會有所不同。請注意,一個接口也可以完成工作。

+0

不要刪除[post](http://stackoverflow.com/questions/22092484/why-is-ruby-filling-up-the-entire-2d-array)忽略其他努力..你有幫助doesn這並不意味着,所有未來的讀者都明白了。 –

+0

我的問題是downvoted,所以我認爲這是不受歡迎的。 –

+0

只有一個投票,你有。誰知道將來你不會得到更多的選票。 –

0

在Java中沒有獨立的「靜態類」。你有靜態方法 - 這是一個很大的區別。小細節在這裏重要。

如果你想要一個在不同的具體類實現中具有不同行爲的公共方法的類型,可以考慮創建一個稱爲MyPattern的接口,給它一個方法,比如說public void printPattern();(注意方法應該以小寫字母),然後創建這些的集合,一個ArrayList<MyPattern>。然後,您可以遍歷集合中每個對象上調用printPattern()的列表。

2

Pattern1不是「靜態類」 - 它是一種靜態方法。此外,你不能這樣做,因爲pattern[0] = Pattern1();返回Pattern1void

從我個人理解,你想有不同的模式陣列,並循環儘管這陣列,同時在打印他們。要做到這一點,你需要使用多態。首先,創建一個接口:

public interface IPattern{ 
    public String getPatternString(); 
} 

然後你實現這個接口:

public class Pattern1 implements IPattern{ 
    public String getPatternString(){ 
     //code to build a string and return it 
    } 
} 

等了Pattern2等。最後,你填補這些模式陣列,並對其每一次迭代在下一個條目上調用getPatternString

public static void display() 
{ 
    IPattern[] pattern = new IPattern[4]; 
    pattern[0] = new Pattern1(); 
    pattern[1] = new Pattern2(); 
    pattern[2] = new Pattern3(); 
    pattern[3] = new Pattern4(); 

    for (i=0; i<4; i++) 
     System.out.print((i+1) + ") " + pattern[i].getPatternString() + " "); 
}