如何使用Java中的二进制搜索功能调试问题?

时间:2015-03-30 00:06:55

标签: java arraylist

首先,我需要计算当查找数字大于“登陆”数字时。 (少了,我可以使用/ 2,但我不知道该怎么办,因为我使用的是int而不是双倍。)

其次我遇到一个越界错误,我不知道原因。

import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JOptionPane;

public class BinärSökning {
    public static void main(String[] args){

        ArrayList<Integer> listA = new ArrayList<Integer>();
        Integer[] otherList = new Integer[] {1,2,3,4,5,6,7,8,9,10};
        listA.addAll(Arrays.asList(otherList));

        String lts = JOptionPane.showInputDialog("Which number between 1 and 10 are you looking for? ");
        int lt = Integer.parseInt(lts);

        int s = listA.size()/2;

        while(true){
            if(lt==listA.get(s)){

                System.out.println("Number found in position " + s);

            }if(lt<listA.get(s)){

                s = ???;

            }else{

                s = s/2;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

二进制搜索的算法并不像你写的那样。 这是谷歌的第一个结果: http://algs4.cs.princeton.edu/11model/BinarySearch.java.html

答案 1 :(得分:0)

以下是您使用从George提到的链接中获取的正确二进制搜索算法改进的代码。

int lo = 0;
int hi = listA.size - 1;
while (lo <= hi) {
    int mid = lo + (hi - lo) / 2;

    if (lt < listA.get(mid)) {
        hi = mid - 1;
    } else if (lt > listA.get(mid)) {
        lo = mid + 1;
    } else {
        System.out.println("Number found in position ", mid);
    }
}

该算法将排序的数字数组减半,具体取决于mid处的数字是大于还是小于输入值lt。此外,如果在排序数组中找不到用户输入,则应提供一些错误处理。