2014-03-07 45 views
0

我正在开发一个java程序,但我被困在这个特定的部分。该函数假设将一个数组作为输入,并返回输入数组中第一个出现目标的索引,如果未找到,则返回-1。该函数假设调用我的contains方法。查找给定参数的数组索引

包括()

public static boolean contains(int[] input, int target) { 
     for(int i = 0; i < input.length; i++){ 
      if (target == input[i]){ 

       return true; 
      } 
     } 
     return false; 
    } 

的indexOf()

public static int indexOf(int[] input, int target) { 
     if(contains(input, target) == true){ 
      return i; 
     } 
     return -1; 
    } 

我试图返回变量i是什么在contains方法,但我不知道如何使变量我从contains方法传递给indexof方法,而不是在构造函数中将其设置为public int。谢谢你的帮助。

----------编辑---------- contains方法假设要在给定的数组中搜索目标值。如果目标值存在于数组中的某个位置,则返回true。如果不是,则返回false。如果需要对包含方法进行任何更改,那么也可以这样做。

+0

您需要使用contains()方法?它似乎有点多余。 – Tyler

+0

这就是我的想法,但它是必要的。 –

+0

只要返回索引,即我在包含方法或如果没有找到返回-1。你为什么需要索引? – Amar

回答

1

唯一有意义的是使用contains()在indexOf()中执行检查,以确保变量存在。

public static boolean contains(int[] input, int target) { 
    for(int i = 0; i < input.length; i++){ 
     if (target == input[i]){ 
      return true; 
     } 
    } 
    return false; 
} 

public static int indexOf(int[] input, int target) { 

    //If the value isn't there, return -1 
    if(contains(input, target) == false){ 
     return -1; 
    } 

    //Go find the value if we know it is in there 
    for(int i = 0; i < input.length; i++){ 
     if (target == input[i]){ 
      return i; 
     } 
    } 
    //We should never get here 
    return -1; 
} 
+0

这是目前唯一有意义的。教练没有说我们如何使用包含方法,所以我猜这会没事的。谢谢! –

+0

不客气。你是对的,它没有太大意义循环遍历数组两次。 – Tyler

1

indexOf应该看起来很像contains。事实上,他们应该有种从你所拥有的切换:

public static int indexOf(int[] input, int target) { 
     for(int i = 0; i < input.length; i++){ 
      if (target == input[i]){ 
       return i; 
      } 
     } 
     return -1; 
    } 

public static boolean contains(int[] input, int target) { 
     if(indexOf(input, target) >= 0){ 
      return true; 
     } 
     return false; 
    } 
+0

我必须调用indexOf方法的contains方法。 –

1

有你有这个倒退的好机会。无论你的教师在作业中有错字,还是你误读或误解了。

contains()方法使用indexOf()方法更有意义。这种方式应该很容易弄清楚。

+0

“通过调用contains,构建这个indexOf()函数,你已经在上面做了。”我已经给他发了电子邮件,他没有输入错字。 –

0

另一种方法是设置一个static变量等于目标的索引。该code如下图所示:

import java.util.*; 
import java.lang.*; 
import java.io.*; 


class TargetSearch 
{ 
private static int posOfTarget; 
public static void main (String[] args) throws java.lang.Exception 
{ 
    int [] arr = {1,2,3,4,5,6}; 
    int target = 5; 
    if(contains(arr,target)){ 
     System.out.println(target+" found at pos " + getPosOfTarget()+1); 
    } 
    else 
     System.out.println(target+" doesn't exist in arr "); 
} 

public static boolean contains(int[] input, int target) { 
for(int i = 0; i < input.length; i++){ 
    if (target == input[i]){ 
     setPosofTarget(i); 
     return true; 
    } 
} 
return false; 
} 

public static int indexOf(int[] input, int target) { 
    if(contains(input, target) == true){ 
     //pos is already set in contains() 
     return (getPosOfTarget()); 
    } 
    else 
     return -1; 
} 

//getter setter of pos 
public static int getPosOfTarget(){ 
    return posOfTarget; 
}; 
public static void setPosofTarget(int i){ 
    posOfTarget = i; 
}; 

}