2016-12-17 11 views
-1

は、私がこれを書いた:私はこれを実行すると、私は私が間違ってやっているかを把握することができないときプロジェクトオイラー#4のJava出力なし

class Problem4 { 
    public static void main(String[] args) { 
    int reversenum = 0; 
    for (int i=100; i<1000; i++) { 
     for (int j=100; j<1000; j++) { 
     int tempPro = i*j; 
     int temptempfun = tempPro; 
     while (tempPro != 0) { 
      reversenum *= 10; 
      reversenum += tempPro%10; 
      tempPro /= 10; 
     } 
     if (reversenum == temptempfun) { 
      System.out.println(reversenum); 
     } 
     } 
    } 
    } 
} 

私は任意の出力を取得していませんよ。

EDIT:

forループ内の内部reversenum宣言を移動させることによってそれを修正しました。

この行で
class Problem4 { 
    public static void main(String[] args) { 
    int largest = 0; 
    for (int i=100; i<1000; i++) { 
     for (int j=100; j<1000; j++) { 
     int tempPro = i*j; 
     int temptempfun = tempPro; 
     int reversenum = 0; 
     while (tempPro != 0) { 
      reversenum *= 10; 
      reversenum += tempPro%10; 
      tempPro /= 10; 
     } 
     if (reversenum == temptempfun) { 
      if (reversenum > largest) { 
      largest = reversenum; 
      } 
     } 
     } 
    } 
    System.out.println(largest); 
    } 
} 
+1

数値が何であるかを確認して考えてみてください。 – doctorlove

+0

与えられた2桁の数字と一致するようにしてください。これは、とにかくデバッグするのが速くなり、3桁の数字を入力してみてください。 – doctorlove

答えて

0

int reversenum = 0; 

あなたがゼロとし、whileループでreversenumを定義している:

while (tempPro != 0) { 
      reversenum *= 10; 

あなたがゼロと数を乗算し、この変数にそれを代入してみてください再び。考えられる問題はこの論理にあります。 reversenumに0以外の初期値を与えるべきであり、reversenum変数に以前の反復の値が格納されるため、whileループの前にクリアする必要があります。

EDIT:

あなたは、EclipseなどのIDEで、あなたのコードをデバッグする必要があります。それを行うと、コード内で何が起こっているのかを簡単に理解できます。

+0

あなたの答えは部分的に正しいです。私はちょうど内側のループ内で逆行宣言を動かすことでコードを修正しました。 – iFlames

3

2つの整数の逆数とtemptempfunはループ内で等しくありません。そのため、何も印刷できません。

0

reversenumは番号を逆にして(回文をチェックする)、その都度変更する必要があることは明らかです(以前の試行の影響を受けません)。

さらに、0を掛けても、ゼロのときはゼロのままです。

これは何かを印刷します(しかし、実際に必要な答えを見つける方法について考える必要があります)。

class Problem4 { 
    public static void main(String[] args) { 
    for (int i=100; i<1000; i++) { 
     for (int j=100; j<1000; j++) { 
     int reversenum = 0; //<- moved to change each time 
     int tempPro = i*j; 
     int temptempfun = tempPro; 
     while (tempPro != 0) { 
      reversenum *= 10; 
      reversenum += tempPro%10; 
      tempPro /= 10; 
     } 
     if (reversenum == temptempfun) { 
      System.out.println(reversenum); 
     } 
     } 
    } 
    } 
} 
+0

whileループでこれら2つの行を入れ替えると、最後の逆数に10を掛けて間違った出力を与えます。私がやったことは正しく働いています。 – iFlames

+0

喜んでそれを修正しました – doctorlove

+0

なぜ私は行を入れ替えたのか分かりません。 – doctorlove

関連する問題