两个变量在for循环中一次初始化

时间:2014-01-19 18:33:35

标签: java arrays string for-loop

我想编写一个用于反转字符串的代码。

我知道有很多方法可供选择。但是,我想尝试使用Arrays。但我输出有问题。

以下是我的代码:

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'循环中一次初始化两个变量。我在哪里错过了逻辑?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

使用StringBuffer.reverse()

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

答案 2 :(得分: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。