【问题标题】:Can't figure out For Loop无法弄清楚 For 循环
【发布时间】:2018-11-29 19:35:52
【问题描述】:

我最近开始使用java,所以不幸的是我在这方面很糟糕。我有一个关于今天课堂上提出的 for 循环问题的问题,但我无法弄清楚其中的一部分。 我们应该打印出来:

                           __1__   
                           _333_
                           55555

只有 for 循环。

我已经开始编写代码,但不知道如何打印出数字,尽管我知道了空格。

public class Question{
public static void main(String [] args){
    for(int j=1; j<=3;j++){
        for(int i=1; i<=3-j; i++){
        System.out.print(" ");
    }
        for(int k=?; k<=?; k??){
        System.out.print(???);
    }
        for(int m=1; m<=3-j; m++){
        System.out.print(" ");
    }
        System.out.println();
}

问号是我不知道里面有什么的地方。 谢谢。

【问题讨论】:

    标签: java


    【解决方案1】:

    你可以这样做,

    class Main {
        public static void main(String[] args) {
            int i, j, k;
            for (i = 1; i <= 3; i++) {
                for (j = 2; j >= i; j--) {
                    System.out.print("_");
                }
                for (k = 1; k <= (2 * i - 1); k++) {
                    System.out.print(i * 2 - 1);
                }
                for (j = 2; j >= i; j--) {
                    System.out.print("_");
                }
                System.out.println();
            }
        }
    }
    

    第一个 for 循环将在数字前打印_,第二个将打印数字,第三个将在数字后打印_

    【讨论】:

      【解决方案2】:

      j 每增加一次,这些值就会改变 2,这导致公式 1 + (2 * (j - 1)) 可以完成循环。喜欢,

      for (int j = 1; j <= 3; j++) {
          for (int i = 1; i <= 3 - j; i++) {
              System.out.print(" ");
          }
          int n = 1 + (2 * (j - 1));
          for (int k = 1; k <= n; k++) {
              System.out.print(n);
          }
          for (int m = 1; m <= 3 - j; m++) {
              System.out.print(" ");
          }
          System.out.println();
      }
      

      输出

        1  
       333 
      55555
      

      【讨论】:

        【解决方案3】:

        感谢大家的帮助。我想出了答案。

        public class Welcome {
        public static void main(String [] args){
            for(int j=1; j<=3;j++){
                for(int i=1; i<=3-j; i++){
                System.out.print(" ");
            }
                for(int k=1; k<=(2*j-1); k++){
                System.out.print(2*j-1);
            }
                for(int m=1; m<=3-j; m++){
                System.out.print(" ");
            }
                System.out.println();
            }
        }
        

        }

        【讨论】:

          【解决方案4】:

          也可以如下实现

          public class ForLoopPrinter {
              public static void main(String[] args) {
                  int number = 1;
                  int row = 3;
                  int column = 5;
                  char space = '_';
                  for(int i = 1; i <= row; i++){
                          for(int j = 1; j <=column;j++){
                                  int offset = (column - number)/2;
                                  if( j <= offset ||
                                          j > (number + offset)){
                                          System.out.print(space);
                                  }else{
                                          System.out.print(number);
                                  }
                          }
                          System.out.println();
                          number += 2;
                  }
              }
          }
          

          这里的 For 循环数限制为 2 个(一个用于行,一个用于列)。

          逻辑是这样的 -

          1. 偏移量为您提供要在数字两侧打印的空格数。
          2. 首先 if 条件检查 j(位置)是否低于或高于偏移量,如果为 true,则打印下划线,如果为 false,则打印数字

          我知道这个问题已经给出了正确的答案,它会像魅力一样发挥作用。我只是尝试通过减少之前提供的答案中的 For 循环数量来优化代码。减少 For 循环将提高性能。

          除了减少 For 循环之外,此代码还有以下优点 - 此代码更具可扩展性。只需将行、列值(例如 5,9)或空格字符更改为“*”并检查输出。你可以玩它。

          我建议您使用@Sand 给出的答案来理解 For 循环,然后检查这个答案以了解如何优化它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-08-30
            • 1970-01-01
            • 2013-10-07
            • 2023-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多