2011-07-08 247 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的字符串是正確的。只要想一想你的算法的執行情況testcases,你肯定會看到自己的問題 – Voo

回答

8

問題不在於輸入的長度爲4,而是長度爲4的長度爲,即使是的長度,所以您的停止條件從未打中。即,對於偶數長度字符串,frontpos從不等於rearpos

而應該只是確保frontposrearpos,改變while(frontPos!=rearPos)while(frontPos < rearPos)應該明確的事情了。

+0

+1被打了6秒.. –

+0

非常感謝你,我已經改變了'while(condition)',並像魅力一樣工作。 – kunaguvarun

3

只用一個計數器可能會更容易編寫。

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