我正在尝试构建一个程序,在这个程序中我有一个int数组的可视化表示,同时它们被排序。将有两种不同的搜索算法可供选择。所有功能都分为类,接口和抽象类。我的主要问题是将数据从一件事情转移到另一件事情。
我的主类实现了基本的窗口功能。绘制窗口,选择搜索算法的几个按钮,提供输入数组的文本字段,并在其中心显示数组的条形图可视化。
绘制条形图是在扩展JComponent
的类中完成的。这也是我将数字字符串转换为int数组的地方。我已经可以绘制图形,更改数组并且也可以绘制它。
现在我有一个名为Sorter
的接口,它提供了以下方法。
public void setUpTo( int i ); // to limit the number of swaps during the search
public void setNumbers( int[] numbers );
public void sort();
public String getName();
public int getSwaps();
然后我有实现CountingSort
的抽象类Sorter
和扩展CountingBubbleSort
的类CountingSort
。
这对我来说非常困惑。
在我的主类中,我听一个按钮来传递TextField的内容并开始排序。
我需要做什么才能将CountingSort
中的int数组导入CountingBubbleSort
?
我已经实施了CountingBubbleSort
。
让我知道我需要提供哪些其他信息。
答案 0 :(得分:2)
如果向Sorter
接口(getNumbers()
)添加另一个方法,它将保证所有Sorter
实现都有一个getter和setter到内部int数组。 / p>
interface Sorter {
public int[] getNumbers();
public void setNumbers(int [] numbers);
//... other methods....
}
然后,如果您在抽象CountingSort
类中实现它,那么您将能够使用这些方法而无需在所有子类中实现它们。
abstract class CountingSort implements Sorter{
private int [] mNumbers;
@Override
public int[] getNumbers() {
return mNumbers;
}
@Override
public void setNumbers(int[] numbers) {
mNumbers = numbers;
}
}
然后,您可以随时访问具体实现中的数字(如果已设置)。我建议在CountingBubbleSort
中使用一个构造函数,它接受int数组(或随机生成它,但是你想创建它)。这个构造函数可能会移动到抽象类:
class CountingBubbleSort extends CountingSort{
public CountingBubbleSort(int [] numbers){
setNumbers(numbers);
}
public void someOtherMethod(){
int [] numbers = getNumbers();
}
}
在您的主类中,您可以使用继承提供的内容,如下所示:
class MainClass {
private Sorter mSorter;
public void doSort(){
//Create sorter objects
if(you want CountingBubbleSort){
mSorter = new CountingBubbleSort();
}else{
mSorter = new BubbleSort();
}
//get the numbers
int [] numbers = mSorter.getNumbers();
// do the sorting
mSorter.sort();
}
}