即使我确定该项在arraylist中,我的binarySearch也会向我返回负索引

时间:2019-11-26 15:52:52

标签: java binary-search

这是我的打印方式:

     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返还。

1 个答案:

答案 0 :(得分:1)

我编译并执行了上面的代码,它工作正常,并给出了正确的答案。 enter some key value which is not there in your ArrayList,即 Item_key 时,唯一一次返回负索引值。我猜您在犯一些拼写错误/拼写错误,因为它使索引返回负数。