上半部分工作,但下半部分没有存储任何价值

时间:2016-02-14 00:27:58

标签: java arrays

 public class Palindrome
{
public static boolean isDoublePalindrome (char[] digits)
{
    char[] firstHalf = new char[digits.length/2];
    char[] secondHalf = new char[digits.length/2];

    for(int a = 0; a < digits.length / 2; a++)
    {
        firstHalf[a] = digits[a];
        System.out.print(firstHalf[a]);
    }

    for(int b = digits.length / 2; b < digits.length; b++)
    {
        secondHalf[b] = digits[b];
    }

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

            else
            {
                return true;
            }
        }

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

            else 
            {
                return true;
            }
        }
    }

    else if(digits.length % 2 != 0)
    {
        return false;
    }

    return false;
}

}

这里我将digits[]作为参数,无论字符数组在哪里,我想将它们分成两半,将前半部分存储到firstHalf,将后半部分存储到secondHalf数组。但是当我调试时,secondHalf没有任何值。请帮忙!!

3 个答案:

答案 0 :(得分:0)

首先,小心将数组长度除以2,你可能有一个奇数长度(比另一半长一半)。

如果“数字”是奇数长度会怎样?它仍然可以是回文。

要回答你的问题,在第二个循环中你将值赋值给secondHalf [b],超过它的长度:“digits.length / 2”。您应该从零开始将值分配给secondHalf []。

答案 1 :(得分:0)

这样做的方法

public int reverse(int num) {
    int revNum = 0;
    while (num > 0) {
        int rem = num % 10;
        revNum = (revNum * 10) + rem;
        num = num / 10;
    }
    return revNum;
}

实施

Scanner scanner = new Scanner(System.in);

    System.out.println("Please enter a number: ");
    int num = scanner.nextInt();

    System.out.println("Please enter a string: ");
    String str = scanner.next();

    Palindrome palin = new Palindrome();
    int revNum = palin.reverse(num);

    if (num == revNum) {
        System.out.printf("\n The number %d is a Palindrome ", num);
    } else {
        System.out.printf("\n The number %d is not a Palindrome ", num);
    }

这里回文是主要方法的类名希望我的作品在这方面帮助你。

答案 2 :(得分:0)

如果你很懒,这可能是你的方式:

public static boolean isPalindrome(String s){
    String reverse = new StringBuffer(s).reverse().toString();
    if(s.equalsIgnoreCase(reverse))
        return true;
    else
        return false;
}

如果你不被允许作弊,这可以帮助你:

public static boolean isPalindrome(String s){
    char[] chars = s.toCharArray();
    for(int i = 0; i < chars.length / 2; i++){
        if(Character.toLowerCase(chars[i]) !=  Character.toLowerCase(chars[chars.length - 1 - i]))
            return false;
    }
    return true;
}
编辑:对于第二个版本,您也不会遇到忽略字符的问题,因为如果它是一个奇数,那么它将是字符串两边共享的中间字符。