2011-11-11 16 views
0

私はC++で短い文字列リバースプログラムを書いています。私はJavaで記述することにしました。しかし、プログラムの作成が完了したら、修正しようとしたが修正できないいくつかのエラーが発生しました。エラーの1つはArrayOutOfBounds例外でした。エラーを修正するのを手伝ってください。 C++プログラムは正常に動作しました。以下はJavaコードです。私は組み込み関数を使用したくないことに注意してください。リバース文字列プログラム

import java.util.Scanner; 

public class Main{ 
    public static void main(String[] args){ 
     Scanner scan = new Scanner(System.in); 
     String word; 
     int i = 0; 
     boolean inp = true; 
     System.out.println("Enter one or more words to be reversed:"); 
     word = scan.nextLine(); 
     char wordArray[] = word.toCharArray(); 
     while(wordArray[i]!='\0') 
      i++; 
     while(inp == true){ 
      i--; 
      System.out.println(wordArray[i]); 
      if(i==0){ 
       System.out.println(); 
       break; 
      } 
     } 
    } 
    } 
+0

length()メソッドを使用して、文字列の長さを見つけることができます。 –

+0

ところで、あなたの文字列の完全性を気にするのであれば、それほど簡単ではありません。それらの隣にある文字と融合した "結合文字"があり、charが後に来る文字列の変化を盲目的に逆転させます。 http://msmvps.com/blogs/jon_skeet/archive/2009/11/02/omg-ponies-aka-humanity-epic-fail.aspx(そして "Les Miserables"を検索)を見て、私が私は話しています。 – cHao

答えて

8

Java文字列にヌル終了文字はありません。彼らは長さを決定するために使用するlength()メソッドを持っています。

while (true) { 
    ... 
} 

または単純なforループとして:

また、whileループは、より慣用的だろう。

+0

しかし、文字列をnull終端文字を持つ文字配列に変換したので、最初のwhileループを使用できないはずですか? – srikarg

+0

なぜ文字列がNULLでない場合、配列にはnull文字が入りますか? – yurib

+0

@ dvader123:char配列にはnulも含まれていません。文字列とまったく同じ文字が含まれています。 JavaはCではありません。配列の長さはここで分かるので、文字列の長さを知るために終端文字は必要ありません。 – cHao

0

javaの文字列がnullで終わるとは限りません。String.length()メソッドを使用して、その長さを調べる必要があります。

0

Java文字列はゼロで終端されていないため、文字列から作成されたバイト配列もどちらもありません。ループの長さを判断するためにループを使用しましたが、ループは値0のバイトを検出しないため、範囲を超えます。代わりにword.length()を使用してください。

2番目のこと:文字を印刷するにはSystem.out.printlnを使用しました。各文字の後に改行を挿入します。これは意図されていますか?

2

これは別の可能性は、おそらく簡単です:

public String reverse(String str) { 
    char[] chars = str.toCharArray(); 
    int n = chars.length; 
    for (int i = 0; i < n/2; i++) { 
     char tmp = chars[i]; 
     chars[i] = chars[n-i-1]; 
     chars[n-i-1] = tmp; 
    } 
    return new String(chars); 
} 

そして、あなたはあなたが組み込み関数を使用しないことを述べたが、ほとんどの慣用的な方法は、このようになります:

public String reverse(String str) { 
    return new StringBuilder(str).reverse().toString(); 
} 
+0

シンプルではありません。単純な解決策は簡単ですが、代わりの実装では+1です。 –

関連する問題