2015-10-05 3 views
-5

Я должен оценить массив целых чисел и определить, являются ли они первичными. Как только я это сделаю, я должен вернуть (до основного) массив логических элементов.Массив int для преобразования в булевский массив

public static boolean [] Advanced_7(int Array []){ 

    boolean [] verdict = new boolean [Array.length]; 

    for(int i = 0; i < Array.length; i++) 
    { 
     verdict[i] = true; 

     for(int j = 2; j <= Array[i]; j++) 
     { 
      if (Array[i] % j == 0) 
      { 
       verdict[i] = false; 
      } 
     } 
    } 

    return verdict; 
} 
+0

какой язык является то, что? – njzk2

+0

Если вам не побеспокоено объяснить ** КАК ** этот код не работает, мы не можем беспокоиться о том, чтобы попытаться и угадать, в чем проблема. –

+0

Скорее всего, C# –

ответ

1

Просто некоторые общие советы:

Во-первых: как вы проверяете кастрированный баран число является простым или не может быть упрощена; вам нужно только проверить элементы до целое число, которое вы проверяете.

Второе: после того, как вы знаете, что число неправо, почему вы продолжаете проверять? Разбейте цикл for, как только вы узнаете, что число не является простым.

В-третьих: Чтобы выводить результаты на консоль, вы не можете просто распечатать объект (массив является объектом, поэтому все, что напечатано на распечатке, может выглядеть довольно странным). В вашей процедуре main сохраните результат в переменной и распечатайте каждую запись с помощью цикла for.


Как указано в комментариях, вы должны использовать соглашения об именах Java. Код ниже - это переписывание исходного кода с использованием этих соглашений и применение предложений, которые я вам дал выше.

public static boolean[] checkForPrimes(int[] numbers) { 
/* 
    The name for the function should be a verbe, and start 
    with a lower case letter. 
    The input parameter for the function is an object, and 
    must also start with a lower case letter. 
*/ 
    boolean[] veredict = new boolean[numbers.length]; 
    for(i = 0; i < numbers.length; i++) { 
     veredict[i] = true; 
     // You only need to check up to half each number 
     for(j = 2; j <= numbers[i]/2; j++) { 
      if(numbers[i] % j == 0) { 
       veredict[i] = false; 
       break; // once you know the number is non-prime 
         // exit the loop 
      } 
     } 
    } 
    return veredict; 
} 
public static void printResult(int[] numbers) { 
    boolean[] veredict = checkForPrimes(numbers); 
    // You must traverse the arrays to print them out: 
    for(i = 0; i < numbers.length; i++) { 
     System.out.println(numbers[i] + " " + veredict[i]); 
    } 
} 
+0

для первого пункта: на самом деле проверка к квадратному корню достаточно – Henry

+0

@Henry Действительно ... но давайте будем держать его простым, используя только элементарные операции;) – Barranka

0

В следующей таблице содержится несколько необъяснимых изменений. Если вы можете объяснить их, используйте их.

int element = Array[i]; 
verdict[i] = element % 2 == 0; 
if (verdict[i]) 
{ 
    for (int j = 3; j <= element/2; j += 2) 
    { 
     if (element % j == 0) 
     { 
      verdict[i] = false; 
      break; 
     } 
    } 
} 

Для быстрой печати можно использовать:

System.out.println(Arrays.toString(verdict)); 
+0

'for (int j = 3; j * j <= element; j + = 2)' еще быстрее. – Henry

+0

@ Хенри действительно намного лучше, лучший 'j <= квадратный корень элемента', к сожалению, не такой примитивный. Для тех, кто хочет поэкспериментировать: 'for (int j = 3, qj = 9; qj <= element; j + = 2, qj + = (j - 1) << 2)'. _ Криптопрограммирование, не получающее школьных баллов! _ –

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