【问题标题】:Strings and Loops Practice Test字符串和循环练习测试
【发布时间】:2015-02-01 02:16:30
【问题描述】:

我对这个测试问题有点困惑。我制作了 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);
    }
}

【问题讨论】:

  • 所以有人告诉我这是积分数学。我以为charAt(i)函数会返回一个字符串?

标签: java string loops indexing string-concatenation


【解决方案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”所暗示的那样。 Stringchar 是根本不同的类型。


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

【讨论】:

  • 例如,第一种情况是 i = 1 , j = 9。因此它将是 String.concat (solved, Integer.toString(mystery.charAt(1) +mystery.charAt(9 ))
  • mystery.charAt(1) = "n"mystery.charAt(9) = "b" 但是如何获得这些整数值?是 "a" = 1 , "b" = 2 吗? ETC。?我的书并没有很好地解释这个概念。
  • 不完全是。 mystery.charAt(1) = 'n' and mystery.charAt(9) = 'b' 。这些值为char。您可以通过将它们提升为整数并添加它们来添加它们。结果是int
  • 我想我可能不太了解 charAt 函数。在我的书中,它被定义为一个函数,它接受一个索引(整数)参数并返回字符串中与该索引对应的字符。有什么我想念的吗?
  • 您不会错过任何关于charAt 的信息。您缺少的是对 Java 表达式如何工作的正确理解。而且(显然)Stringchar根本不同
【解决方案2】:

您正在执行整数数学运算(因为 charintegral type),

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

这样你正在执行String 连接。

【讨论】:

    【解决方案3】:

    mystery.charAt(i) + mystery.charAt(j); 将添加这两个字符的数值。您可以通过在前面添加"" + 来强制字符串连接:

    solved += "" + mystery.charAt(i) + mystery.charAt(j);
    

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      相关资源
      最近更新 更多