如何解决方法不能应用于给定类型

问题描述 投票:-1回答:1

我正在创建一个程序进行二进制搜索。

该方法应重复不同的次数,我想打印出重复该方法所花费的时间。

它们的代码现在是我的错误,而编译方法二进制搜索无法编译成给定的类型,并且我不知道如何解决。

public class Bin_search  {
    public static void main(String[] args) {
        int z = Integer.parseInt(args[0]);
        double k = (int)(Math.random()*1000001);
        int n = 1000000;
        int arr[] = new int[n];
        int i = 0;
        for(i = 0;i<n;i++){
            arr[i] = i;
        }
        long startTime = System.currentTimeMillis();
        for(int t= 0; t<z; t++) {
        binarySearch();
        }
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("It took " + elapsedTime + " ms to repeat the algorithm.");
        }
        int binarySearch(int n, double k, int arr[]) {
            int li = 0;
            int re = n+1;
            int m;
            while (li <  re-1) {
                m = (li + re) / 2;
                if (k <=arr[m]){
                    re = m;
                }
                else{
                    li = m;
                }
            }
            return re;
        }
}
java arrays
1个回答
0
投票

首先,binarySearch方法由三个参数组成,并且您不提供它们,其次,应将您的binarySearch方法设为静态,否则,必须先创建实例才能从main方法中调用它。

我想应该是这样的>

public class Main  {
    public static void main(String[] args) {
        args = new String[3];
        args[0] = "100";
        int z = Integer.parseInt(args[0]);
        double k = (int)(Math.random() * 1000001);
        int n = 1000000;
        int arr[] = new int[n];
        int i = 0;
        for(i = 0;i<n;i++){
            arr[i] = i;
        }
        long startTime = System.currentTimeMillis();
        for(int t= 0; t<z; t++) {
        binarySearch(n, k, arr);
        }
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
        System.out.println("It took " + elapsedTime + " ms to repeat the algorithm.");
        }

    static int binarySearch(int n, double k, int arr[]) {
            int li = 0;
            int re = n+1;
            int m;
            while (li <  re-1) {
                m = (li + re) / 2;
                if (k <=arr[m]){
                    re = m;
                }
                else{
                    li = m;
                }
            }
            return re;
        }
}

EDIT

:现在可以使用,但是请检查您的应用程序逻辑是否可以确保它正在执行您期望的操作
© www.soinside.com 2019 - 2024. All rights reserved.