私の授業の1つでは、私たちはエラトステネス篩を実装する必要があります。私は7回試みて、働いているコードを得て、私が研究した多数のソリューションを組み込んだ。私は最終的に数字を出力するものを持っています。残念ながら、それは両方の複合と素数を印刷し、次のように2エラトステネスの篩は素数を篩い分けしません
私のコードは印刷されません。
public class EratosthenesSieveAttempt6 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int limit;
System.out.print("Please enter the highest number to check "
+ "(number must be greater than 2): ");
limit = keyboard.nextInt();
while (limit <= 2){
System.out.println("Error - number must be greater than 2.");
System.out.println("Please enter the highest number to check: ");
limit = keyboard.nextInt();
}
boolean[] numbers = new boolean[limit + 1];
int newPrime = 2;
for(int i = 0; i < limit + 1; i++){
numbers[i] = true;
}
for(int j = 1; j < limit + 1; j++) {
if (j % 2 == 0) {
numbers[j] = false;
}
for(int k = j + 1; k < limit + 1; k++) {
if(numbers[k] == true){
j = k;
System.out.println(k);
}
}
}
}
}
私は私のループに問題があることを疑っています。最初の2つのループのためにi
とj
の変数を修正しました。これは、2以降から出力されるようになりました。問題は、配列をtrue
に初期化した後にfalseと表示しているようです。
ご協力いただきありがとうございます。
これはアプローチエラトステネスないと動作しません、あなたはどの変数リスト –
@Mohsen_Fatemi内の変数の乗算 'false'ををしなければなりませんか?私はそれらのすべてが偽証されていることから始める必要がありますか?コードを完全に書き直す必要はありますか? – KMN
インデントを修正してコード**を読めるようにしてください**! – Andreas