2014-01-31 71 views
-3

我對某個問題有疑問。我是這個初學者,所以我感謝你的幫助! 代碼應該要求兩個用戶輸入號碼,並將在控制檯中輸出這兩者之間的所有素數。 這是我到現在爲止的代碼:(它沒有檢查這兩者之間的數字,只打印出一個號碼,如果它是一個素數)兩個解析的用戶號碼之間的所有素數

package questionsAndAnswers; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Number { 
    static boolean primes; 
    public static boolean number() { 
     try { 
      for (int i = 0; i < 2; i++) { 
       BufferedReader br = new BufferedReader(new InputStreamReader System.in)); 
       String num1 = br.readLine(); 
       String num2 = br.readLine(); 

       int number1 = Integer.parseInt(num1); 
       int number2 = Integer.parseInt(num2); 

       for (int j = number1; j < number2; j++) { 
        if ((j % 2) == 0) return true; 
        for (int k = 3; (k*k) <= j; k+=2) { 
         if(j % k == 0) { 
          return false; 
         } 
         System.out.println("All the primes b/n number " + number1 + " and number" + number2 + " are :" + j); 
         return true; 
        } 
        System.out.println(primes); 
        // br.close(); 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return primes; 
    } 
} 

...在主類:

public class TwoWholeNumbers { 

    public static void main(String[] args) { 

     System.out.println("Enter two integer numbers to see what is the multitude b/w them: "); 
     Number.number(); 

    } 
} 
+5

你的問題是什麼?完成我的代碼?這不是如何工作。你應該有一個具體的問題。 –

+0

我的問題是我的代碼中缺少什麼/錯誤,做我想要的東西? (打印出每個素數b/n兩個數字)......(如我說的我是初學者,對不起,如果問題不那麼具體) – tgfofp

+3

當你發佈代碼時,確保它實際編譯。您發佈的代碼缺少開頭的括號,並且縮進遍佈整個地方。如果你想讓人們閱讀你的代碼,確保它是可讀的。使用4個空格(不是製表符)縮進行並確保縮進匹配。 –

回答

1

你有從一些地方複製粘貼的代碼。問題在於你在第一個價值後打破了。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Number { 
    static boolean primes; 

    public static boolean number() { 
     try {  
      StringBuffer buffer = new StringBuffer(); 
      for (int i = 0; i < 2; i++) { 

       BufferedReader br = new BufferedReader(new InputStreamReader(
          System.in)); 
       String num1 = br.readLine(); 
       String num2 = br.readLine(); 

       int number1 = Integer.parseInt(num1); 
       int number2 = Integer.parseInt(num2); 

       for (int j = number1; j < number2; j++) { 
        if ((j % 2) == 0) { 
         continue; 
        } 
        int x=0; 
        for (int k = 3; (k*k) <= j; k+=2) { 
         if(j % k == 0) { 
          x=1; 
          break; 
         } 
        } 
        if(x==1) continue; 
        buffer.append(j + " "); 
       } 
       System.out.println("All the primes b/n number " 
         + number1 + " and number" + number2 + " are :" 
         + buffer.toString());   
      } 
     } catch (IOException e) { 
       e.printStackTrace(); 
       } 
     return primes; 
    } 

    public static void main(String[] args) { 

     System.out.println("Enter two integer numbers to see what " 
          + "is the multitude b/w them: "); 
     Number.number(); 
     } 
    } 
+0

謝謝!我理解你的代碼,並得到它的工作:) – tgfofp

+0

'if(x == 1)continue;在結構化編程中,這通常被寫爲:if(x/= 1)buffer.append(j +「」); }'。此外,對於這樣的標誌變量,描述性名稱將用作自我文檔,例如「is_composite」而不是「x」。 ---對於for(for int(int k = 3;(k * k)<= j; k + = 2)')+1。 –

0

我檢查,如果數是素數最快的方法:

boolean isPrime(int p) { 
    int m = (int) Math.sqrt(p); 
    if(m<2) { 
    return true; 
    }else { 
    for(int i = 2;i++;i<=m) { 
     if((p % i)==0) { 
     return false; 
     } 
    } 
    } 
    return true; 
} 
0

您已在number()方法,而不是breakcontinue給出returnnumber()方法不在main()的循環中調用,您需要爲每次迭代返回該方法。此外boolean回報根本沒有意義。

我會告訴你一些你需要做的改變,這會讓程序打印出幾個數字。但這並不意味着它是正確的輸出。質數的邏輯是高度錯誤的。你必須解決這個問題。我只是幫助你解決爲什麼你沒有得到任何輸出的基本問題。

for (int j = number1; j < number2; j++) { 
    if ((j % 2) == 0) 
     continue; // return true replaced by continue 
    for (int k = 3; (k * k) <= j; k += 2) { 
     if (j % k == 0) { 
      break; // return false replaced by break 
     } 
     System.out.println("All the primes b/n number " 
       + number1 + " and number" + number2 + " are :" 
       + j); 
    } 
} 

我已經給了breakcontinue避免return語句,但在現實中,邏輯確實需要改造。

相關問題