2011-07-08 16 views
2

私は文字列の内容を逆にして表示するJavaプログラムを書いています。文字列の逆の問題

ここでコードが..です

import java.util.*; 
class StringReverse 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     System.out.print("Enter a string to be reversed :"); 
     String input = in.next(); 
     char[] myArray = new char[input.length()]; 
     myArray = input.toCharArray(); 
     int frontPos=0,rearPos=(myArray.length)-1; 
     char tempChar; 
     while(frontPos!=rearPos) 
     { 
      tempChar=myArray[frontPos]; 
      myArray[frontPos]=myArray[rearPos]; 
      myArray[rearPos]=tempChar; 
      frontPos++; 
      rearPos--; 
     } 
     System.out.println(); 
     System.out.print("The reversed string is : "); 
     for(char c : myArray) 
     { 
      System.out.print(c); 
     } 

    } 
} 

今、プログラムが5以上の長さの文字列に対して正常に動作します。しかし、私は、入力として長さ4の文字列を与えた場合、私はにArrayIndexOutOfBounds例外を取得。何が問題なの?

+0

それは同じように簡単に行うことができますか? –

+0

いいえ、そのアルゴリズムは、5以上の長さ(ヒント:50%)のすべての文字列ではうまく動作せず、実際には5より小さい文字列に対して正しく機能します。テストケースとあなたは確かに自分自身の問題を参照してください – Voo

答えて

8

入力が長さ4であるのではなく、長さ4がであっても、の長さであることが問題ではありません。つまり、frontposはありません。は、同じ長さの文字列の場合はrearposです。

あなたはだけではなく、物事をクリアする必要がありwhile(frontPos < rearPos)while(frontPos!=rearPos)を変え、frontposrearposより以下であることを確認する必要があります。

+0

+1 6秒で殴ら.. –

+0

ありがとう、私は 'while(条件)'を変更し、魅力的なように働いた.. – kunaguvarun

3

おそらく1つのカウンタで簡単に書き込むことができます。

for(int i = 0; i < myArray.length; i++) { 
    char temp = myArray[i]; 
    myArray[i] = myArray[myArray.length - i - 1]; 
    myArray[myArray.length - i - 1] = temp; 
} 
String reversed = new String(myArray); 
2

なぜロジックを複雑にしていますか?

char temp[] = new char[str.length()]; 
    int k = 0; 

    for(int i = str.length()-1 ; i >= 0 ; i--) 
    { 
     temp[k] = str.charAt(i); 
     k++; 
    } 
System.out.println(new String(temp)); 
0
public String reverse(String str) 
{ 
    String rev = " "; 
    for (int i = 0 ; i < str.length(); i++) 
    { 
     rev = str.charAt(i) + rev; 
    } 
    return rev.trim(); 
} 

入力:

December 

出力:ラインは、例外がスローさん

rebmeceD