试图创建一个静态类的数组

时间:2013-12-21 03:02:53

标签: java arrays class object static

我有一个打印模式的类

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)部分只是用它的模式#标记每个数组,而空的空格只是在模式之间创建一些空间。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

很确定你可以。请注意,当你说

pattern[i]

您只是简单地引用存储在模式数组内的索引i处的对象本身。如果您希望图案实际打印,则必须执行类似

的操作
pattern[i].printPattern()

在上面这种情况下,您实际上通过其类结构调用属于该对象的方法。

请注意,您上面的内容不是一个类。

public static void Pattern1()

这是声明方法/功能。你想把它放在像

这样的东西里面
public class FirstPattern {...}

如果你真的想要一堆不同的类,比如FirstPattern,SecondPattern等,我建议你们所有这些类都扩展了一个普通的Pattern类,它包含一个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[...];

现在,您可以遍历数组,并且因为所有这些都扩展了Pattern,您可以为每个FirstPattern,SecondPattern等对象调用printPattern,并打印模式。请注意,[]之前的Pattern关键字基本上是说&#34;这个数组将保存Pattern&#34; - 通过让所有子类(FirstPattern等)扩展Pattern超类,FirstPattern对象是Pattern,SecondPattern对象也是Pattern,依此类推。因此,虽然FirstPattern与SecondPattern不同,但继承允许您存储这两个&#34;不同的&#34;同一数组中的类型。我相信你正在尝试实现一个简单形式的多态,这基本上意味着你有一组对象,当从每个对象调用一个方法时,它们的行为会有所不同。请注意,界面也可以完成工作。

答案 1 :(得分:2)

Pattern1不是“静态类” - 它是一种静态方法。另外,由于pattern[0] = Pattern1();返回Pattern1

,您无法执行void

据我所知,你想要一个具有不同模式的数组,并在打印它们时循环通过该数组。要做到这一点,你需要使用多态。首先,您创建一个界面:

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() + "    ");
}

答案 2 :(得分:0)

没有独立的静态类&#34;在Java中。你有静态的方法 - 这是一个很大的不同。这里的细节很重要。

如果你想要一个具有在不同具体类实现中表现不同的公共方法的类型,考虑创建一个接口,比如名为MyPattern,给它一个方法,比如说public void printPattern();(注意方法应该从较低的开始-case letter),然后创建一个ArrayList<MyPattern>的集合。然后,您可以遍历在集合中每个对象上调用printPattern()的列表。