2011-07-08 255 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