2016-11-19 8 views
0

私はJavaを使い慣れています。ループを使用して配列内の最後のオカレンスのインデックスを取得したいと思います。しかし、なぜ私はできないのか分かりません。配列の最後のオカレンスを見つけるJava?

これは配列である: {2、3、4、5、4、5、3}

私はそれの最後の4のインデックスを取得したいと思います。

私のコードは次のとおり

public static void main(String args[]){ 
    int[] nums = {2, 3, 4, 5, 4, 5, 3}; 

    int pos4 = 0; 
    for (int k = nums.length -1; k >= 0; k--){ 
     if (nums[k] == 4){ 
      pos4 = k; 
      break; 
     } 
    System.out.print(pos4); 
    } 
} 

結果は:00?

私が変更した場合:

public static void main(String args[]){ 
    int[] nums = {2, 3, 4, 5, 4, 5, 3}; 

    int pos4 = 0; 
    for (int k = nums.length -1; k >= 0; k--){ 
     if (nums[k] == 4){ 
      break; 
     } 
    System.out.print(k); 
    } 
} 

私は65を得ました?私はループから直接印刷するとき

はしかし、私は正しくインデックスを取得:

public static void main(String args[]){ 
    int[] nums = {2, 3, 4, 5, 4, 5, 3}; 

    int pos4 = 0; 
    for (int k = nums.length -1; k >= 0; k--){ 
     if (nums[k] == 4){ 
      System.out.print(k); 
      break; 
     } 
    } 
} 

誰が、なぜ教えてもらえますか?どうもありがとう!

+3

ようこそスタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –

答えて

3

最初の例は、ループ内からの印刷です。条件が満たされると、ループを終了し、最終値を出力しませんでした。

public static void main(String args[]){ 
    int[] nums = {2, 3, 4, 5, 4, 5, 3}; 

    int pos4 = 0; 
    for (int k = nums.length -1; k >= 0; k--) { 
     if (nums[k] == 4){ 
      pos4 = k; 
      break; 
     }   
    } 
    System.out.print(pos4); // moved outside of loop to print final value 
} 
+0

本当にありがとう!! –

3

既存の方法を使用し、車輪を再発明しないのはどうですか?この1つのライナーは問題を解決します:

Integer[] array = { 2, 3, 4, 5, 4, 5, 3 }; 
int idx = Arrays.asList(array).lastIndexOf(4); 
0

あなたのprintステートメントはループ内にあります。したがって、0を2回出力し、結果がブレークしたときに出力します。それをスキップします。試してみてください...

int pos4 = 0; 
for (int k = nums.length - 1; k >= 0; k--) { 
    if (nums[k] == 4) { 
     pos4 = k; 
     break; 
    } 
} 
System.out.print(pos4); // <== after loop 
関連する問題