2012-10-23 42 views
1

我試圖找出如何做的素數從1到101,我得到這個至今:得到了break語句的工作,但想不出了java的條件

public class BreakShow{ 
    public static void main(String[] args){ 
    int i; 
    int prime; 

    System.out.println("Prime numbers from 1 to 101 : "); 
    for (i = 1;i < 102;i++){ 
     for (prime = 2;prime < i;prime++){ 
      if(i % prime == 0) { 
       break; 
      } 
     } 
     if(i == prime) { 
      System.out.print(" " + i); 
     } 
    } 
    } 
} 

我無法得到它打印1.我試着改變我的價值觀和總理,但它不起作用。似乎與印刷品有關,它只是沒有繼續下去。我想我並不真正理解這個陳述的條件以及它的運作方式。

+1

你有prime = 2和i = 1通過兩個循環的第一次迭代。然後你說素數 ghostbust555

+0

1是不是黃金。 – arshajii

回答

0

素數變量初始化爲值2,但您檢查1 == 2。

如果條件

System.out.println("i:: "+ i+ " prime:: "+prime); 
    if(i == prime) 
     { 
      System.out.print(" " + i); 
     } 

so if clause does not meet the condition 
0

發生的事情是,當我是= 1(當你爲1的情況下測試),這個循環:

for (prime = 2;prime < i;prime++){ 
    if(i % prime == 0) { 
     break; 
    } 
} 

決不運行,因爲黃金是從來沒有實際比我少,因爲黃金從2開始。這意味着它然後檢查是否== ==素數,它永遠不會是,因爲素數= 2.

0

的Java知道1是不是素數,不打印它,你可以前測試值i和總理。

前兩個谷歌搜索結果'是1是一個素數'證明它。

+1

那麼Java並不是天生就知道1不是素數 - 該程序只是以這樣一種方式定義,它從不打印1. – arshajii

0

如果你正在嘗試使用素數做嘶嘶聲,那麼你應該只需要一個循環和mod。 你可以做這樣的事情。

for(int i = 1; i <= 101; i++){ 
    if((i%2) != 0) // use the smallest even number to check against. 
     println("prime"); 
} 
0

由於第二for迴路開始與2,其打印之前跳過由於i==prime條件1。如果你真的想打印1,請更新你的條件如下:

 public static void main(String[] args) { 
      int prime; 
      System.out.println("Prime numbers from 1 to 101 : "); 
      for (int i = 1;i < 102;i++){ 
       for (prime= i-2;prime > 1;prime--){ 
        if(prime< 0 || i % prime == 0) { 
         break; 
        } 
       } 
       if(prime < 0 || prime==1) { 
        System.out.print(" " + i); 
       } 
      } 
     } 
+0

@ user1588867:這有幫助嗎? –