我想做一个非常基本的二进制搜索来搜索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;
}
}
程序将运行,但输入任何值并单击“搜索”将不会执行任何操作。我是一个非常基础的初学者,仍在使用NetBeans学习Java,我不知道我是否将代码放在正确的区域或者排序是否正常工作。任何帮助我解开的人都将不胜感激。谢谢。
答案 0 :(得分:0)
您正在定义colIndex,但您从不使用它。
你是否想在这一行中使用它而不是1?
fPrice = (String)jTable1.getValueAt(rowIndex, 1);
你也不能指望你的ArrayList是有序的。我不确定,如果你的二进制搜索工作,它没有被订购。