2014-01-19 67 views
0

我想编写一个字符串反转的代码。两个变量初始化立即在for循环

我知道有很多方法。不过,我想尝试使用阵列。但是我的输出有问题。

以下是我的代码:

package practice_package; 

public class Practice_Class { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    String s1 = "Jeevan"; 
    char[] a = s1.toCharArray(); 
    String s2 = "satyasahithi"; 
    char[] b = s2.toCharArray(); 
    String rs1 = new String(reverse(a)); 
    System.out.println("The reverse of '" + s1 + "' is: '" + rs1 + "'"); 
    String rs2 = new String(reverse(b)); 
    System.out.println("The reverse of '" + s2 + "' is: '" + rs2 + "'"); 

} 
public static char[] reverse(char[] args) { 
    char[] r = args; 
    int i,j; 
    for(i=args.length-1,j=0; i>=0 && j<args.length; i--, j++) { 
     r[j]= args[i]; 
    } 
    System.out.println(r); 
    return r; 
} 
} 

而且我的输出是:

navvan 
The reverse of 'Jeevan' is: 'navvan' 
ihtihaahithi 
The reverse of 'satyasahithi' is: 'ihtihaahithi' 

正如你所看到的,只有字符串的前半部分被而下半场仍然是它扭转是。 代码中有什么问题。我可以在'for'循环中同时初始化两个变量吗?我在哪里错过了逻辑?

+2

您需要创建一个单独的'char'数组来存储结果。现在你的算法正在读取和写入同一个数组。你的第一个赋值'char [] r'不会创建'args'的副本。它实际上是对同一个数组对象的另一个引用。 – tiguchi

+0

@NobuGames呀!得到它了。谢谢! :)现在我记得当我们将一个变量等于另一个变量时,只会引用值而不是创建新的内存。 –

回答

1

当您将最后一个分配给第一个时,您将丢失字符,您应该将其保留在临时值中并分配给其他值。

for(i=args.length-1,j=0; i>=0 && j<args.length/2; i--, j++) { 
    char t = r[j]; 
    r[j]= r[i]; 
    r[i] = t; 
} 
+0

非常感谢! :)但仍然没有得到你所做的逻辑......将试图理解!非常棘手! :P –

0

使用StringBuffer.reverse()

String s1 = "Jeevan"; 
StringBuffer a = new StringBuffer(s1); 
System.out.println(a.reverse()); 
0

的你for循环内的逻辑。让我们考虑第一个迭代,其中i指向5(在字符串Jeevan的情况下)并且j指向0.当你说r[j]= args[i] J将被n替代,并且你失去了字符J.这是逻辑出错的部分。作为一种解决方案,您可以采取另一种阵列和存储如下给出

public static char[] reverse(char[] args) { 
char[] r = new char[args.length]; 
int i,j; 
for(i=args.length-1,j=0; i>=0 && j<args.length; i--, j++) { 
    r[j]= args[i]; 
} 
System.out.println(r); 
return r; 
} 

或如上面建议的nr4bt。