错误的结果测试整数输入为palindrom-ness

时间:2017-11-12 20:14:16

标签: java arrays int

Java - 我应该在一个数组中保存一个输入的数字,并且应该测试它是否是一个回文。我的代码似乎错了,但我不知道为什么。你能帮帮忙吗?谢谢。

public static void main(String[] args) {

    // Zahleingabe
    int input = readInt("Bitte geben Sie eine positive Zahl ein:");
    while(input < 0) {
        input = readInt("Bitte geben Sie eine positive Zahl ein:");
    }

    // Array anlegen
    int[] inputArray = new int[input];

    // Array zerlegen
    int i = 0;
    int j;
    while(input / 10 == 0) {
        j = input % 10;
        inputArray[i] = j;
        input = input / 10;
    }
    int[] newInputArray = new int[inputArray.length];
    i = 0;
    while(i < newInputArray.length-1) {
        newInputArray[i] = inputArray[i];
        i++;
    }

    // Auf Palindrom Eigenschaft überprüfen
    i = 0;
    j = newInputArray.length-1;
    while(i < j) {
        if(newInputArray[i] != newInputArray[j]) {
            write("Die Zahl " + input + " ist kein Palindrom.");
            return;
        }
        i++;
        j--;
    }
    write("Die Zahl " + input + " ist ein Palindrom.");     

}

编辑来自通讯:

  • 我不允许将整数转换为字符串并测试 - 我必须使用一个包含输入的每个数字的数组并检查它。
  • 我的问题/问题:代码不起作用 - 它告诉我122是一个不是的palindrom,我不知道为什么。
  • 我不允许使用Math.XXX函数(log10,pow,...)

1 个答案:

答案 0 :(得分:0)

伪代码:

  • 获取输入// 121
  • 计算arrayDim = ((int)Math.log10(121))+1 // 3
  • 创建一个这样大小的数组。
  • power=arrayDim-1循环到power = 0 // 2,1,0

    • 计算powerForDivide = 10^power // 100,10,1
    • 计算digit = inputNumber / powerForDivide(使用整数div,无小数)// 1,2,1
    • digit放入arrayDim-(power+1) // [1,2,1]
    • 的数组中
    • inputNumber // 121 - 100,21-20,1-1
    • 减少powerForDivide*digit
  • 测试你的阵列

// 之后的值表示给定输入为121的不同循环中的值。

<强>代码:

public class JavaFiddle
{
    // get the amount of digits (==dimensions) to store an integer n
    public static int getDims(int n)
    {
        if (n < 10) return 1;

        return 1 + getDims(n/10) ; 
    } 

    // helper to calculate 10^p
    public static int tenToPower(int p)
    {
        if (p < 1) return 1;

        return 10 * tenToPower(p-1);
    }

    public static void main(String[] args)
    {
        // removed console input so it works with https://javafiddle.leaningtech.com/
        int input =  12255221;

        int arrayDim = getDims(input); // ((int)Math.log10(input))+1;
        System.out.println("arrayDim(" + input + ") = " + arrayDim);

        // Array anlegen
        int[] inputArray = new int[arrayDim];

        int i = arrayDim;
        int rest = input;
        int powerForDiv = tenToPower(i-1); // (int)Math.pow(10,i-1);

        while(i > 0) {
            i = i - 1;
            // System.out.println(powerForDiv);

            int digit = rest / powerForDiv;
            int index = arrayDim - i - 1;

            System.out.println(digit + " at " + index); 

            rest = rest - digit*powerForDiv;
            inputArray[arrayDim - i - 1] = digit; 
            powerForDiv =  powerForDiv / 10;
         } 

         System.out.print("[");
         for ( int idx = 0; idx < arrayDim; idx++) { 
            System.out.print(inputArray[idx]);
            if (idx <arrayDim-1) 
                System.out.print(":");
            else
                System.out.println("]"); 
         } 

        i = 0;
        int j = inputArray.length-1;
        while(i < j) {
            if(inputArray[i] != inputArray[j]) {
                System.out.println( input + " no Palindrom.");
                return;
            }
            i++;
            j--;
        }

        System.out.println( input + " is Palindrom.");
    }
}