2014-03-07 79 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; 
}; 

}