2017-03-01 5 views
0

コードの問題はgoldbachメソッドにあります。内側の2つのループの反復を止めたいのですが、最も内側のループが1つの数のペアを見つけた後に、2つのループだけを終了する方法はありません。言い換えれば、最も外側のforループによって作成された整数1つにつき1つのペアのみを見つけて、次の整数iに移動したいだけです。以下は1回の正しい反復後に内部ループを停止する

は私のコードです:

import java.util.Arrays; 
import java.awt.List; 
import java.util.ArrayList; 

// finding prime numbers using sieve of Eratosthenes and golbach's conjecture 
public class Test { 
    public static void main(String[] args) { 

     int[] num = new int[1000000]; 

     for (int i = 2; i <= num.length; i++) { 
      num[i - 1] = i; 
     } 
     Test.sieve(num); 


     Test.goldbach(num); 
    } 
    public static void sieve(int[] array) { 

     for (int i = 2; i < Math.sqrt(array.length); i++) { 
      if (array[i - 1] == 0) { 
       continue; 
      } 
      for (int j = 2 * i; j <= array.length; j += i) { 
       array[j - 1] = 0; 
      } 
     } 

     for (int i = 0; i < array.length; i++) { 
      if (array[i] != 0) { 
       //System.out.print(array[i] + " "); 
      } 
     } 
     //System.out.println(Arrays.toString(array)); 
    } 


    public static void goldbach(int[] array) { 
     for (int i = 2; i <= 1000000; i += 2) { //to go through every even integer 
      for (int j = 0; j <= i; j++) { 
       for (int k = 0; k <= i; k++) { 
        System.out.println("two prime numbers that add to " + i + " are " + array[j] + " and " + array[k]); 
        break; 
       } 
      } 
     } 
    } 
} 
} 
+1

'k'ループの中に' if'条件はありませんか?それはまったく動作しません...各 'i'に対して各' j'に対してk = 0の値しか得られません –

答えて

0

あなたはあなたの第二のループでjの値を設定することができます。例えば。

for (int i = 2; i <= 1000000; i += 2) { //to go through every even integer 
    for (int j = 0; j <= i; j++) { 
     for (int k = 0; k <= i; k++) { 
       System.out.println("two prime numbers that add to " + i + " are " + array[j] + " and " + array[k]); 
       j = i + 1; // This will end the outer loop as well. 
       break; 
      } 
     } 
    } 
} 
0

破る(または継続)するために、内側以外のループのラベルを使用します。

found: 
    for (int j = 0; j <= i; j++) { 
     for (int k = 0; k <= i; k++) { 
       System.out.println("two prime numbers that add to " + i + " are " + array[j] + " and " + array[k]); 
       break found; 
      } 
     } 
    } 

または追加のメソッドを使用すると、返す - より示されたその新しい方法は、自身の明確な機能を持っている場合すでにbureaqueteによってコメントとして、それは常に終了しているので、(とより良い名)

public static void goldbach(int[] array) { 
    for (int i = 2; i <= 1000000; i += 2) { //to go through every even integer 
     primeAdd(i); 
    } 
} 

private static void primeAdd(int i) { 
    for (int j = 0; j <= i; j++) { 
     for (int k = 0; k <= i; k++) { 
      System.out.println("two prime numbers that add to " + i + " are " + array[j] + " and " + array[k]); 
      return; 
     } 
    } 
} 

しかし、内側のループは必要ありません。

関連する問題