2016-12-13 15 views
0
import java.lang.String; 
public class Word 
{ 
    /** 
    * constructs a Word with String value s 
    * @param s is string value of Word 
    */ 
    public Word(String s) 
    { 
     original = s; 
    } 

    /** 
    * reverses letters in original string 
    * @return a string that is a reverse of original 
    */ 
    public String reverse() 
    { 
     String temp = original; 
     String areverse = ""; 
     int x; 
     for (x = temp.length() ; x>0 || x==0 ; x --) 
     { 
      areverse = temp.substring(x); 
     } 
     return areverse; 
    } 

    /**  
    * determines is word is a palindrome 
    * @return true if word is a palindrome, false otherwise 
    */ 
    public boolean isPalindrome() 
    { 
     boolean flag = false; 
     String temp = original; 
     if (temp.equals(temp.reverse())) 
      flag = true; 
     return flag; 

    } 

    /** 
    * Alternate method to determine if word is a palindrome 
    * @return true if word is a palindrome, false otherwise  
    */ 
    public boolean isPalindrome2() 
    { 
     String temp = original; 
     int x = temp.length(); 
     boolean flag = false; 
     int y = 0; 
     while (temp.subtring(y).equals(temp.substring(x)) && (x>0 || x==0)) 
     { 
      x--; 
      y++; 
     } 
     if (x==0) 
      flag=true; 
     return flag; 


    } 

    private String original; 
} 

単語の逆を見つけて、単語が2つの異なる方法で回文かどうかを判断するこのプログラムを書く必要があります。私はメソッド名とメソッドのコメントだけを与えられましたが、メソッドのコードはすべて私のものです。最初の回文メソッドでreverse()メソッドを使うと、bluejは変数やメソッドを 'reverse'で見つけることができないことを私に伝えます。私の問題は何ですか?ありがとうなぜ私の方法を認識しませんか?

+0

これは含まれていませんでしたが、これはトップにあります。java.lang.String; パブリッククラスワード {公共単語(文字列S) {オリジナル=秒; } – rxTT

+1

[ラバーダックのデバッグ](http://www.rubberduckdebugging.com/)はここで大きく進歩します。 – rmlan

+0

私はエラーが実際にどこに報告されているのかを知る必要があると思います( 'reverse()'メソッドを呼び出すところです)。 – markspace

答えて

0

問題は、しかし、逆の方法では、文字列クラス内ではなく、自分のクラスがありますが、あなたが

temp.reverse(); 
をした際に、文字列でそれを見つけるためにしようとしている、文字列に一時を設定しているということです

これを回避するには、逆の方法で文字列を取り込み、文字列を返します。取り込む文字列は逆のもので、戻り値は逆の文字列です。

public String reverse(String string) 

その後、あなたはあなたが順番に

new StringBuilder(original).reverse().toString() 

を使用する必要がありますので、新しい逆の方法が

public String reverse(String string) 
{ 
    String areverse = ""; 
    for (int x = string.length(); x>0; x--) 
    { 
     areverse += string.charAt(x - 1); 
    } 
    return areverse; 
} 
+0

私はメソッドを変更できませんが、とにかくそれを行い、しかし、ありがとう! – rxTT

+0

もしあなたが一言を言ってもらえない場合は、 if(temp.equals(reverse))flag = true; – FacelessTiger

1

Stringオブジェクトの "temp"でreverseを呼び出しています。 Wordクラスにreverseメソッドを定義しているため、Wordオブジェクトで呼び出す必要があります。

+0

gotchya ...どうすればいいですか? – rxTT

+0

新しいWordオブジェクトをWord myNewWordObject = new Word( "someString")でインスタンス化できます。次に、そのオブジェクトに対してreverseを呼び出すことができます:myNewWordObject.reverse()。あなたのisPalindromeメソッドでは、次のようになります:if(temp.equals(new Word(temp).reverse()) – Stefan

0

ようになり

if (temp.equals(reverse(temp))) 
    flag = true; 

自分のクラスにメソッドを呼び出します逆を取得する。メソッドの逆はString型に存在しません。

+0

StringBuilderを使用することはできません – rxTT

+0

あなたのメソッドはうまくいかず、メソッドreverseはWordクラスで定義されていますStringクラスではありません。 – Stefan

関連する問題