2

我非常接近完成我的一个处理回文和字符串参数的练习问题,并且我坚持使用调用该方法的主要方法。每次我编译我的代码时,它都会编译,但是当我输入数据时,它会继续运行并且不会给我结果。任何人都可以帮助我完成我需要做的事情来让它返回结果吗?问题只是要求创建一个方法来检查它是否是回文,我测试它的主要方法是给我带来麻烦的方法。

这是我的代码:

import java.util.*;
public class TestisPalindrome
{
  public static boolean isPalindrome(String str) {
    int left = 0;
    int right = str.length() -1;

    while(left < right) {
      if(str.charAt(left) != str.charAt(right)) {
        return false;
      }
    }
    left ++;
    right --;

    return true;
  } 

  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter a string to see if it is a palindrome or not: ");
    String st1 = scan.nextLine();
    System.out.println(isPalindrome(st1));
  }
}
4

5 回答 5

4

左右增量应该在while循环中

while(left < right)
     {
        if(str.charAt(left) != str.charAt(right))
        {
            return false;
        }
        left ++;
        right --;
    }
于 2013-03-27T04:30:07.083 回答
2

您已经创建了一个无限循环。你有一个while循环,但永远不要改变条件。

while(left < right)
{
    if(str.charAt(left) != str.charAt(right))
    {
        return false;
    }
}

假设您开始时 left < right,这将永远不会改变。

您有行要左右递增,但您的代码永远不会到达这些行,因为它永远不会退出 while 循环。

于 2013-03-27T04:35:53.883 回答
1

你多虑了。看StringBuffer

StringBuffer input = new StringBuffer(str);
return str.equals(input.reverse()).toString);

请注意,您的实施会对性能产生影响:

while(left < right) { //multiply inner operations by n/2
  if(str.charAt(left) != str.charAt(right)) { //three operations
    return false;
  }
  //This need to be inside your while loop
  left ++; //one operation
  right --; //one operation
}

这导致O(n) = (n * 5) / 2. 另一方面,如果你只是简单地反转一个字符串,它只是O(n) = n 在最坏的情况下。这不是一个重大影响,但可以根据您访问它的方式累加。

于 2013-03-27T04:33:19.440 回答
1

你也可以这样解决:

public static boolean isPalindrome (String str){
    String convertedStr = "";

    for (int i = 0; i <str.length(); i++){
        if (Character.isLetterOrDigit(str.charAt(i)))
            convertedStr += Character.toLowerCase(str.charAt(i));
    }
    if (convertedStr.equals(reverseString(convertedStr)))
        return true;
    else
        return false;    
} //End of isPalindrome
于 2013-03-27T05:48:05.473 回答
0

这是我用来确定字符串是否为回文字符串的代码:

private static boolean isPalindromeString(String str){
    if (str == null) 
        return false;
    int len  = str.length();
    for (int i=0; i<len/2 ; i++){
        if (str.charAt(i) != str.charAt(len - i - 1)){
            return false;
            }
    }       
    return true;
}

我希望这可以帮助你。

于 2013-10-24T19:14:42.650 回答