Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ';无效';此处不允许类型,可调用func_Java_Sorting_Higher Order Functions_Callable - Fatal编程技术网

Java ';无效';此处不允许类型,可调用func

Java ';无效';此处不允许类型,可调用func,java,sorting,higher-order-functions,callable,Java,Sorting,Higher Order Functions,Callable,我试图通过Callable使函数成为函数的参数。当您尝试运行它时,它会说错误此处不允许使用'void'类型atlong a=timer(sort.Insertion(a)) 为什么呢 import java.util.*; import java.util.concurrent.*; import java.io.*; public class ThisClass { public static Sort sort = new Sort(); public static vo

我试图通过Callable使函数成为函数的参数。当您尝试运行它时,它会说错误此处不允许使用'void'类型atlong a=timer(sort.Insertion(a))

为什么呢

import java.util.*;
import java.util.concurrent.*;
import java.io.*;

public class ThisClass {
    public static Sort sort = new Sort();

    public static void main(String[] args) throws FileNotFoundException {

        Scanner scanner = new Scanner(new File("location/here.txt"));

        int z = 0;

        while(scanner.hasNextInt()) {
            z++;
        }

        int[] A = new int[z];
        for(int i = 0; i < A.length; i++) {
            A[i] = scanner.nextInt();
            System.out.print(" " + A[i]);
    }

        long a = timer(sort.Insertion(A));
    }

    public long timer (Callable func) throws Exception {
        long start = System.currentTimeMillis();
        func.call();
        long end = System.currentTimeMillis();
        return end - start;
    }

    public static void print (int[] A) {
        for(int i = 0; i < A.length; i++) {
            System.out.print(" " + A[i]);
        } 
    }

}
import java.util.*;
导入java.util.concurrent.*;
导入java.io.*;
公共类此类{
公共静态排序=新排序();
公共静态void main(字符串[]args)引发FileNotFoundException{
Scanner Scanner=新扫描仪(新文件(“location/here.txt”);
int z=0;
while(scanner.hasNextInt()){
z++;
}
int[]A=新的int[z];
for(int i=0;i

import java.util.ArrayList;
公共类排序{
公共空白插入(int[]A){
对于(int j=1;j=0)和&(A[i]>键)){
A[i+1]=A[i];
i=i-1;
}
A[i+1]=键;
}
}
}

另外,如果有人能帮助我们在Java中实现更高阶的函数,或者让函数作为参数在函数中传递,那就太好了。非常感谢

错误消息表示
Sort.Insertion()
具有
void
返回类型

如果您试图在计时器上调用它,则需要将其包装为
可调用的
,如下所示(未测试):

long a=计时器(新的可调用(){
无效调用(){
排序.插入(A);
返回null;
}
});

这需要制作一个
A
final
。根据需要更改
Void

您可以发布
排序
类的代码吗?我怀疑
排序。插入(A)
不会返回可调用的
对象尝试再次查看@alfasin假设插入排序是一个整数数组,我应该在“Void”中放置什么?
import java.util.ArrayList;

public class Sort {

    public void Insertion (int[] A) {
        for(int j = 1; j < A.length; j++) {
            int key = A[j];
            int i = j - 1;
            while((i >= 0) && (A[i] > key)) {
                A[i + 1] = A[i];
                i = i - 1;  
            }
            A[i + 1] = key;
        }
    }
}
    long a = timer(new Callable<Void>() {
        Void call() {
           sort.Insertion(A);
           return null;
        }
    });