2016-05-01 8 views
-5
public class ex4 { 

public static void main (String args[]) throws IOException { 
    int strlength=length(args); 
    InvertString(args, strlength, 0); 
} 

public static int length(String args[]) { 
    int i=0; 
    int count=0; 
    while(Character.isLetter(args[0].charAt(i))){ 
     count++; 
     i++;} 
    return count; 
     } 




public static void InvertString(String args[], int i, int x){ 

    char a= args[0].charAt(x); 
     args[0].charAt(x)=args[0].charAt(i-1-x); 
     args[0].charAt(i-1-x)=a; 
    x++; 

    if(x<(i/2)) InvertString(args,i,x); 
    } 
} 

コンパイルエラーがex4.java:27です:エラー:予期しないタイプに必要な:変数が見つかりました:値ex4.java: 28:エラー:予期しないタイプが必要:変数が見つかりました:値このコードは最初の引数で指定した文字列を反転することになったが、それはコンパイルエラーを持っていた

+0

問題は何ですか? – randominstanceOfLivingThing

+1

ええ、それに近いものは何もできません。あなたは 'foo.charAt(i)= anything'と言うことはできません。 'String'はまったく変更できませんが、実際にはまったく新しいものしか作成できません。 –

+0

もう1つ作成します – Salgado

答えて

1

あなたのコードはいくつかのJava規則に違反しています。しかし、私は、アルゴリズムの行使のために、このコードを取る

int length = args[0].length(); 

:文字列の反転を取得するには、単純に文字列の長さは、法長()によって返され

String reversedString = new StringBuilder(args[0]).reverse().toString(); 

を使用することができますそれに応じてコメントします。

最初にargsは文字列の配列なので、args [0]文字列を反転させたいので、InverseStringメソッドでString []の引数をStringに交換する必要があります。

第2に、メッセージの本文に引数値を再割り当てすることは悪い習慣であり、新しい変数を宣言することが望ましいです。引数はjavaで値によって渡されるので、引数の値を変更すると、呼び出し元のメソッドは変更を認識しません。ただし、引数が可変オブジェクトへの参照であれば、そのオブジェクトを変更することができます。

第3に、StringはJavaでは不変です。インスタンスが作成されると、内容を変更することはできません。新しいStringへの参照のみを割り当てます。したがってInvertStringは戻り値の型voidから戻り値の型Stringに変更する必要があります。メインメソッドは新しい値に変数を割り当てる必要があります。または、中間値を格納する可変オブジェクトを宣言する必要があります。文字の操作には、StringBufferクラスとStringBuilderクラスを変更することができます。あなたのコードにマルチスレッドを持たないので、StringBuilderがより適切です。

public static void main (String args[]) throws IOException { 
    StringBuilder arg = new StringBuilder(args[0]); 
    int strlength = arg.length(); 
    InvertString(arg, strlength, 0); 
} 

public static void InvertString(StringBuilder arg, int i, int x) { 
    char a = arg.charAt(x); //char a= args[0].charAt(x); 
    arg.setCharAt(x,arg.charAt(i-1-x)); //args[0].charAt(x)=args[0].charAt(i-1-x); 
    arg.setCharAt(i-1-x,a); // args[0].charAt(i-1-x)=a; 

    if(x < (i/2)) 
     InvertString(arg,i,x + 1); // replace x++ with x + 1 to avoid argument manipulation 
} 

このアルゴリズムは、コンパイルされますが、しかしそれはまだエラーが発生しました - 中央の文字もの長さの文字列の場合には(元に)を2回交換する予定です。私はあなたに修正案を見せさせるでしょう。がんばろう!

関連する問題