在大海捞针(阵列)中寻找针(用户输入)

时间:2017-02-23 05:47:15

标签: java

我正在尝试创建一个程序,用于确定是否在数组中找到用户输入。

然后我输出数组中整数的位置。

看起来我的程序并没有从我的主程中提取任何东西。

以下是该计划:

public static int returnIndex(int[ ] haystack, int needle) {    
    for (int n : haystack) {       
        if (haystack[needle] == n )  {       
        } else {
            System.out.println("Element not found in array");                   
            System.exit(0);             
       }
      }
      return needle;        
    }

 public static void main(String[] args) {
     int[] haystack = { 4,5,6,7,12,13,15,16,22,66,99,643 };        
     Scanner sc = new Scanner(System.in);
     System.out.println("Enter a number in the array: ");                
     int needle = sc.nextInt(); 
   }
 }

3 个答案:

答案 0 :(得分:1)

你循环错误的方式。

使用count for loop

for (int index=0; index haystack.length; index++) {
...

,而不是!然后,您将haystack[index]needle进行比较,并在匹配项上返回index

请注意:实际上,使用"为每个"你在问题中做的循环风格是一种很好的做法 - 应该是"首先"写下循环来迭代数组/集合的项目时的想法。但有时你只需要知道index;然后计算是正确的选择。

答案 1 :(得分:0)

您应该循环遍历数组的索引,而不是值。一旦找到一个返回你想要使用的值的索引,你就可以拉它。但是,如果对数组进行排序,则可以使用算法简化该数组。我能想到的最简单的方法是在数组的中途检查数值是否更大,更小或相同,然后在该数据与下一个更大或更小的数据之间减半,直到结果为止。你找到答案了。

答案 2 :(得分:0)

解决方案

要像这样解决这个问题,你需要跟踪索引并将每个值与这个 needle进行比较(如果不在数组中则返回-1:< / p>

public static int returnIndex(int[] haystack, int needle) {

    int index = 0;
    for (int n : haystack) {
        if(n == needle) return index;
        index++;
    }

    return -1;
}

如果你想使用索引接近它,那么它将如下所示:

public static int returnIndex(int[] haystack, int needle) {

    for (int n = 0; n < haystack.length; n++) {

        if (haystack[n] == needle) {
            return n;
        }

    }

    return -1;
}

代码中的错误

你的for循环正在迭代haystack的值,而不是索引,你使用haystack[needle]正在检查索引needle的值,这可能是潜在的{{ 1}}。此外,如果indexoutofbounds不在阵列的第一个位置,则立即退出程序。

needle