【问题标题】:Binary Search output error二分查找输出错误
【发布时间】:2023-04-06 12:23:01
【问题描述】:

我正在对 String 进行二进制搜索,它显示输出错误。我不知道我错过了什么,我需要一些建议。

这是我的代码:

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;
    }

我错过了什么?或者我必须使用其他方式找到它?

这里是错误:

错误:找不到符号 如果(记录[中间].compareTo(x)

错误:找不到符号 否则如果(记录[中间].compareTo(x)> 0) ^ 符号:方法 compareTo(String)

【问题讨论】:

  • 您不能将字符串与字符串数组进行比较。
  • 您正在使用“String[][] 记录”。如果是 1d 记录,则使用“String[] 记录”。
  • 我应该如何处理二维数组?有什么建议吗?

标签: java binary-search


【解决方案1】:

record 是一个二维数组,所以record[j] 将给出一个数组而不是字符串。您是不是想改用一维数组?

【讨论】:

  • 好吧,既然二进制搜索是以“线性”方式完成的,也许你可以有一种方法,通过连接所有行将二维数组拉伸成一维数组。然后,您可以使用常规二进制搜索来搜索这个新数组。或者类似地,您可以有一个 for 循环来搜索 2D record 数组的每一行。
  • 如果可能的话,我会尽量做到这一点,谢谢你的建议,不胜感激。
【解决方案2】:

您使用“String[][]”表示二维记录。因此,record[j] 给出了对应的第 j 列字符串数组。这不能与字符串进行比较。因此,如果是 1d 记录,请使用“String[] 记录”。

【讨论】:

  • 所以如果我想在 2D 上工作,我需要更改差异格式代码吗?还是我只需要更改其中的一些?
  • 看看你的代码必须搜索每条记录[mid][i]才能与字符串进行比较。这样你就无法比较了。举个例子,record[0][0] = 7, record[1][0]=5, record[2][0] = 0, record[2][1] = 5. 你搜索 5 会出错结果是因为你的中频会给出错误的中频。你可以这样做,rec[0] = record[0][0], rec[0] = record[0][1] ...依此类推(使用另一个临时数组来存储记录)。然后执行二分查找并将返回的结果位置转换为记录[][] 行列号。我认为它会更简单。
猜你喜欢
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 2021-01-01
  • 2015-12-10
相关资源
最近更新 更多