2017-11-21 13 views
1

私のプログラムは、それ自身の数字で割り切れる3桁の数字をすべて出力しなければなりません。たとえば、124は1,2,4で割り切れます。120 130 208などのように0の数字も無視します。 日食でそれをコンパイルしようとすると、それはちょうど184で停止し、私は理由を知りません。 私はコーディングの初心者であり、悪い英語のために申し訳ありません。forループの値が200になるのはなぜですか?

public class Teilbarkeitlol { 
    public static void methode() { 
     for (int zahl = 111; zahl <= 999; zahl++) { 
      if (zahl % 10 == 0) { 

      } else { 
       int dig1 = zahl/100; 
       int dig2 = (zahl % 100)/10; 
       int dig3 = zahl % 10; 
       if (zahl % dig1 == 0 && zahl % dig2 == 0 && zahl % dig3 == 0) { 
        System.out.println(zahl); 
       } else {} 
      } 
     } 
    } 

    public static void main(String[] args) { 
     methode(); 
    } 
} 
+0

が第二elseブロックでのprintlnを入れて、あなたはループが200 – assylias

+3

で停止しないことがわかります(:)のいずれか間違っていない)他のタグが必要とされていない場合は空白エラーメッセージが表示されませんか?それが201に達するとすぐに、これは0で除算されます。 – RealSkeptic

答えて

1

あなたの条件if (zahl % 10 == 0)は、最後の桁が0であるかどうかをチェックします。 2桁目のチェックは行いません(最初の桁はforループの範囲のため0になることはありません)。

if (dig2 != 0 && dig3 != 0 && zahl % dig1 == 0 && zahl % dig2 == 0 && zahl % dig3 == 0) 
+0

私はとても愚かなおかげです!とても感謝している! –

0
public static void methode() { 
    for (int zahl = 111; zahl <= 999; zahl++) { 
     if (zahl % 10 == 0 || (zahl % 100)/10 == 0) { 
      continue; 
     } 

     else { 
      int dig1 = zahl/100; 
      int dig2 = (zahl % 100)/10; 
      int dig3 = zahl % 10; 
      if (zahl % dig1 == 0 && zahl % dig2 == 0 && zahl % dig3 == 0) { 
       System.out.println(zahl); 
      } 

      else { 
       continue; 
      } 

     } 
    }} 

変更

if (zahl % dig1 == 0 && zahl % dig2 == 0 && zahl % dig3 == 0) 

これを試してみてください。

0

"0の部分をすべて無視する必要があります"という部分が正しくないため、のコードでjava.lang.ArithmeticException:/ 0がスローされています。また、数値をStringに変換してアクセントをチェックすることもできます。この行で

for (int zahl = 111; zahl <= 999; zahl++) { 
     if (!Integer.toString(zahl).contains("0")) { 
      int dig1 = zahl/100; 
      int dig2 = (zahl % 100)/10; 
      int dig3 = zahl % 10; 
      if (zahl % dig1 == 0 && zahl % dig2 == 0 && zahl % dig3 == 0) { 
       System.out.println(zahl); 
      } else { 

      } 

     } 
    } 
1
if (zahl % dig1 == 0 && zahl % dig2 == 0 && zahl % dig3 == 0) { 

DIG1またはdig2またはdig3のどちらかがゼロになったとき、あなたのコードは、ゼロ操作による除算をやろうとしています。これは201で発生します。

201%0 

これは例外で、その時点でコードが停止します。 (その時点までに、値を10で割った値をスキップしてコードをゼロでスキップします。例:120:130)

この操作を実行する前に、dig1またはdig2またはdig3がゼロであるかどうかをチェックします。また

else { 
} 
関連する問題