2014-09-27 28 views
1

我正在嘗試編寫一個程序,顯示用戶輸入的所有素數。唯一的要求是它必須是多線程的。這是我第一次使用Java和多線程。你能幫我嗎?它編譯,但輸出很奇怪。也許這是一個地址?多線程程序,顯示所有小於一個輸入的素數

import java.util.Scanner; 
import java.util.Arrays; 

public class prime { 
    public static void main(String[] args){ 
     // get number from user 
     System.out.println("Enter a number: "); 
     Scanner keyboard = new Scanner(System.in); 
     int num = keyboard.nextInt(); 

     RunPrime runprime1 = new RunPrime (num); 
     runprime1.start(); 
     Thread.yield(); 

     runprime1.SmallerPrimeNumbers(); 
    } 
} 

class RunPrime extends Thread { 

    private int given_number; 

    RunPrime (int n) { 
     given_number = n; 
    } 

    public void SmallerPrimeNumbers() { 
     int count = 0; 
     for (int i = 0; i <= given_number; i++) { 
      if (CheckPrime(i)) { 
       count++; 
      } 
     } 

     for (int i = 0; i < count; i++) { 
      for (int j = 2; j <= given_number; j++) { 
       if (CheckPrime(j)) { 
        number[i] = j; 
       } 
      } 
     } 

     System.out.println(number); 
    } 

    public static boolean CheckPrime (int n) { 
     for (int i=2 ; i<n ; i++) { 
      if (n%i == 0) 
       return false; 
     } 
     return true; 
    } 
} 
+0

謝謝你。我試圖習慣這個網站的工作方式 – m34523 2014-09-27 01:02:21

回答

0

您的SmallerPrimeNumbers()函數有第二個for循環看起來不必要。您還在分配和打印未在任何地方聲明的變量number(這可能是您造成麻煩的原因)。既然你只打印它們而不保存它們,你可以簡化這樣的功能:

public void SmallerPrimeNumbers() { 
    int count = 0; 
    for (int i = 0; i <= given_number; i++) { 
     if (CheckPrime(i)) { 
      System.out.println(i); 
     } 
    } 
} 
+0

就是這樣。謝謝您的幫助! – m34523 2014-09-27 01:15:54

相關問題