【问题标题】:Nested loop pattern嵌套循环模式
【发布时间】:2016-11-30 04:41:07
【问题描述】:

如果我有 n 个数字,最大数字是 6,最大字母是 F,那么最好的方法是什么。

A1 
A2
A3
A4
A5 
A6 
B1
B2 
etc..

int numList = 36; 

         char letter;

        for (int i=1; i<=36; ++i){
            int a = numList/6;
            letter = 'A';
          for (int j=0; j<= a; j++){
            System.out.println(letter +"" + i);
            letter++;
          } 
    }

【问题讨论】:

  • 你和它有什么关系?
  • 最好的方法是just do it。
  • @Gendarme 歇斯底里 +1
  • @Gendarme Great +1

标签: java while-loop nested-loops


【解决方案1】:

简而言之:

public static void main(String[] args) {
        for (int i = 0; i < 6; i++) {
            char c = (char) (i + 65);
            for (int j = 1; j <= 6; j++) {
                System.out.println("" + c + j);
            }
        }
    }

长期:

你应该练习解决问题的技巧。理解这些小问题将极大地支持你的编程生涯。

解决问题最重要的技巧就是分解小问题。首先,您看到输出是:A1 A2 A3 ... B1 B2 B3 .. 看起来您可以将每个字符串(即:A1)分成两部分:第一部分从 A 到 F,第二部分从 1 到 6。这就是井- 应用两个嵌套循环的已知模式。这是伪代码:

public static void main(String[] args) {
    for (char c = A to F) {
        for (int j = 1; j <= 6; j++) {
            System.out.println("" + c + j);
        }
    }
}

你看到了。第一个循环不正确(语法)。所以我们应该学习新东西:Java 中的 char 只是一个整数。 (这在大多数语言中都是如此,例如 C#、javascript ...)但不是全部。所以我在这里查找ascii table。我看到 A 到 F 从 65、66、67 开始......所以我可以用 6 个元素开始循环。每个元素我加成65。例如:

0 -> 65 -> A
1 -> 66 -> B
2 -> 67 -> C

如你所料,它成为我在上面发布的最终代码。希望这对你有帮助:)

【讨论】:

  • 请查看我的更新答案。我认为这将帮助您提高思维能力。
【解决方案2】:

像这样更改您的代码:

int numList = 36 / 6;
    char letter = 'A';
    for (int i = 1; i <= numList; ++i) {
        for (int j = 1; j <= numList; j++) {
            System.out.println(letter + "" + j);
        }
        letter++;
    }

【讨论】:

    【解决方案3】:

    这将是代码:

        int[] array_of_ints; // declare and add the values into it - 1-6
        String[] array_of_alphabtes; // declare and add the values into it - A-F
    
        for (int i = 0; i < array_of_alphabtes.length; i++) {
            for (int j = 0; j < array_of_ints.length; j++) {
                System.out.println(array_of_alphabtes[i] + "" + array_of_ints[j]);
            }
        }
    

    【讨论】:

    • 我喜欢这个答案,因为它明确了用于构造 OP 想要的每个“数字”的内容。
    【解决方案4】:

    当您有一个嵌套循环时,整个内循环以及外循环主体的其余部分都会在每次外循环运行时运行。

    这里,每次运行内部for,内部循环的主体都会执行6次,也就是打印6行。

    所以你写的方式是:外循环执行 36 次,每次外循环运行,内循环执行 6 次。这意味着内部循环总共执行了 36*6 = 216 次,导致打印 216 行。那不是你想要的。您希望外部循环仅运行 6 次,因此您的第一个 for 需要更改。

    嵌套循环的另一个特点:内循环的重复速度比外循环快。因此,在您的情况下,当外部循环的第一次迭代运行时,内部循环执行 6 次。 然后我们进入外循环的下一次迭代,内循环再执行6次;只有然后我们第三次执行外循环,以此类推。

    根据您想要的输出,您希望数字的变化比字母快。这意味着数字需要在内循环中增加 1,而字母需要在外循环中增加。不过,你是在倒着做——你在增加内循环中的字母,增加外循环中的数字 (i)。

    我不想给你代码——我希望我已经给你足够的信息,你可以自己修复它。请在查看其他人给您的代码之前尝试这样做。

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多