【问题标题】:Two variables initialization at once in for loop在for循环中一次初始化两个变量
【发布时间】:2023-03-08 01:07:01
【问题描述】:

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

我知道有很多方法。但是,我想尝试使用数组。但我的输出有问题。

以下是我的代码:

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”循环中一次初始化两个变量吗?我在哪里缺少逻辑?

【问题讨论】:

  • 您需要创建一个单独的char 数组来存储结果。现在您的算法正在读取和写入同一个数组。您的第一个作业char[] r 不会创建args 的副本。它实际上是对同一个数组对象的另一个引用。
  • @NobuGames 是的!知道了。谢谢! :) 现在我记得当我们将一个变量与另一个变量相等时,只会发生值的引用而不是创建新的内存。

标签: java arrays string for-loop


【解决方案1】:

当你把last分配给first时,你会丢失char,你应该把它暂时保存并分配给其他的。

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;
}

【讨论】:

  • 非常感谢! :) 但仍然没有得到你所做的逻辑..会尝试理解!很棘手! :P
【解决方案2】:

使用StringBuffer.reverse()

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

【讨论】:

    【解决方案3】:

    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。

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      相关资源
      最近更新 更多