返回-1的功能

时间:2014-01-03 14:42:50

标签: java return return-value linear-search

基本上这会返回-1做什么?

举个例子:

int linear[] = {4, 21, 36, 14, 66, 91, 8, 22, 7, 81, 77, 10};
int key = 77;
for (int i = 0; i < linear.length; i++){
  if (linear[i] > key)
    return -1; //here
  else if (linear[i] == key)
    return i;
}
  • 我理解返回1并返回0。但是返回-1?

  • 如果问题听起来像这样:

根据给出的代码显示解决线性搜索的方法?

5 个答案:

答案 0 :(得分:7)

在这种情况下,它表示/表示线性[i]小于你的键。

在某些情况下,它也可能表示找不到钥匙。

这是一种广泛使用的惯例(我的意思是在这种情况下返回-1)。

答案 1 :(得分:6)

我相信这个函数用于获取一个有序数组,如果在数组中找到它,则返回给定键的索引,如果数组中没有匹配元素,则返回-1

编辑:为了避免混淆 - 在示例中,您显示的linear未排序。这意味着它不会做我上面描述的。如果未对linear进行排序,则该函数将执行以下操作:

  • 如果linear中有一个元素,linear中的所有先前元素都严格小于key且等于key,则该函数将返回索引
  • 否则,如果元素大于key,该函数将返回-1
  • 否则,您提供的代码段中未定义返回值。

答案 2 :(得分:3)

这只是在排序数组中找不到值的简写。假设它已经排序,如果满足比你正在搜索的值更大的值,则继续搜索是没用的,所以它退出并返回-1(0或正数将是不明确的)

答案 3 :(得分:1)

-1,因为特殊值是早期编程的延续。这是表示错误情况的常见约定。

查看整数返回类型的问题是它没有给你一个信号表明函数无法成功运行的方法。因此,通常许多方法的合同的一部分是它们返回正整数(或零)。负值(或特别是-1)意味着关于函数调用的前提是不对的。

例如,如果你这样做,你将获得-1:

System.out.println("This string doesn't contain a semicolon".indexOf(";"));

您要求的字符串索引不在您搜索的内容中。显然我们不能返回任何正整数,所以我们返回-1。

答案 4 :(得分:1)

代码可能无法达到预期效果:

即使阵列中有77个 - 它也不会被“找到”,因为它之前的91会“隐藏”它。

所以这将返回-1,如果找不到元素,或者列表中的键之前有更高的值

int linear[] = {4, 21, 36, 14, 66, 91, 8, 22, 7, 81, 77, 10};
int key = 77;

for (int i = 0; i < linear.length; i++){
  if (linear[i] > key)                        // when linear gets to 91 - this is true
    return -1; //here                         // this will return -1 before 77 is found
  else if (linear[i] == key)
    return i;
}

要搜索整个(未排序的)数组,需要以下代码:

for (int i = 0; i < linear.length; i++)
{
  if (linear[i] == key)
    return i;
}
return -1; // not found

因此在函数中 - 返回将在到达返回时停止执行函数,并且调用者将获得返回的值。

所以,如果这是一个函数foo()而代码有x=foo();那么x将是-1

通常,密钥和数组都将传递给foo:x=foo(77, linear);