创建Palindrome标识符

时间:2015-05-06 04:04:10

标签: java palindrome

如何添加一个声明,让我检查用户输入的信用卡号是否是回文?我已经检查了适当的长度,以便如何在此代码中输入新的回文检查器:

import java.util.Scanner;

public class DT18 {
    public static void main(String[] args) {
        String number;
        Boolean debug = false;

        if (args.length == 0) { // no command line
            Scanner keyboard = new Scanner(System.in);
            System.out.print("Please enter a Credit Card number to validate.");
            number = keyboard.next();
        } else { // command line input
            number = args[0];
        }


        if (debug) System.out.println("String Length " + number.length());


        if (number.length() < 10) {
            System.out.println("Not Valid");
        }


        int sum = 0;
        int oddDigit = 0;
        for (int i = number.length() - 1; i >= 0; i--) {
            if (debug) System.out.println("i = " + i);
            if ((Character.getNumericValue(number.charAt(i)) < 0) || (Character.getNumericValue(number.charAt(i)) > 9)) {
                System.out.println("Not Valid");
                break;
            }
            if (i % 2 == 0) { //Even Digit
                sum += Character.getNumericValue(number.charAt(i));
            } else { //Odd Digit
                oddDigit = (2 * Character.getNumericValue(number.charAt(i)));
                if (oddDigit > 9) oddDigit = (oddDigit % 10) + 1;
                sum += oddDigit;
            }
            if (debug) System.out.println(sum);
        }
        if (sum % 10 == 0) {
            System.out.println("Valid");
        } else {
            System.out.println("Not Valid");
        }

    }

}

4 个答案:

答案 0 :(得分:2)

从我曾经给出的答案here

public boolean isPalindrom(int n) {
    return new StringBuilder("" + n).reverse().toString().equals("" + n);
}

答案 1 :(得分:1)

这篇文章应该为你提供循环逻辑:

http://www.programmingsimplified.com/java/source-code/java-program-check-palindrome

   public static void main(String args[])
   {
  String original, reverse = "";
  Scanner in = new Scanner(System.in);

  System.out.println("Enter a string to check if it is a palindrome");
  original = in.nextLine();

  int length = original.length();

  for ( int i = length - 1; i >= 0; i-- )
     reverse = reverse + original.charAt(i);

  if (original.equals(reverse))
     System.out.println("Entered string is a palindrome.");
  else
     System.out.println("Entered string is not a palindrome.");
}

答案 2 :(得分:0)

您可以编写一个简单的函数来检查字符串是否是回文。

 private static boolean checkPalindrome(String input) {
    int i = 0, j = input.length() - 1;
    for (; i < j; i++) {
        if (i == j) {
            return true;
        }
        if (input.charAt(i) == input.charAt(j)) {
            j--;
        }
        else
            return false;
    }
    return true;
}

这是一种粗暴的方法;您可能希望根据您的要求对其进行修改,但在大多数情况下都可以完成工作。

答案 3 :(得分:0)

我查看了其他答案,但所有答案都表现不佳并使用String而不是仅使用给定的数字。因此,我会在不转换为String的情况下添加版本:

public static boolean isPalindrome(int n) {
    int[] digits = new int[length(n)];

    for (int i = 0; n != 0; ++i) {
        digits[i] = n % 10;
        n /= 10;
    }

    for (int i = 0; i < digits.length / 2; ++i) {
        if (digits[i] != digits[digits.length - i - 1]) {
            return false;
        }
    }
    return true;
}

public static int length(int n) {
    int len = 0;
    while (n != 0) {
        ++len;
        n /= 10;
    }
    return len;
}

不确定,如果这是最佳实施,但我摆脱了String: - )