这是我的打印方式:
else if (cmd.equalsIgnoreCase("I"))
{
System.out.println("Enter item name to get price:");
String n = in.nextLine();
System.out.println( table.lookup_by_item(n) + "\n");
}
这是我存储信息和实施二进制搜索的方式:
public class LookupTable
{
private ArrayList<Item> Item_key;
public LookupTable()
{
Item_key = new ArrayList<Item>();
}
public void read(Scanner in) {
String k = null, v = null;
while(in.hasNextLine()) {
k = in.nextLine();
v = in.nextLine();
Item_key.add(new Item(k,v));
//System.out.println(k);
//System.out.println(v);
}
}
public String lookup_by_item(String n)
{
Collections.sort(Item_key);
int index_found = Collections.binarySearch(Item_key, new Item(n, null));
System.out.println(index_found);
String itemn="";
if(index_found >= 0) {
itemn = Item_key.get(index_found).getValue();
}
return itemn;
这是我的物品类别:
public class Item implements Comparable<Item>
{
public String key;
public String value;
public Item(String k, String v)
{
key = k;
value = v;
}
public String getKey()
{
return key;
}
public String getValue()
{
return value;
}
public int compareTo(Item otherObject)
{
Item other = (Item) otherObject;
return key.compareTo(other.key);
这是我要进行二进制搜索的文本文件的内容:
Flat White
4.05
Cappuccino
4.45
Latte
4.45
Americano
3.35
Iced Coffee
3.25
Cold Brew
3.75
如果我运行它并搜索任何随机饮料,系统将打印出负的index_found。我试图更改返回值“ key.compareTo(other.key);”设置为“ 0”,但无论我输入什么内容,它始终返回“ 3.35”。 “ 3.35”是项目“ Americano,3.35”的值。
任何智能编码器,请教我输入密钥时如何获取所需的值。就像我输入“卡布奇诺咖啡”一样,我可以得到4.45返还。
答案 0 :(得分:1)
我编译并执行了上面的代码,它工作正常,并给出了正确的答案。 enter some key value which is not there in your ArrayList
,即 Item_key 时,唯一一次返回负索引值。我猜您在犯一些拼写错误/拼写错误,因为它使索引返回负数。