Java 检查给定单词是否为回文
我试图写一个方法来检查一个给定的单词是否是回文,但到目前为止,它不起作用。我怀疑错误存在于if语句中,并且您没有将字符串之类的对象与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
=
进行比较,而是与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很好的代码没有错,如果字符串可以很长,那么性能就很差。当然,因为这肯定是某种作业,性能并不重要;然而,因为这肯定是某种作业,所以它是有问题的使用循环更有教育意义。非常好的代码,如果字符串可能很长,那么性能会很差。当然,因为这肯定是某种作业,性能并不重要;但是,因为这肯定是某种作业,所以使用循环可能更有教育意义。