图片中报错的那一行代码该如何定义,直接定义构造方法显示报错,该如何调用或者定义?
按照你 main方法里调用的代码, Child类 你要定义 3个入参的构造函数,
加上构造函数
public Child(String name, int Age, String school) {
super(name, age);
schoolName = school;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:package list;
import java.util.Arrays;
/**
* <p>Descirption:分别用顺序表以及链表的方式实现常用的几种排序算法</p>
*
* @author 王海
* @version V1.0
* @package list
* @date 2018/4/7 16:25
* @since 1.0
*/
public class MultiSortArrayAndList {
private static final float[] FORSORT = {10, -2, 3, -1111111111.9999999f, 55, 32.8f, 66, 7.8f, 10233.88f, 52222, 45.67f, 13, 654, 99999, 1000000.666f, 77.77f, 3214, 66, 736.2f, 5, 23, 65465, 54783, 9999.999f, 5664645, -33, -66.5566778899f, 2147483647.555f, 2147483647};
/**
* 冒泡排序,带标志位(属于交换排序)
*
* @param forSort 等待排序的序列
*/
private void bubbleSort(float[] forSort) {
String name = "冒泡";
long begin = System.nanoTime();
if (forSort.length <= 1) {
printHelper(name, forSort, begin);
return;
}
// 冒泡排序
for (int i = 0; i < forSort.length - 1; i++) {
// 假设下一次不需要再排序
boolean sorted = false;
for (int j = 0; j < forSort.length - i - 1; j++) {
// 这里-i是因为前几次的排序已经沉底了i个数
if (forSort[j] > forSort[j + 1]) {
float temp = forSort[j];
forSort[j] = forSort[j + 1];
forSort[j + 1] = temp;
// 排序过了
sorted = true;
}
}
if (!sorted) {
break;
}
}
printHelper(name, forSort, begin);
}
/**
* 快速排序(属于交换排序)
*
* @param forSort 等待排序的序列
* @param left 左
* @param right 右
*/
private float[] quickSort(float[] forSort, int left, int right) {
if (forSort.length <= 1) return;
int i = left;
int j = right;
// 递归的结束条件
if (left < right) {
float benchmark = forSort[left];
// 下面不能写if,因为并不是说左右指针各移动一次就能保证左右指针“碰头”;完成一次排序
while (i < j) {
// 右侧比较,小则往前放,大则右指针继续“向左前进”
while (i < j && forSort[j] > benchmark) {
--j;
}
// while循环退出,如果left还小于right,就该交换数据了
if (i < j) {
forSort[i++] = forSort[j];
}
// 左侧比较,大则往后放,小则指针继续“向右前进”
while (i < j && forSort[i] < benchmark) {
++i;
}
if (i < j) {
forSort[j--] = forSort[i];
}
}
forSort[i] = benchmark;
// 左部分递归
quickSort(forSort, left, i - 1);
// 右部分递归(编译器是用栈实现递归,之前的i的状态会“回来”)
quickSort(forSort, i + 1, right);
}
return forSort;
}
/**
* 直接排序(属于插入类排序)
*
* @param forSort 等待排序的序列
*/
private void driectSort(float[] forSort) {
String name = "直接插入";
long begin = System.nanoTime();
if (forSort.length <= 1) {
printHelper(name, forSort, begin);
return;
}
for (int i = 1; i < forSort.length; i++) {
// 注意,tmp是“准备”本次排序的那个数
float temp = forSort[i];
// 第一次j为0,因为第一个数有序
int j = i - 1;
while (j >= 0 && temp < forSort[j]) {
// 大的先后移
forSort[j + 1] = forSort[j];
// 没必要马上将当下就位置处的值设为temp,小的继续“往前”
--j;
}
// j已经小于0了,记得加回去
forSort[++j] = temp;
}
printHelper(name, forSort, begin);
}
private void shellSort(float[] forSort) {
String name = "希尔";
long begin = System.nanoTime();
if (forSort.length <= 1) {
printHelper(name, forSort, begin);
return;
}
// 初始增量increment为length / 2【上下取整都行】
// 向上取整用Math.ceil()
// 向下取整用Math.floor(),int a = b/c为下取整
int incrementNum = forSort.length / 2;
while (incrementNum >= 1) {
// 这里的i < forSort.length还不太规范,有多余
for (int i = 0; i < forSort.length; i++) {
// 进行直接插入排序
for (int j = i; j < forSort.length - incrementNum; j = j + incrementNum) {
int drict = j;
// 注意,tmp是“准备”本次排序的那个数
float tmp = forSort[drict + incrementNum];
while (drict >= 0 && forSort[drict] > forSort[drict + incrementNum]) {
forSort[drict + incrementNum] = forSort[drict];
drict -= incrementNum;
}
forSort[drict + incrementNum] = tmp;
}
}
//设置新的增量
incrementNum = incrementNum / 2;
}
printHelper(name, forSort, begin);
}
private void binaryInsertSort(float[] forSort) {
String name = "折半插入";
long begin = System.nanoTime();
if (forSort.length <= 1) {
printHelper(name, forSort, begin);
return;
}
int n = forSort.length;
int i, j;
// "本次"插入数据时,前面已有i个数
for (i = 1; i < n; i++) {
// temp为本次循环待插入有序列表中的数
float tmp = forSort[i];
int low = 0;
int high = i - 1;
// while循环,找到temp插入有序列表的正确位置
while (low <= high) {
// 有序数组的中间坐标,此时用于二分查找,减少查找次数
int mid = (low + high) / 2;
if (forSort[mid] = tmp) {
low = mid;
break;
}
// 若有序数组的中间元素大于待排序元素,则有序序列向中间元素之前搜索,否则向后搜索
if (forSort[mid] > tmp) {
high = mid - 1;
} else {
low = mid + 1;
}
}
for (j = i; j > low; ) {
// 从最后一个元素开始,前面的元素依次后移
forSort[j] = forSort[--j];
}
// 插入temp
forSort[low] = tmp;
}
printHelper(name, forSort, begin);
}
/**
* 通用打印方法打印
*
* @param sorted 排序好的数组
* @param sortName 排序方法
* @param beginTime 排序开始时间
*/
private void printHelper(String sortName, float[] sorted, long beginTime) {
System.out.println("\n" + sortName + ", 排序耗时=======" + (System.nanoTime() - beginTime) + "纳秒");
for (float value : sorted) {
System.out.print(value + " ");
}
}
public static void main(String[] args) {
for (float aCopy : FORSORT) System.out.print(aCopy + ", ");
MultiSortArrayAndList msort = new MultiSortArrayAndList();
/* 数据量小,比较不出时间 */
// 冒泡排序
msort.bubbleSort(Arrays.copyOf(FORSORT, FORSORT.length));
// 快速排序
long begin = System.nanoTime();
float[] sorted = msort.quickSort(Arrays.copyOf(FORSORT, FORSORT.length), 0, FORSORT.length - 1);
System.out.println("\n快速排序, 耗时=======" + (System.nanoTime() - begin) + "纳秒");
for (float value : sorted) {
System.out.print(value + " ");
}
// 直接插入
msort.driectSort(Arrays.copyOf(FORSORT, FORSORT.length));
// 希尔排序
msort.shellSort(Arrays.copyOf(FORSORT, FORSORT.length));
// 折半查找排序
msort.binaryInsertSort(Arrays.copyOf(FORSORT, FORSORT.length));
}
}
针对问题“如何修复报错的构造方法?”,参考资料提供的是关于线程池和过滤器的内容,与问题本身无关。因此,无法给出具体的解决方案。请提供更准确的问题描述和相关内容,以便能够得到更有效的帮助。