2012-07-07 15 views
-3

我想反转String,我知道有成千上万的例子,但我想自己做这个工作,但是我创建了这个工作,但它不能正常工作。在Java中反转字符串的错误

public String ReverseString(String str){ 
     str = str.toLowerCase(); 

     char normalArr[] = str.toCharArray(); 
     char reversedArr[] = new char[str.length()]; 

     for (int i=str.length()-1; i<=0; i--){ 
      int count = 0; 
      reversedArr[count] = normalArr[i]; 
      count++; 
     } 

     String retValue = new String(reversedArr); 
     return retValue; 
    } 
+2

你的代码是缺乏调试语句 - println语句,用于告诉您程序运行时代码位于不同位置的变量值。更好地学习这项技术,而不是去分发一份讲义。 – 2012-07-07 05:30:00

+0

@HovercraftFullOfEels或者断点/调试器是一个非常有用的工具,可以遍历代码并查看它是如何在每一行执行的。它还会让你跟踪变量,看看它们在操作过程中的变化。 (任何现代的IDE) – 2012-07-07 05:41:41

+0

感谢您的洞察力,但我只是学习使用Java编码。我试图做到这一点作为一个挑战,如果我想这样做的安全方式,我会做这样的事情:\t public String ReverseStringEasy(String str){ \t \t StringBuffer sBuffer = new StringBuffer(str); \t \t return sBuffer.reverse()。toString(); \t} – Cristian 2012-07-07 05:46:22

回答

1

看看你的循环状态 - 它应该是i >= 0
此外 - 您的解决方案分配不必要的阵列(有与单个阵列执行此,不是你的,虽然算法) - 我认为你应该努力编写你的程序以获得良好的性能。

+0

只需几秒钟! – 2012-07-07 05:27:37

+0

不起作用!我尝试过这个。试试看,你会看到。我不知道我的代码有什么问题。 – Cristian 2012-07-07 05:28:22

+0

你需要同时使用@Bananeweizen的答案和我给你的答案。 – 2012-07-07 05:32:53

1

除了@zaskes的回答,你需要在循环之前int count = 0;,而不是里面。

+0

哦。这是令人尴尬的......谢谢。< – Cristian 2012-07-07 05:29:36

+0

我真的笑了起来,我自己,大声笑。再次感谢兄弟。 – Cristian 2012-07-07 05:30:43

0

下面是做相反的逻辑的实现:

StringBuffer reversed = new StringBuffer(str.length()); 
int loc = str.length(); 
while (loc > 0) { 
    char c1 = str.charAt(--loc); 
    if (Character.isLowSurrogate(c1)) { 
    assert loc >= 0; 
    char c2 = str.charAt(--loc); 
    reversed.append(c2); 
    } 
    reversed.append(c1); 
} 
return reversed.toString(); 

如果您考虑简单的追加作弊使用StringBuffer,你可以替换成:

char[] reversed = new char[str.length()]; 
int next = 0; 
... 
reversed[next++] = c1; // instead of .append(c1)