2017-09-29 105 views
1

我用下面的代碼獲取素數的最後一欄:計算質數

public static void printPrimeNumbers(int numberOfPrimes){ 
    final int NUMBER_OF_PRIMES_PER_LINE = 10; 
    int count = 0; 
    int number = 2; 


    while (count < numberOfPrimes){ 
     //print the prime numbers and increase count 
     if (isPrime(number)){ 
      count++; 

      if (count % NUMBER_OF_PRIMES_PER_LINE == 0){ 
       System.out.printf("%-5s\n", number); 
      }else { 
       System.out.printf("%-5s", number); 
      } 

     } 
     number++; 
    } 

} 

private static boolean isPrime(int number) { 
    for (int divisor = 2; divisor <= number/2 ; divisor++) { 
     if (number % divisor == 0){ // if true number is not prime 
      return false; 
     } 
    } 
    return true; 
} 

它的工作很好,我需要得到最後一列質數的和,假設我插入printPrimeNumbers(50)會有在列中有5個數字的5行我想獲得最後一列的總和,如何實現?

+1

除了打印質數外,還必須將它們保存在某個位置,一個數組或一個列表。您可以將它們全部保存起來,並在添加它們時選擇所需的,或者僅將必要的保存到數據結構中。 – sinclair

回答

1

你需要做的是包含一個新的變量來保存總和的值。使用該變量,您需要在每列的末尾添加數字的值。確定何處去新行會告訴你何時添加新的sum變量。我寫過你需要添加變量/值的地方,但是將這些值分配給了?你需要用實際的代碼來替換這些值來使其工作。

public static void printPrimeNumbers(int numberOfPrimes){ 
    final int NUMBER_OF_PRIMES_PER_LINE = 10; 
    int count = 0; 
    int number = 2; 
    int sum = ?; 


    while (count < numberOfPrimes){ 
     //print the prime numbers and increase count 
     if (isPrime(number)){ 
      count++; 

      if (count % NUMBER_OF_PRIMES_PER_LINE == 0){ 
       System.out.printf("%-5s\n", number); 
       sum += ?; 
      }else { 
       System.out.printf("%-5s", number); 
      } 

     } 
     number++; 
    } 

} 

private static boolean isPrime(int number) { 
    for (int divisor = 2; divisor <= number/2 ; divisor++) { 
     if (number % divisor == 0){ // if true number is not prime 
      return false; 
     } 
    } 
    return true; 
} 
+0

簡單的是.....我沒有注意到。 – user1058652

0

您可以編輯您的

printPrimeNumbers()

方法是:

public static void printPrimeNumbers(int numberOfPrimes){ 
    final int NUMBER_OF_PRIMES_PER_LINE = 10; 
    int count = 0; 
    int number = 2; 
    **List<int> lastColumnPrimes = new ArrayList();** 


    while (count < numberOfPrimes){ 
     //print the prime numbers and increase count 
     if (isPrime(number)){ 
      count++; 

      if (count % NUMBER_OF_PRIMES_PER_LINE == 0){ 
       System.out.printf("%-5s\n", number); 
       l**astColumnPrimes.add(number);** 
      }else { 
       System.out.printf("%-5s", number); 
      } 

     } 
     number++; 
    } 

    **int lastColumnSum = 0; 
    for (int n : lastColumnPrimes) { 
     lastColumnSum += n; 
    } 
    System.out.printf("Sum of numbers in last column is " + lastColumnSum);** 

} 

通知書的雙號(**)所添加的行。只需要添加很少的內容,只需要一個列表來跟蹤最後一列中的數字,一個獲取總和的循環,最後是打印語句來報告總和。中提琴!

如果您不需要跟蹤最後一列中的數字,只需要總和,那麼您可以省略列表並循環,只需使用int來計算值而不是List 。

0

創建一個新的變量並將其初始化爲0.然後,您可以在if語句中添加它以檢查新行。然後在最後打印總數。

int total = 0; 


while (count < numberOfPrimes){ 
    //print the prime numbers and increase count 
    if (isPrime(number)){ 
     count++; 

     if (count % NUMBER_OF_PRIMES_PER_LINE == 0){ 
      System.out.printf("%-5s\n", number); 
      total += number; 
     }else { 
      System.out.printf("%-5s", number); 
     } 

    } 
    number++; 
} 
System.out.println("Total:" + total);