2012-04-26 98 views
0

我在做二进制搜索字符串,它显示输出错误。我不知道我缺少什么,我需要一些建议。二进制搜索输出错误

这里我的代码:

public static final int Not_Found = -1; 

    public static int BS(String[][] record, String x) 
{ 
int low = 0; 
int high = record.length - 1; 
int mid; 

while(low <= high) 
{ 
mid = (low + high)/2; 

if(record[ mid ].compareTo(x) < 0) 
low = mid + 1; 
else if(record[ mid ].compareTo(x) > 0) 
high = mid - 1; 
else 
return mid; 
} 

return Not_Found; 
    } 

它,我失去了一些东西?或者我必须用其他方式找到它?

这里错误:

错误:找不到符号 如果(记录[MID] .compareTo(x)的< 0) ^ 符号:方法的compareTo(字符串)

错误:无法找到符号 否则,如果(记录[MID] .compareTo(X)> 0) ^ 符号:方法的compareTo(字符串)

+0

您无法将字符串与字符串数组进行比较。 – 2012-04-26 00:21:14

+1

您正在使用“String [] [] record”。如果是1d记录,请使用“String []记录”。 – Arpssss 2012-04-26 00:24:19

+0

我应该如何处理2D数组?有什么建议? – user1342633 2012-04-26 00:27:36

回答

1

record是一个2D数组,因此record[j]将给出一个数组而不是一个字符串。你有没有想用一维数组来代替?

+0

我在做2D数组,所以我应该如何处理它? – user1342633 2012-04-26 00:27:05

+0

既然二进制搜索是以“线性”方式完成的,也许你可以通过连接所有行来将2D-数组拉伸成一维数组。然后你可以用普通的二分查找搜索这个新数组。或者类似地,您可以使用for循环搜索2D record数组的每一行。 – arshajii 2012-04-26 00:31:20

+0

如果可能的话,我会尽力去做,谢谢你的建议,非常感谢。 – user1342633 2012-04-26 00:40:22

1

您正在使用“String [] []”表示2D记录。因此,记录[j]给出相应的第j列字符串数组。无法与字符串进行比较。因此,如果是1d记录,请使用“String []记录”。

+0

因此,如果我想在2D上工作,我需要更改差异格式代码?或者我只需要改变其中的一些? – user1342633 2012-04-26 00:31:30

+0

看你的代码必须搜索每个记录[中] [我]来比较字符串。这样你就无法比较。例如,记录[0] [0] = 7,记录[1] [0] = 5,记录[2] [0] = 0,记录[2] [1] = 5。结果,因为你的中期会给错误的中期。你可以像这样做,rec [0] = record [0] [0],rec [0] = record [0] [1] ...等等(使用另一个临时数组来存储记录)。然后执行二分查找并返回结果位置转换为记录[] []行 - 列号。我认为这会更简单。 – Arpssss 2012-04-26 00:59:48