所以我有一个名为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。
答案 0 :(得分:1)
每个Factorial
实例(其中有三个)都有自己的valueInput
属性,因此行为符合预期。您可以创建此字段static
(因此共享),但仍不清楚您要完成的是什么。
最有可能的情况是你应该完全将输入显示与Factorial
实现分开。
答案 1 :(得分:1)
在Factorial
课程中,你有这个:
public final String valueInput = JOptionPane.showInputDialog("Please enter a number between 1 and 20.");
这意味着每次创建它或子类的实例时,都会弹出该输入对话框。
答案是:不要这样做。
将它放在方法中,并在希望输入对话框显示时调用该方法。