0

このコードは整数nを取得し、n未満のすべての回文数を表示します。しかし、forループは機能しないようです。0、1、マイナス以外の数値を入力しても何も起こらないからです。デバッグを試みましたが、問題が見つかりませんでした。

サンプル入力:30

出力例:1 2 3 4 5 6 7 8 9 11 22

import java.util.Scanner;

public class PalindromeNumbers {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        if (n == 0 || n == 1 || n < 0)
            System.out.println("There's no Palindrome Number!");
        else {
            for (int num = 1; num < n; num++) {
                int reversedNum = 0;
                int temp = 0;
                while (num > 0) {

                    // use modulus operator to strip off the last digit
                    temp = num % 10;

                    // create the reversed number
                    reversedNum = reversedNum * 10 + temp;
                    num = num / 10;

                }
                if (reversedNum == num)
                    System.out.println(num);
            }
        }
    }
}
4

3 に答える 3

2

無限ループに遭遇します。ループ内でインデックスとして使用numし、forループ内で0にリセットします。さまざまな変数を使用すると、機能するはずです。

for (int i = 1; i < n; i++) {
    int num = i;

    ...

    if (reversedNum == i)
        System.out.println(i);
}
于 2012-11-25T11:54:07.343 に答える
1

より簡潔な方法でそれを行うことができます:

public static void main(final String args[]) {
    final Scanner input = new Scanner(System.in);
    final int max = input.nextInt();
    if (max <= 0) {
        System.out.println("There's no Palindrome Number!");
    } else {
        for (int i = 1; i < max; i++) {
            if (isPalindrome(i)) {
                System.out.println(i);
            }
        }
    }
}

private static boolean isPalindrome(final int num) {
    final String temp = "" + num;
    return new StringBuilder(temp).reverse().toString().equals(temp);
}
于 2012-11-25T11:55:44.743 に答える
1

numforループ内で変数を変更しています。次にnum < n実行されると、値が変更されます(0に)。次のようなものを試してください。

for (int num = 1; num < n; num++) {
   int reversedNum = 0;
   int temp = 0;
   int temp2 = num;
   while (temp2 > 0) {

       // use modulus operator to strip off the last digit
       temp = temp2 % 10;

       // create the reversed number
       reversedNum = reversedNum * 10 + temp;
       temp2 = temp2 / 10;

   }
   if (reversedNum == num)
       System.out.println(num);
}

このように、一時変数を使用してreversedNumを計算し、次のループ反復のためにnumの値を保持します。

于 2012-11-25T11:49:54.467 に答える