继承和InputBox

时间:2014-01-11 03:41:47

标签: java inheritance polymorphism

所以我有一个名为Factorial的超类和两个叫做Fibonacci和Arithmetic的子类。在我的主要超级类中,我使用我的主类中的多态数组调用该方法,我有一个输入框查询,我想只显示一次,但它会多次显示。无论如何我可以阻止这个吗?我的主要课程叫做PolyMorphism。我知道这很乏味,但这是我制作节目的方式,并希望它是:p

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

Factorial arrayObject[] = new Factorial[3];
            arrayObject[0] = new Factorial();
            arrayObject[1] = new Fibonacci();
            arrayObject[2] = new Arithmetic();

for(int x=0;x<arrayObject.length;++x){
        arrayObject[x].sequence();
    }

public class Factorial extends JFrame {
//this input box shows up 3 times when I launch.
public final String valueInput = JOptionPane.showInputDialog("Please enter a number between 1 and 20.");
public void sequence(){

    System.out.println("Factorial:");
    System.out.println(fact(Integer.valueOf(valueInput)));

public static long fact (int n){
    if (n <= 1){
        return 1;
    }else
        return n * fact(n-1);
}

public class Fibonacci extends Factorial {
public void sequence(){
    int inputValue = Integer.parseInt(valueInput);
    System.out.println("Fibonacci Sequence");
    /**for (int value = 0; value < inputValue; value++){
        System.out.println(fibonacciSequence(value));
    } **/
    System.out.println(fibonacciSequence(inputValue));
}

public static long fibonacciSequence(int v) {
    // TODO Auto-generated method stub
        if(v == 0) {
            return 0;
        }else if (v <= 2){
            return 1;
        }

        long fibonacci = fibonacciSequence(v - 1) + fibonacciSequence(v-2);
        return fibonacci;
}

}

问题的评论是在Factorial类下,暂时忽略JFrame。

2 个答案:

答案 0 :(得分:1)

每个Factorial实例(其中有三个)都有自己的valueInput属性,因此行为符合预期。您可以创建此字段static(因此共享),但仍不清楚您要完成的是什么。

最有可能的情况是你应该完全将输入显示与Factorial实现分开。

答案 1 :(得分:1)

Factorial课程中,你有这个:

public final String valueInput = JOptionPane.showInputDialog("Please enter a number between 1 and 20.");

这意味着每次创建它或子类的实例时,都会弹出该输入对话框。

答案是:不要这样做。

将它放在方法中,并在希望输入对话框显示时调用该方法。