Java ';无效';此处不允许类型,可调用func
我试图通过Callable使函数成为函数的参数。当您尝试运行它时,它会说错误此处不允许使用'void'类型atlong a=timer(sort.Insertion(a))强> 为什么呢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
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;
}
});