我对这个测试问题感到有些困惑。我制作了i,j和字符串值的图表。我得到了“nbearig”,但我的运行时打印出数字。我不确定我哪里出错了。 ++ i, - j意味着它们在for循环之后的代码之前递增/递减了吗?
public class AlGore {
public static void main(String[] args) {
String mystery = "mnerigpaba";
String solved = "";
int len = mystery.length();
for (int i = 0, j = len - 1; i < len/2; ++i, --j) {
solved += mystery.charAt(i) + mystery.charAt(j);
}
System.out.println(solved);
}
}
答案 0 :(得分:1)
我不确定我哪里出错了。 ++ i, - j意味着它们在for循环之后的代码之前递增/递减了吗?
1)它们分别是预先增量/预先增量。
2)它发生在每次执行循环体之后。
我的编译器打印出数字。
不,不是。编译器正在编译你的代码!当您运行代码时,JVM正在打印数字。
要了解原因,请仔细看看:
solved += mystery.charAt(i) + mystery.charAt(j);
这相当于
solved = solved + ( mystery.charAt(i) + mystery.charAt(j) );
现在括号中的表达式对字符执行字符的数字添加。根据Java表达式的规则,它给出int
值。所以整个表达式变成:
solved = String.concat(
solved,
Integer.toString(mystery.charAt(i) + mystery.charAt(j));
我认为charAt(i)函数会返回一个字符串吗?
没有。它返回char
...就像方法名称“charAt”暗示的那样。 String
和char
基本上是不同的类型。
评论:这是一个很好的考试问题,它会测试你对循环的理解程度,以及你对Java表达语义的理解程度。
答案 1 :(得分:0)
您正在执行整数数学运算(因为char
是integral type),
// solved += mystery.charAt(i) + mystery.charAt(j);
solved += Character.toString(mystery.charAt(i))
+ Character.toString(mystery.charAt(j));
这样您就可以执行String
连接。
答案 2 :(得分:0)
mystery.charAt(i) + mystery.charAt(j);
将添加这两个字符的数值。您可以通过在{:1>}之前添加"" +
来强制进行字符串连接
solved += "" + mystery.charAt(i) + mystery.charAt(j);