回文测试仪

时间:2014-07-30 06:03:36

标签: java palindrome

所以我编写了大部分代码并且它有效。除了迭代方法一直表明它不是一个回文,无论输入什么。我不知道如何补救它是代码。

//David Crouse Assignment 2
import java.util.Scanner;


public class Assignment2 {

public static boolean loop = false;
//main
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Welcome to the Palindrome Checker!");
    do{
        System.out.print("Enter a string to check if it is a palindrome. ");
        System.out.print("Enter x to exit.");
        String word = input.nextLine();
        word = word.replaceAll("\\s","");
        word = word.toLowerCase();
        //Exit Program
        if(word.equalsIgnoreCase("x")){
            System.out.println("End of program. Good Bye!");
            System.exit(0);
        }
        if(iterativePalindromeChecker(word)){
            System.out.println("Iterative Result: Palindrome!");
        }else{
            System.out.println("Iterative Result: Not a palindrome");
        }
        if(recursivePalindromeChecker(word)){
            System.out.println("Recursive Result: Palindrome!\n");
        }else{
            System.out.println("Recursive Result: Not a palindrome\n");
        }

        loop = true;
    }while (loop == true);
}
//Iterative Method
public static boolean iterativePalindromeChecker(String str){
    boolean result = false;

    int length  = str.length();
    int i, begin, end, middle;

    begin  = 0;
    end    = length - 1;
    middle = (begin + end)/2;

    for (i = begin; i <= middle; i++) {
        if (str.charAt(begin) == str.charAt(end)) {
            begin++;
            end--;
        }
        else {
            break;
        }
    }
    if (i == middle + 1) {
        result = false;
    }
    return result;

}


//Recusive Methods
public static boolean recursivePalindromeChecker(String str){
    if(str.length() == 0 || str.length() == 1)
        return true;
    if(str.charAt(0) == str.charAt(str.length()-1))
        return recursivePalindromeChecker(str.substring(1,str.length()-1));
    return false;
}

}

3 个答案:

答案 0 :(得分:2)

你的迭代方法没有在任何地方设置result = true,所以它真的无法帮助它。虽然我认为迭代方法总体上可能更好。仔细研究递归过程中发生的事情,看看你是否可以在迭代方法中更密切地实现其中的一些(如保护条件),并记住你不仅限于单个索引值。 for循环。 e.g:

public static boolean iterativePalindromeChecker(String str) {
    for(int start = 0, end = str.length() - 1; start < end; start++, end--) {
        if(str.charAt(start) != str.charAt(end)) {
            return false;
        }
    }
    return true;
}

答案 1 :(得分:2)

您的迭代方法永远不会将result设置为true。这是修改后的版本:

public static boolean iterativePalindromeChecker(String str){   
    int length  = str.length();
    int i, begin, end, middle;

    begin  = 0;
    end    = length - 1;
    middle = (begin + end)/2;

    for (i = begin; i <= middle; i++) {
        if (str.charAt(begin) == str.charAt(end)) {
            begin++;
            end--;
        }
        else {
            return false;
        }
    }
    return true;
}

答案 2 :(得分:0)

我猜测有人曾经告诉过你,一个函数应该只有一个返回点,并且试图遵循这一点导致你使用一个可变的result变量,这使你在这里搞砸了。无论如何,使用break会产生相同的表面问题。保存自己的头痛,只要你知道答案就回来。

public static boolean iterativePalindromeChecker(String str) {

    int begin = 0;
    int end = str.length() - 1;

    while (begin < end) {
        if (str.charAt(begin) != str.charAt(end)) {
            return false;
        }
        begin++;
        end--;
    }
    return true;
}