有人可以解释这两个简单的循环吗?

时间:2021-02-02 22:36:50

标签: java

您好,我在理解以下代码时遇到问题。

public static void main(String[] args) {
    String vstup = "DEN DOBRY";
    String vystup = "";
    int i = 2;
    do {
        vystup = vystup + vstup.charAt(i);
        i++;
    } while (vystup.charAt(0)>=vstup.charAt(i));
    System.out.println(vystup);
}

为什么这个打印出“N D”?

第二个:

public static void main(String[] args) {
    String vstup = "Mama má emu.";
    String vystup = "";
    for (int i = 0;i<vstup.length();i++)
        if ((i % 3) == 1) vystup = vystup.concat(vstup.substring(i, i+2));
        System.out.println(vystup);
}

为什么这个打印出“am me eu。”?

1 个答案:

答案 0 :(得分:0)

问题

  1. 第一部分代码可以抛出索引越界异常(或类似)
  2. 第二部分代码也可以抛出类似的异常

第一种情况的示例输入:ZYXWV

    do {
        vystup = vystup + vstup.charAt(i);
        i++;
    } while (vystup.charAt(0) >= vstup.charAt(i)); // i can get invalid

第二种情况的输入示例:ab

  if ((i % 3) == 1) vystup = vystup.concat(vstup.substring(i, i+2)); // i + 2 can be invalid index

第一个是做什么的?

  1. 从第 2 个索引 i = 2
  2. 开始
  3. 将索引处的字符连接到输出并将索引增加 1
  4. 如果当前(递增)索引处的字符小于或等于字符串的第一个字符(0th 索引),则重复步骤 2
  5. 通过>=,比较代码点(字符的数值)

第二个是做什么的?

  1. 从第 2 个字符(1 索引)开始,选择 2 个相邻的字符(第 2 个和第 3 个字符)
  2. 通过将 3 个字符(从第 2 个字符除外)向右移动来重复
str:     M    a    m    a          m    á          e    m    u    .
index:   0    1    2    3     4    5    6     7    8    9   10    11  

i%3==1        i   i+1         i   i+1         i   i+1       i    i+1

希望对你有帮助。

相关问题