2016-08-25 8 views
-7

私は、2,3,4,5,6で割ったときに番号のJavaプログラムを作成したい、残りの1を残しますが、それは7で完全に分割されます。
私はこのロジック私は、Javaを学んでいると私は特定の問題でJavaプログラムをしたい

for (int a=1;a<=500;a++){ 
if (a%2==1 && a%3==1 && a%4==1 && a%5==1 && a%6==1 && a%7==0) 

を試してみましたが、それが正常に動作しますが、この方法で作成することが可能であるならば、私はこのロジックによって

for (int a=1;a<=500;a++){ 
for(int b=2;b<=6; b++){ 


if (a%b==1 && a%7==0){ 
System.out.println(a); 

助けを私にそれをしたいですか?あなたの

+1

コードは思われます良い。何かエラーがありますか? –

+2

私の2セント: 'a = 0; a <= 500; a + = 7'はforループでもっと良いでしょう:)。 –

答えて

0

ありがとう外側のループの名前をつけて、次のように内部のループでチェックして続けることができます:

public static void main(String[]args){ 
    // That´s your mainloop 
    mainLoop: for (int a=1; a<=500; a++){ 
     for(int b=2; b<7;++b) { 
      // If anything doesn´t leave a remainder of 1 youll continue with the mainloop here 
      if(a%b != 1) { 
       continue mainLoop; 
      } 
     } 
     // 2-6 had a remainder of 1, so just check if the number is dividible by 7 now, if so print it. 
     if(a%7 ==0) { 
      System.out.println(a); 
     } 
    } 
} 
-1

すべてのb値を繰り返し処理し、いずれかがテストに失敗した場合はフラグを設定できます。フラグは、ループの最後に設定されていない場合、あなたは彼らがすべて渡さ知っている:

for (int a=1; a<=500; a++) { 
    int flag = 0; 
    for (int b=2; b<=6; b++) { 
     if (a%b!=1 || a%7!=0) { 
      // doesn't satisfy the condition, so flag it 
      flag = 1; 
      break; // exit the inner loop 
     } 
    } 
    if (flag == 0) 
     // If we got here without setting flag, it means that all of the 
     // 'b' values passed the test. 
     System.out.println(a); 
} 
+0

は&&の位置にする必要があります。 –

+0

番号。それはOR条件でなければなりません。a%bは1であってはいけません。または%7は0ではありません。これは(a%b == 1と%7 == 0)のopp条件です。 –

+0

このコードは問題の解決に役立つかもしれませんが、_why_および/または_how_が質問に答えているとは説明していません。この追加の文脈を提供することは、長期的な教育的価値を大幅に改善するだろう。どのような制限や仮定が適用されるかなど、あなたの答えを解説してください。 –

1

あなたはこのように、あなたのテストに合格反復回数のカウントができます

for (int a=1; a<=500; a++) { 
    int flag=0; 
    for (int b=2; b<=6; b++) { 
     if (a%b == 1) { 
      flag += 1; 
     } else { 
      break; 
     } 
    } 
    if (flag == 5) { 
     if (a%7 == 0) { 
      System.out.println("Value "+a); 
     } 
    } 
} 

のいずれかの場合テストが失敗すると、flagはループの最後に5未満になります。テストの数を変更する場合は、そのマジックナンバーを更新することを忘れないでください。

0

コードを関数に分割すると、作業が楽になります。 (a)外側のループを開始します。

public static void main(String[] args) 
{ 
    for (int a = 1; a <= 5000; ++a) 
     if (test(a)) 
      System.out.println(a); 
} 

我々はtest()機能への実際のロジックを延期しました、そして我々は、後に定義しますと仮定しました。

ここでテストを書く。サブテストのいずれかが失敗するとすぐに、falseをすぐに返すことができます。すべてのテストに合格し、私たちが最後に到達した場合、我々はtrueを返す必要があります。

static boolean test(int x) 
{ 
    // i is the candidate factor 
    for (int i = 2; i <= 7; ++i) { 
     int expected = i==7 ? 0 : 1; 
     if (x%i != expected) 
      return false; 
    } 
    return true; 
} 

我々はexpectedの異なる値をエンコードするためのマジックナンバーを使用してさらに簡素化することができます:

static boolean test(int x) 
{ 
    for (int i = 2; i <= 7; ++i) 
     if (x%i != 301%i) 
      return false; 
    return true; 
} 
関連する問題