2016-10-04 7 views
-2

Я пытаюсь создать программу, которая позволяет пользователю вводить выбранное количество чисел, а взамен пользователь получает два списка. Один показывает, какое из чисел представляет собой простые числа, а другое дает простые числа. Почему это не работает? Я получаю все числа в одном массиве, когда я хочу их в отдельных массивах. При инициализации isPrime в true в методе isPrime все числа попадают в простой массив и в массив notPrime, когда я инициализирую его как false.Метод первичного номера не работает

public static void main(String[] args) { 
    System.out.println("How many numbers do you want to input?"); 
    Scanner in = new Scanner(System.in); 
    int number = in.nextInt(); 
    int[] values = new int[number]; 
    for(int i = 0; i < values.length; i++) { 
     System.out.println("Give value number " + (i+1) + ":"); 
     values[i] = in.nextInt(); 
    } 
    int[] prime = new int[values.length]; 
    int[] notPrime = new int[values.length]; 
    for(int i = 0; i < values.length; i++) {  
     boolean erPrimtall = erPrimtall(values[i]); 
     if(isPrime == true) { 
      prime[i] = values[i]; 
     } else { 
      notPrime[i] = values[i]; 
     } 
    } 
    System.out.println("Prime numbers:"); 
    for(int i = 0; i < values.length; i++){ 
      System.out.println(prime[i]); 
     } 
     System.out.println("Other numbers:"); 
     for(int i = 0; i < values.length; i++){ 
      System.out.println(notPrime[i]); 
     } 
    } 
    inn.close(); 
} 

static boolean isPrimtall(int values) { 
    boolean isPrime = true; 
    for(int i = 2; i < Math.sqrt(values); i++) { 
     if(values % i == 0) { 
      isPrime= false; 
      break; 
     } 
    } 
    return isPrime; 
} 
+1

Пожалуйста, объясните, что означает «не работает», и сообщите нам, что вы сделали для устранения неполадок до сих пор. Также посетите [help] и прочитайте [ask], чтобы узнать, как эффективно использовать этот сайт. –

+1

у вас есть опечатка: 'verdier' не определен. вместо этого он должен быть «значениями». – LKHO

ответ

0

Ваша функция erPrimtall имеет истинные/ложные значения в обратном порядке.

static boolean erPrimtall(int values) { 
    boolean isPrime = true; 
    for(int i = 2; i < values; i++) { 
     if(values % i == 0) { 
      isPrime= false; 
      break; 
     } 
    } 
    return isPrime; 
} 

Вы могли бы оптимизировать эту функцию далее зацикливания только до i <= Math.sqrt(values)

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

Полный пересмотренный код:

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 
     System.out.println("How many numbers do you want to input?"); 
     Scanner in = new Scanner(System.in); 
     int number = in.nextInt(); 
     int[] values = new int[number]; 
     for(int i = 0; i < values.length; i++) { 
      System.out.println("Give value number " + (i+1) + ":"); 
      values[i] = in.nextInt(); 
     } 
     List<Integer> prime = new ArrayList<Integer>(); 
     List<Integer> notPrime = new ArrayList<Integer>(); 
     for(int i = 0; i < values.length; i++) { 
      if(erPrimtall(values[i])) { 
       prime.add(values[i]); 
      } else { 
       notPrime.add(values[i]); 
      } 
     } 
     System.out.println("Prime numbers:"); 
     for(int n : prime){ 
      System.out.println(n); 
     } 
     System.out.println("Other numbers:"); 
     for(int n : notPrime) { 
      System.out.println(n); 
     } 
     in.close(); 
    } 

    static boolean erPrimtall(int values) { 
     boolean isPrime = true; 
     for(int i = 2; i <= Math.sqrt(values); i++) { 
      if(values % i == 0) { 
       isPrime = false; 
       break; 
      } 
     } 
     return isPrime; 
    } 
} 
+0

Единственное различие заключается в том, что теперь я получаю все значения в массиве для простых чисел вместо массива для простых чисел. Я не могу иметь простые и не простые числа в отдельных массивах. –

+0

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

+0

Мне пришлось использовать массивы специально, а не ArrayLists. Но я понял это. В любом случае спасибо! –

0

Я понял это. Мне пришлось сделать логическую переменную isPrime в массив. Все целые значения теперь соответствуют одному булевскому значению в булевом массиве.