如何使用二进制搜索在jTable中查找价格?

时间:2017-01-04 20:45:34

标签: java swing netbeans jtable binary-search

我想做一个非常基本的二进制搜索来搜索Price,它位于我的jTable1的第4列。这是我到目前为止尝试使用的代码无济于事。下面还有一张图片。

public class BinSearch {

    public static int binarySearch(ArrayList<String> name, int low, int high, String key) {

        if (low <= high) {
            int mid = (low + high) / 2; //get mid point
            if (name.get(mid).equals(key)) {
                return mid;
            } else if ((key.compareTo(name.get(mid))) < 0) {
                return binarySearch(name, low, mid - 1, key);
            } else {
                return binarySearch(name, mid + 1, high, key);
            }
        } else {
            return -1;
        }
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        //get contents from columns:
        ArrayList<String> st = new ArrayList<String>();
        int rowCount = jTable1.getRowCount();
        String fPrice;
        int rowIndex = 0; //start from row 0
        int colIndex = 4; //Price is at column 4
        boolean emptyFlag = false;
        do {
            fPrice = (String) jTable1.getValueAt(rowIndex, 1);
            if (fPrice != null && fPrice.length() != 0) {
                st.add(fPrice);
                rowIndex++;
            } else {
                emptyFlag = true;
            }
        } while (rowIndex < rowCount && !emptyFlag);
        Collections.sort(st); //sort the list
        String key = jTextField4.getText(); //get the search keyword
        int low = 0;
        int high = st.size() - 1;
        int searchResult = BinSearch.binarySearch(st, low, high, key);
        print searchResult;
    }
}

enter image description here

程序将运行,但输入任何值并单击“搜索”将不会执行任何操作。我是一个非常基础的初学者,仍在使用NetBeans学习Java,我不知道我是否将代码放在正确的区域或者排序是否正常工作。任何帮助我解开的人都将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您正在定义colIndex,但您从不使用它。

你是否想在这一行中使用它而不是1?

fPrice = (String)jTable1.getValueAt(rowIndex, 1);

你也不能指望你的ArrayList是有序的。我不确定,如果你的二进制搜索工作,它没有被订购。