Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查给定单词是否为回文_Java_Methods_Palindrome - Fatal编程技术网

Java 检查给定单词是否为回文

Java 检查给定单词是否为回文,java,methods,palindrome,Java,Methods,Palindrome,我试图写一个方法来检查一个给定的单词是否是回文,但到目前为止,它不起作用。我怀疑错误存在于if语句中,并且您没有将字符串之类的对象与=进行比较,而是与equals进行比较,对吗?但是Java不允许我编写:if(firstHalf.charAt(i).equals(secondHalf.charAt(j)),那么我该怎么做才能让它工作呢?代码中还有其他错误吗 公共静态布尔值isPalindrome(字符串){ String firstHalf=String.substring(0,String.l

我试图写一个方法来检查一个给定的单词是否是回文,但到目前为止,它不起作用。我怀疑错误存在于if语句中,并且您没有将字符串之类的对象与
=
进行比较,而是与
equals
进行比较,对吗?但是Java不允许我编写:
if(firstHalf.charAt(i).equals(secondHalf.charAt(j))
,那么我该怎么做才能让它工作呢?代码中还有其他错误吗

公共静态布尔值isPalindrome(字符串){
String firstHalf=String.substring(0,String.length()/2);
String secondHalf=String.substring(String.length()/2,String.length());

对于(inti=0;i您可以将每个字符设置为如下所示的字符串
String s1=”“+c1;
然后将它们与
.equals(s1,s2)

或者您可以使用
Character
类,它是原语
Character
的包装器。
这也将使您能够使用
c1。equals(c2)

您可以将每个字符设置为如下所示的字符串
String s1=”“+c1;
然后将它们与
.equals(s1,s2)

或者您可以使用
Character
类,它是原语
Character
的包装器。
这也可以让你使用c1.equals(c2)
为什么不这样做呢

public static boolean isPalindrome(String string){
  StringBuilder sb = new StringBuilder(string);  
  sb.reverse();  
  return sb.toString().equals(string);
}  

为什么不这样做呢

public static boolean isPalindrome(String string){
  StringBuilder sb = new StringBuilder(string);  
  sb.reverse();  
  return sb.toString().equals(string);
}  

您的字符测试是反向的。所有的比较都必须相等,字符串才是回文

此外,不需要拆分
字符串
。您可以使用两个索引从逻辑上拆分
字符串

试试这个代码

    public static boolean isPalindrome(String string) {
        int frontIndex = 0;
        int backIndex = string.length() - 1;
        while (frontIndex < backIndex) {
            if (string.charAt(frontIndex++) != string.charAt(backIndex--)) {
                return false;
            }
        }
        return true;
    }
公共静态布尔值isPalindrome(字符串){
int frontIndex=0;
int backIndex=string.length()-1;
while(前向索引<后向索引){
if(string.charAt(frontIndex++)!=string.charAt(backIndex--){
返回false;
}
}
返回true;
}

您的字符测试是向后的。所有比较都必须相等,字符串才能成为回文

此外,不需要拆分
字符串
。您可以使用两个索引从逻辑上拆分
字符串

试试这个代码

    public static boolean isPalindrome(String string) {
        int frontIndex = 0;
        int backIndex = string.length() - 1;
        while (frontIndex < backIndex) {
            if (string.charAt(frontIndex++) != string.charAt(backIndex--)) {
                return false;
            }
        }
        return true;
    }
公共静态布尔值isPalindrome(字符串){
int frontIndex=0;
int backIndex=string.length()-1;
while(前向索引<后向索引){
if(string.charAt(frontIndex++)!=string.charAt(backIndex--){
返回false;
}
}
返回true;
}

您可以对单个字符使用==这很好。您的j循环递减,因此您应该检查j>=0,而不是jj。一旦找到匹配项,您也会返回true,这是错误的。所有内容都需要匹配字符串才能成为回文,而不仅仅是第一个和最后一个字符。您可以对单个字符使用==这很好。您的j循环递减,因此您应该检查j>=0而不是jj。一旦找到匹配项,您也会返回true,这是错误的。所有内容都需要匹配字符串才能成为回文,而不仅仅是第一个和最后一个字符。这里不需要等号。在哪里?在第一种方式中?在OP的代码中,==字符比较没有错误这里不需要等号。在哪里?在第一种方式中?在OP的代码中,==比较charsVery很好的代码没有错,如果字符串可以很长,那么性能就很差。当然,因为这肯定是某种作业,性能并不重要;然而,因为这肯定是某种作业,所以它是有问题的使用循环更有教育意义。非常好的代码,如果字符串可能很长,那么性能会很差。当然,因为这肯定是某种作业,性能并不重要;但是,因为这肯定是某种作业,所以使用循环可能更有教育意义。