2

基本上这个 return -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;
}
  • 我理解 return 1 和 return 0 很好。但返回 -1 ?

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

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

4

5 回答 5

7

在这种情况下,它表示/指示 linear[i] 小于您的密钥。

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

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

于 2014-01-03T14:43:43.007 回答
6

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

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

  • 如果存在 inlinear中的所有先前元素linear都严格小于key且等于 的元素,则key该函数将返回其索引
  • 否则如果有一个元素大于key该函数将返回-1
  • 否则返回值未在您提供的代码段中定义。
于 2014-01-03T14:45:28.780 回答
3

它只是在排序数组中找不到值时的简写。假设它已排序,如果遇到比您要搜索的值更大的值,则继续搜索是没有用的,因此它退出并返回 -1(0 或正数会不明确)

于 2014-01-03T14:46:29.463 回答
1

-1 作为特殊值是早期编程的保留。这是指示错误情况的常见约定。

看到整数返回类型的问题在于它没有给你一种方法来表明函数无法成功运行。所以通常许多方法的约定的一部分是它们返回一个正整数(或零)。负值(或特别是-1)意味着您的函数调用的前提是不正确的。

例如,如果你这样做,你会得到 -1:

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

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

于 2014-01-03T14:49:40.220 回答
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

所以在一个函数中 - return 将在达到 return 时停止执行函数,调用者将获得返回的值。

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

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

于 2014-01-03T14:50:52.507 回答