2013-10-23 82 views
-1

任何人都可以幫我找到這個代碼有什麼問題。我正在嘗試編寫一個函數方法來確定整數數組中目標的最後一次出現的第二個函數方法。如果不在數組中,則返回-1。任何人都可以幫我找到這個代碼有什麼問題

public static int findSecondToLast(int [] a, int target) { 
    int [] b = new int[countOfTarget (a,target)]; 
    int k =0; 

    for (int i = 0; i < a.length; i++){ 
     if (a[i]==target){ 
      b[k]=i; 
      k++; 
      return b[ countOfTarget (a,target) - 1]; 
     } 
    } 

    return -1; 
} 

public static int countOfTarget (int[]a, int t){ 
    int count = 0; 
    for (int i=0; i < a.length; i++) { 
     if (a[i] == t) 
      count++; 
    } 
    return count; 
} 
+0

問題是...? –

+0

什麼沒有工作? –

+0

爲了將來的參考,您應該在標題中發佈錯誤或錯誤。謝謝!:) – IHazABone

回答

3

試着改變你的代碼

public static int findSecondToLast(int[] a, int target) 
    { 
     int[] b = new int[countOfTarget(a, target)]; 
     int k = 0; 

     for (int i = 0; i < a.length; i++) 
     { 
      if (a[i] == target) 
      { 
       b[k] = i; 
       k++; 
       return b[ countOfTarget(a, target) - 1]; 
      } 
     } 
     return -1; 
    } 

return-1語句必須是外for loop

+0

我也抓到了。太糟糕了某人編輯了這個問題 –

+0

這不是一個正確的解決方案。該方法將首次返回'a [i] == target',並且'b [countOfTarget(a,target) - 1]'的值不會被賦值(除非'countOfTarget(a,target)'返回1 )。 –

0

你需要你的函數改變這一個:

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

這個問題是很多如果您只是按相反順序掃描並返回第二個匹配項,則更容易元素:

public static int findSecondToLast(int[] a, int terget) { 
    int firstFound = false; 
    for (int i = a.length - 1; i >= 0; --i) { 
     if (a[i] == target) { 
      if (firstFound) { 
       return i; 
      } 
      firsrFound = true; 
     } 
    } 
    return -1; 
} 

有沒有必要使用countOfTarget方法,無需通過數組三次迭代(這是你的原代碼做)。

相關問題