1

一部のシナリオでは機能するが、他のシナリオでは機能しない理由について、私はまったく困惑してcharAt()います。私は Java を学びながら演習を行っていますが、そのうちの 1 つは文字列を取り、それを逆の順序で返すことでした。

私の作業コード:

public String reverseString(String tempStr){
    int initialindex = tempStr.length()-1;
    int reverseindex = 0;
    char tmp;
    char[] array = new char[tempStr.length()];

    for(int tempchar : array){
        tmp = tempStr.charAt(initialindex);
        array[reverseindex] = tmp;
        initialindex--;
        reverseindex++;
    }
    String returnstr = new String(array);
    return returnstr;
}

私が遭遇した問題は、次のforステートメントを使用すると意味不明になります。

for(int tempchar : array){
    array[reverseindex] = tempStr.charAt(initialindex);
    initialindex--;
    reverseindex++;
}

whileループ、標準forループ、および見苦しくて機能しないコードの他のバージョンを使用する、おそらく十数の異なるバリエーションがありました。フィールドを作成しchar tmp、検査した文字をそのフィールドに入れ、そのフィールドを使用してデータを配列に入力したのはなぜですか?

また、を使用して文字列を返すことができないのはなぜreturn array.toString();ですか?

編集:私は今日ダウンロードした最新の Eclipse を使用しており、netbeans から切り替えました。

4

4 に答える 4

2
  1. あなたのコードをエディターにコピーしたところ、tmpフィールドの有無にかかわらず、どちらのバージョンでも問題なく動作しました。他の方法を使用して他のエラーを犯したに違いありません。

  2. .toString()Java は配列のプリティをサポートしていません。オーバーライドしないtoStringオブジェクトは、オブジェクトのコンテンツ/フィールドではなく、オブジェクトの hashCode を生成します。配列も例外ではありません。文字配列については理にかなっているように見えるかもしれませんが、int 配列に対して同じ操作を行うと意味がありません。と の違いを参照してArrays.toString()くださいString.valueOf(array)。この場合、おそらくString.valueOfメソッドを使用する必要があります。

于 2013-04-18T06:54:10.333 に答える
0

始めるためのヒントとして、char配列をに変換する場合は、配列を受け取るコンストラクターをString使用します。Stringchar

更新:編集ですでにそれを行っているようです。現在、期待どおりに機能していますか?

ループ変数を使用しないため、ループは少し奇妙に見えます。あなたはこれを試すことができます:

char[] initialArray = initialStr.toCharArray();
char[] array = new char[tempStr.length()];

for(int srcIndex = 0, destIndex = array.length-1; destIndex >= 0; srcIndex++, destIndex--) {
    array[destIndex] = initialArray[srcIndex];
}
于 2013-04-18T06:50:58.447 に答える
0

array.toString()オブジェクトの戻り文字列表現。new String(array)char[]から String を作成するには、String の char[] コンストラクターを使用する必要があります。

于 2013-04-18T06:52:24.760 に答える