2013-03-06 3 views
0

Как улучшить этот алгоритм, чтобы использовать динамический источник проверки?Пропустить итерации для циклов

public static void main(String[] args) 
{ 
    int[] exclude = {1, 4, 7}; 

    for(int i= 0 ; i < 10; i++) 
    { 
     if(i != 1 || i != 4 || i != 7); 
     { 
      continue; 
     } 
    } 
     System.out.println(i); 
    } 
} 

Значение, я хочу вместо if внутри цикла for, я хочу, чтобы получить список и проверить содержание незаменимых исключающие элементы, возможно, что-то вроде:

 if(Arrays.asList(exclude).contains(i)) 

Только для ради того, чтобы знать, как это сделать. Я чувствую, что это потенциально может быть полезно в будущем. В основном я хочу пропустить определенные итерации в цикле с использованием массива.

Как

+1

В чем вопрос? Не работает ли это? –

+0

Исправьте углубление на первом образце. Это не имеет никакого смысла, как написано - правильный отступ сделает это очевидным. Во всяком случае, часто есть много способов сделать что-то. Если вам просто нужно «содержать», рассмотрите набор. Не то чтобы это имеет здесь значение, так как это тривиальное n и маленькое S. Каждый цикл «asList» также является «расточительным», но, опять же, здесь это неважно. – 2013-03-06 01:35:18

+0

Нет, это не работает, поскольку я написал это. Он печатает все числа 0-9. – theaero

ответ

0

Этот вызов:

Arrays.asList(exclude) 

На самом деле это создает список, который не то, что вы хотите. Если вы объявили исключить массив как массив Integer, он будет работать:

public static void main(String[] args) 
{ 
    Integer[] exclude = {1, 4, 7}; 

    for(int i= 0 ; i < 10; i++) 
    { 
     if(!Arrays.asList(exclude).contains(i)) 
     { 
      System.out.println(i); 
     } 
    } 
} 

Дело в том, что ты обеспечивая int[] к этому Arrays.asList. Компилятор должен решить, должен ли он интерпретировать общий параметр T как int или int []. Но он не может выбрать int, потому что у вас не может быть интегрального типа в качестве общего типа. Он мог бы выбрать Integer, но это означало бы преобразование, и поэтому int[] не является прямым. Таким образом, T - int[], и он создает List<int[]> только с массивом, который вы предоставили в качестве элемента. И никакое целое число не равно этому массиву в целом. Вот почему печатаются все целые числа.

+0

Спасибо, это работает (после удаления i ++ в выражении if) Тем не менее, мне любопытно. В чем разница между Interger [] и Int []? – theaero

+0

См. Мое редактирование (я надеюсь, что было ясно) –

+0

Был бы более эффективный способ сделать это? Спасибо, извините за все вопросы. Я изучаю! – theaero

-1

Похоже, что у вас его уже есть?

public static void main(String[] args) 
{ 
    int[] exclude = {1, 4, 7}; 

    for(int i= 0 ; i < 10; i++) 
    { 
     if(Arrays.asList(exclude).contains(i)) 
     { 
      i++; 
     } 
     else 
     { 
      System.out.println(i); 
     } 
    } 
} 
+0

Это тоже не работает. Он печатает 0-9 без исключения чисел в массиве. – theaero

+0

Это неправильный ответ. – Tuxdude

Смежные вопросы