2016-11-19 4 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

Как использовать существующие методы, а не изобретать колесо? этот однострочный фильтр решает проблему:

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

Ваш оператор печати находится внутри цикла. Таким образом, он печатает 0 дважды, затем, когда результат найден, break; проскакивает над ним. Попробуйте это ...

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 
Смежные вопросы