2017-02-08 19 views
2

Я пытаюсь получить массив с нечетными числами от 1 до 10. Все работает отлично для этих случайных нулей, которые появляются, как только:случайных нулей в выводе массива

[0, 1, 0, 3 , 0, 5, 0, 7, 0, 9]

Есть ли способ остановить это? Помощь приветствуется.

public static void main(String[] args) { 

    int [] array = new int[10]; 


    for (int x = 0; x < array.length; x++) { 
     if (x % 2 == 0) { 

     } 

     else { 

      array[x] = x; 

    } 
    } 
    System.out.println(Arrays.toString(array)); 
} 

}

+0

'9 == 3 * 3' (и не является простым),' 2' делится на '2' (но ** является ** простым). Каким образом это работает отлично? Вы имели в виду ** странные ** цифры? 'System.out.println (IntStream.range (0, 10) .filter (x -> x% 2! = 0) .boxed(). Collect (Collectors.toList()));' –

+0

была опечатка в фраза, я действительно считала странным. Спасибо, что указали, что –

ответ

0

USE Список_массивы

int max = 10; 
ArrayList<Integer> array = new ArrayList<Integer>(); 

for (int x = 0; x < max; x++) { 
    if (x % 2 != 0) { 
     array.add(x); 
    } 
} 
System.out.println(array); 
} 

Выход

[1, 3, 5, 7, 9] 

И только записка, IsPrime ничего не делает, на самом деле его бесполезный переменной И премьер логики поиска не является полным либо

0

Вы только заполнение массива точек в массиве [х], поэтому, когда она не является простым, расположение массива просто оставили как 0.

Edit: FYI СВОЙ код находит нечетные числа, а не простые.

+0

была опечатка в формулировке, я действительно считал странным. Спасибо за указание –

0

В случае, если вы хотите, чтобы решить эту проблему, распечатав, Попробуйте это:

public static void main(String[] args) { 

    int [] array = new int[10]; 
    boolean isPrime = true; // you haven't used this variable! 

    for (int x = 0; x < array.length; x++) { 
     if (x % 2 == 0) { 
     isPrime = false; // do you really need this block? 
     } 

    else { 
     array[x] = x; 
     System.out.print(", "+x+""); // print the prim every time you find it. 
    } 
    } 
    //System.out.println(Arrays.toString(array)); 
} 
} 

Однако вашего кода неправом способа найти чопорные номера.

С другой стороны, для печати массива содержатся только примитивные числа, вы можете добавить каждый первичный номер в новый массив и распечатать этот массив.

+0

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

0

Вы похоже, повторно используют переменную, в которой вы не должны. Цикл for только заполняет нечетные интервалы массива индексом.

Я бы также рекомендовал список, такой как ArrayList, в отличие от обычного массива.

В принципе, я хотел бы предложить что-то вроде этого:

public static void main(String[] args) { 

    List<Integer> primeNumbers = new ArrayList<Integer>(); 
    int max = 100; 

    for (int x = 0; x < max; x++) 
    { 
     if (isPrime(x)) 
     { 
      primeNumbers.add(Integer.valueOf(x)); 
     } 
    } 

    for (Integer i : primeNumbers) 
    { 
     System.out.print(i.intValue() + ", "); 
    } 
} 

private static boolean isPrime(int number) 
{ 
    for (int n = 2; n < number; n++) 
    { 
     if (number % n == 0) 
      return false; 
    } 

    return true; 
} 

Я не знаю, если функция для вычисления простых чисел в точности правильно, но это довольно близко, если это не так.

ЦСИ для простого числа известково: http://www.mkyong.com/java/how-to-determine-a-prime-number-in-java/

+0

. В формулировке была опечатка, я имел в виду странную. Я редактировал оригинальный вопрос. Спасибо, что указали это –

0

Для чисел между 0 и n будет одна половина, что даже и одна половина, что нечетные, так что вы найдете только n/2 нечетные числа.Вам не нужно временную переменную, просто проверить % 2 != 0 с чем-то вроде,

final int n = 10; 
int[] array = new int[n/2]; 
for (int x = 0, pos = 0; x < n; x++) { 
    if (x % 2 != 0) { 
     array[pos] = x; 
     pos++; 
    } 
} 

или, в Java 8+, вы могли бы сделать это с IntStream.filter как

int[] array = IntStream.range(0, n).filter(x -> x % 2 != 0).toArray(); 
0

1) Длина вашего массива должна быть сокращена, есть только 5 нечетных чисел от 1 до 10. 2) Prime бесполезен в вашем случае, поэтому просто добавьте нечетное значение в индекс. Вы используете ArrayList, поскольку они не позволят любому незаполненному индексу быть init до 0, однако массив присваивает 0 любому индексу, которому не присвоено значение.

int [] array = new int[5]; 
for(int i=0; i<array.length; i++){ 
    if(x % 2 != 0) { 
     array[x]=x 
    } 
}