【问题标题】:Nested for loops to iterate between two strings嵌套 for 循环在两个字符串之间进行迭代
【发布时间】:2018-11-11 23:19:10
【问题描述】:

我想使用 for 循环遍历每个字符串并逐个输出每个字符。

String a = "apple";
String b = "class";

for (int i = 0;  i < a.length() ; i++) { // - 1 because 0 = 1
    System.out.print(a.charAt(i));
    for (int j = 0; j < b.length(); j ++) {
        System.out.print(b.charAt(j));
    }
}

我正在与内部循环作斗争。

目前我的输出如下:

AClasspClasspClasslClasseClass

但是,我想实现以下目标:

acplpalses

扩展问题:

一个字符串反向输出,一个字符串正常输出如何?

当前尝试:

for (int i = a.length() - 1; i >= 0; i--) {
    System.out.println(a.charAt(i));
    for (int j = 0; j < b.length(); j ++) {
        System.out.println(b.charAt(j));
    }
}

但是,这只是像上面一样输出,只是“Apple”以与之前相同的格式以相反的顺序输出:

eclasslclasspclasspclassaclass

【问题讨论】:

  • 我可以知道为什么您确实更改了已接受的答案,而您接受的答案涵盖了 1 个案例,而我的案例涵盖了 4 个案例,包括实际接受的答案之一? ;)
  • @azro 一定是点击失误 :)

标签: java loops for-loop nested-loops


【解决方案1】:

您不需要 2 个循环,因为您对两个 Strings 采用相同的索引


相同的顺序:

  1. 简单的同尺寸案例

    for (int i = 0; i < a.length(); i++) {
        System.out.print(a.charAt(i));
        System.out.print(b.charAt(i));
    }
    
  2. 复杂不同大小的案例

    int minLength = Math.min(a.length(), b.length());
    for (int i = 0; i < minLength; i++) {
        System.out.print(a.charAt(i));
        System.out.print(b.charAt(i));
    }
    System.out.print(a.substring(minLength)); // prints the remaining if 'a' is longer
    System.out.print(b.substring(minLength)); // prints the remaining if 'b' is longer
    

不同的顺序:

  1. 简单的同尺寸案例

    for (int i = 0; i < a.length(); i++) {
        System.out.print(a.charAt(i));
        System.out.print(b.charAt(b.length() - i - 1));
    }
    
  2. 复杂不同大小的案例

    int minLength = Math.min(a.length(), b.length());
    for (int i = 0; i < minLength; i++) {
        System.out.print(a.charAt(i));
        System.out.print(b.charAt(b.length() - i - 1));
    }
    System.out.print(a.substring(minLength));
    System.out.print(new StringBuilder(b).reverse().substring(minLength));
    

【讨论】:

  • 太棒了!真的很感谢你的时间。谢谢。
  • @LearningToJava 请记住,您有嵌套循环,第二个循环将针对第一个循环的每个值执行,这就是为什么您的结果中有多次class 这个词
  • 好的,谢谢,现在说得通了。
【解决方案2】:

使用 Java 8 流的另一种解决方案:

System.out.println(
    IntStream.range(0, Math.min(a.length(), b.length()))
        .mapToObj(i -> "" + a.charAt(i) + b.charAt(i))
        .collect(Collectors.joining(""))
);

【讨论】:

    【解决方案3】:

    对于扩展问题- 假设两个字符串大小相同

    for (int i = 0; i < a.length(); i++) {
        System.out.print(a.charAt(a.length()-1-i));
        System.out.print(b.charAt(i));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多