Java for循环中同时初始化两个变量
我想写一个字符串反转的代码 我知道有很多方法。但是,我想尝试使用数组。但是我的输出有问题 以下是我的代码:Java for循环中同时初始化两个变量,java,arrays,string,for-loop,Java,Arrays,String,For Loop,我想写一个字符串反转的代码 我知道有很多方法。但是,我想尝试使用数组。但是我的输出有问题 以下是我的代码: package practice_package; public class Practice_Class { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String s1 = "Jeevan"; char[
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;
}
}
如您所见,只有字符串的前半部分被反转,而后半部分保持原样。
代码中有什么错误。我可以像那样在“for”循环中同时初始化两个变量吗。我在哪里丢失了逻辑?当您将last分配给first时,您将丢失字符,您应该将其保留在临时状态并分配给other
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;
}
用于(i=args.length-1,j=0;i>=0&&j使用
< > < <代码> > <代码>循环中的逻辑。让我们考虑第一次迭代,其中<代码> 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;
}
publicstaticchar[]reverse(char[]args){
char[]r=新字符[args.length];
int i,j;
对于(i=args.length-1,j=0;i>=0&&j),您需要创建一个单独的char
数组来存储结果。现在您的算法正在读取和写入同一数组。您的第一个赋值char[]r
不会创建args
的副本。它实际上是对同一数组对象的另一个引用。@NobuGames是的!明白了。谢谢!:)现在我记得当我们将一个变量与另一个变量相等时,只会引用值,而不会创建新内存。非常感谢!:)但仍然没有得到你所做的逻辑…将尝试理解!非常棘手!:P
String s1 = "Jeevan";
StringBuffer a = new StringBuffer(s1);
System.out.println(a.reverse());
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;
}