2016-10-04 2 views
-2

사용자가 선택한 양의 숫자를 입력 할 수있는 프로그램을 만들려고하고 있으며 그 대가로 사용자는 두 개의 목록을 얻습니다. 하나는 숫자 중 소수가 소수임을, 다른 하나는 비 소수를 나타냅니다. 왜이 기능이 작동하지 않습니까? 같은 배열의 모든 숫자를 다른 배열로 가져 오게되면 끝납니다. isPrime 메서드에서 isPrime을 true로 초기화 할 때 모든 숫자는 프라임 배열로 이동하고 false로 초기화하면 notPrime 배열로 이동합니다.소수 번호 방법이 작동하지 않습니다.

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'가 정의되지 않았습니다. 값은'values'이어야합니다. – LKHO

답변

0

erPrimtall 함수의 true/false 값이 반대로되어 있습니다.

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

유일한 차이점은 이제 non-primes에 대한 배열 대신 primes에 대한 배열의 모든 값을 얻는다는 것입니다. 저는 소수와 비 소수를 분리 된 배열로 가질 수 없습니다. –

+0

답변을 업데이트했습니다. 왜 primes와 non-primes를 분리하지 않을 지 모르겠지만 구현시 의도되지 않은 0을 잔액과 비 primes에 추가합니다. –

+0

ArrayLists가 아닌 배열을 구체적으로 사용해야했습니다. 그러나 나는 그것을 알아 냈다. 어쨌든 고마워! –

0

내가 그것을 알아 냈어. 부울 변수 isPrime을 배열로 만들어야했습니다. 모든 정수 값은 이제 부울 배열의 하나의 부울 값에 해당합니다.