字符串和循环练习测试

Strings and Loops Practice Test

我对这个测试题有点困惑。我制作了 i 、 j 和字符串的值的图表。我得到 "nbearig",但我的运行时正在打印数字。我不确定哪里出错了。 ++i , --j 表示它们在 for 循环之后的代码之前 incre/decremented 对吗?

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

您正在执行整数数学运算(因为 char 是一个 integral type),

// solved += mystery.charAt(i) + mystery.charAt(j);
solved += Character.toString(mystery.charAt(i))
        + Character.toString(mystery.charAt(j));

这样您就可以执行 String 串联。

mystery.charAt(i) + mystery.charAt(j); 将添加这两个字符的数值。您可以通过在

之前添加 "" + 来强制字符串连接:
solved += "" + mystery.charAt(i) + mystery.charAt(j);

I'm not sure where I went wrong. ++i , --j means that they were incre/decremented before the code after the for loop right?

1)分别预增/预减

2) 每次循环体执行后发生

my compiler is printing out numbers.

不,不是。编译器正在编译你的代码!!! 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));

I thought that the charAt(i) function will return a string?

没有。它 returns a char ... 就像方法名称 "charAt" 暗示的那样。 Stringchar 是根本不同的类型。


点评:这是一道很好的考题,它测试你对循环的理解程度,以及你对Java表达式语义的理解程度。