2

回文と文字列パラメーターを扱う1つの練習問題を終えるのに非常に近づいており、メソッドを呼び出すためのメインメソッドで立ち往生しています。コードをコンパイルするたびにコンパイルされますが、入力データに移動すると、実行が継続され、結果が得られません。結果を返すために私がしなければならないことを誰かが助けてくれますか?問題は、それが回文であるかどうかをチェックするメソッドを作成することだけです。それをテストする私の主なメソッドは、私に問題を引き起こしているものです。

これは私のコードです:

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;
    }
}

開始時に左<右と仮定すると、これは変更されません。

左右にインクリメントする行がありますが、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 に答える