即使条件为真,为什么我的方法仍返回假?

时间:2019-03-23 15:14:51

标签: java

public class Lab3Exercises {

public static void main(String[] args){
    Scanner s = new Scanner([System.in](https://System.in));
    System.out.println("Please enter a word to check if it is a palindrome");
    String myP = [s.next](https://s.next)();
    System.out.println(palindrome(myP));
}

public static boolean palindrome(String p){
    String myWord = p;
    String reverseWord = "";
    int i = 1;
    while (i < myWord.length()){
        reverseWord = myWord.charAt(i) + myWord.substring(0, i) + myWord.substring((i + 1), myWord.length());
        i++;
    }
    if (reverseWord.equals(myWord)) {
        return true;
    }
    else{
        return false;   
    }
}

我检查了一下,reverseWord与myWord完全相同,但是每次都会返回false。我尝试过汉娜,赛车等,它们都返回false

3 个答案:

答案 0 :(得分:0)

您的情况不正确,因为构建反词的方式是错误的。

  1. 您以i开头等于0
  2. 您在每个循环中都为reverseWord重新分配了一个新值
  3. 构建反向字符串的方式对我来说完全是个谜

以下是一个好的解决方案(您编写代码:))

  1. 尝试从原始单词的末尾开始的索引开始循环
  2. 向下循环直到您到达0,基本上直到没有字母要附加到reverseWord
  3. 在每个循环中,将一个字母附加到reverseWord上,而不是复杂操作的结果

答案 1 :(得分:0)

让我们从简单的示例开始。

  • 如果p的长度为1,例如s(回文),则将reverseWord设置为空字符串。由于i从1开始,它不小于长度,因此循环不会运行。由于空字符串不等于s,因此该方法返回false。
  • 输入tt(另一个回文)。您在循环中运行了一次,将reverseWord设置为"t" + "t" + "" = "tt"。在这种情况下,该方法正确返回true。
  • 输入obo:首先将reverseWord设置为boo,然后将"oob""o" + "ob" + "")设置为第一个值。

我认为您需要再次考虑自己的逻辑。

提示:学习使用调试器。

答案 2 :(得分:-1)

  • 无需为要检查的原告词重新引用。
  • 您应该以相反的顺序将单词存储在reverseWord变量中。
  • java中char数组(字符串)的最后一个索引比字符串长度小1。第一个索引是0。
  • 因此,while循环从头开始读取字符串以开始索引并存储。

    public static boolean palindrome(String p){
    
        String reverseWord = "";
        int i = p.length() - 1;
        while (i >= 0){
           reverseWord += p.charAt(i);
           i--;
        }
    
        if (reverseWord.equals(p)) {
            return true;
        }
    
        return false; 
    
    }