【问题标题】:Making a table in Java using loops使用循环在 Java 中制作表格
【发布时间】:2016-03-03 18:38:34
【问题描述】:

我必须使用循环在 Java 中创建一个表。它需要在一列中打印出 1-78,然后每五次打印 15-75(例如 15、20、55、... 75)78 次(因为循环需要打印出总共 78 个值;所以循环需要迭代 6 次)在第二列中,然后每 3 次打印出 15-30(例如 15、18、21、24、...30)78 次(因为循环需要打印出总共 78值;因此循环需要迭代 13 次),在第三列中,然后是第四列中的数字 4。 这是我目前所拥有的:

import java.util.Scanner;
public class Sandbox {


    public static void main(String[] args) { //main method
        int angles = 10; 
        double  cosines =4;
        int meters =12;
        for (int i =1; i<=78;i++){
            System.out.println(i);
        }
        for (int j = 1; j <=6; j++) {
            for (angles =10 ;angles<75;) {
                angles +=5;
                for (meters=12; meters <30;) {
                    meters +=3;
                    int num1= 4;
                    System.out.print( ")" +angles + "|"+ meters) +4);
                }
            }
        }

这会输出正确的值,但会以 1-78 然后米 = 30 然后是 15-75 的值 78 次的方式打印它们。

【问题讨论】:

  • 我认为您最大的挑战不是算法本身难以实现,而是难以追踪,尤其是在意外输出期间。我会强烈建议将最嵌套的循环放入方法/函数中,例如 FifteenToSeventyFive(); 在 5 次 for 循环中。

标签: java loops nested-loops


【解决方案1】:

我认为这可以满足您的要求:

public static void main(String[] args) { //main method
    int angles = 15;
    double  cosines =4;
    int meters =15;
    for (int i =1; i<=78;i++){
        System.out.print(i);
        System.out.print('|');
        System.out.print(angles);
        angles+=5;
        if (angles>75){
            angles=15;
        }
        System.out.print('|');
        System.out.print(meters);
        meters+=3;
        if (meters>30){
            meters=15;
        }
        System.out.println("|4|");
    }

}

您对所有循环数感到困惑,问题是您需要生成 78 行,而您需要循环 78 次,句号。然后为每个循环打印变量,根据需要递增和重置它们,然后循环返回。

【讨论】:

    【解决方案2】:

    您需要在整个循环中构建输入,假设您想要一个类似的表格

    1 | 15 20 25 30 ... 75 | 15 18 21 ... 30 | 4
    2 | 15 20 25 30 ... 75 | 15 18 21 ... 30 | 4
    ....
    

    为了构建它,您需要嵌套循环和输出。只要你让循环简单,它就可以很简单。

    for (int i = 1; i <= 78; i++)
    {
        System.out.print(i + " | ");
    
        for (int j = 15; j <=75; j += 5)
            System.out.print(j + " ");
    
        System.out.print("| ");
    
        for (int k = 15; k <= 30; k += 3)
            System.out.print(k + " ");
    
        System.out.print("| 4 |");
    
        System.out.println("");
    }
    

    正如 Kira Yakuza 在 comments 中提到的那样,您最好将其划分为方法。

    请注意,您的问题在示例输出中有些不清楚,这就是我解释您所写内容的方式。如果您想要不同的输出,您应该编辑您的问题以澄清。

    【讨论】:

      【解决方案3】:

      一种可能的解决方案是首先在 78×4(或 4×78)数组中构建整个输出,然后在两个嵌套循环中将其全部打印出来。如果这对您来说更容易或感觉更自然。这样你就可以在你的原始程序中重用这个想法和大部分代码。

      public static void main(String[] args) {
          int[][] table = new int[4][78];
      
          // generate table
          int angles = 10;
          double cosines = 4;
          int meters = 12;
          int line = 0;
          for (int i = 1; i <= 78; i++) {
              table[0][line] = i;
              line++;
          }
          line = 0;
          for (int j = 1; j <= 6; j++)
              for (angles = 10; angles < 75;) {
      
                  angles += 5;
                  table[1][line] = angles;
                  line++;
              }
          line = 0;
          for (int j = 1; j <= 13; j++)
              for (meters = 12; meters < 30;) {
                  meters += 3;
                  table[2][line] = meters;
                  table[3][line] = 4;
                  line++;
              }
      
          // print table
          for (line = 0; line < 78; line++) {
              System.out.print(table[0][line]);
              for (int column = 1; column < 4; column++) {
                  System.out.print("|" + table[column][line]);
              }
              System.out.println();
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以计算给定数据类型的索引、最大值、因子和偏移量的值。有了这些信息,您就可以生成每一行,无论您在哪个索引。

        TablePrinter.java

        public class TablePrinter {
            public static interface RowPrinter {
                String print(int rowIndex, int dataIndex, Object[][] data);
            }
        
            public static void main(String[] args) {
                // { label, max, factor, offset }
                Object[][] data = {
                    { "angles", 75, 5, 10 },
                    { "meters", 30, 3, 12 }
                };
        
                printTable(data, new RowPrinter() {
                    @Override
                    public String print(int rowIndex, int dataIndex, Object[][] data) {
                        int max = (int) data[dataIndex][1];
                        int factor = (int) data[dataIndex][2];
                        int offset = (int) data[dataIndex][3];
                        return String.format(" | %8d", calculate(rowIndex, max, factor, offset));
                    }
                });
            }
        
            public static void printTable(Object[][] data, RowPrinter rowPrinter) {
                // Print headers
                System.out.printf("%8s", "index");
                for (int i = 0; i < data.length; i++) {
                    System.out.printf(" | %8s", data[i][0]);
                }
                System.out.println();
        
                // Print data rows
                for (int i = 0; i < 75; i++) {
                    System.out.printf("%8d", i + 1);
                    for (int j = 0; j < data.length; j++) {
                        System.out.printf(rowPrinter.print(i, j, data));
                    }
                    System.out.println();
                }
            }
        
            public static int calculate(int index, int max, int factor, int offset) {       
                return ((index * factor) % (max - offset + factor)) + offset;
            }
        }
        

        结果

           index |   angles |   meters
               1 |       10 |       12
               2 |       15 |       15
               3 |       20 |       18
               4 |       25 |       21
               5 |       30 |       24
               6 |       35 |       27
               7 |       40 |       30
               8 |       45 |       12
               9 |       50 |       15
              10 |       55 |       18
              11 |       60 |       21
              12 |       65 |       24
              13 |       70 |       27
              14 |       75 |       30
              15 |       10 |       12
              16 |       15 |       15
              17 |       20 |       18
              18 |       25 |       21
              19 |       30 |       24
              20 |       35 |       27
              21 |       40 |       30
              22 |       45 |       12
              23 |       50 |       15
              24 |       55 |       18
              25 |       60 |       21
              26 |       65 |       24
              27 |       70 |       27
              28 |       75 |       30
              29 |       10 |       12
              30 |       15 |       15
              31 |       20 |       18
              32 |       25 |       21
              33 |       30 |       24
              34 |       35 |       27
              35 |       40 |       30
              36 |       45 |       12
              37 |       50 |       15
              38 |       55 |       18
              39 |       60 |       21
              40 |       65 |       24
              41 |       70 |       27
              42 |       75 |       30
              43 |       10 |       12
              44 |       15 |       15
              45 |       20 |       18
              46 |       25 |       21
              47 |       30 |       24
              48 |       35 |       27
              49 |       40 |       30
              50 |       45 |       12
              51 |       50 |       15
              52 |       55 |       18
              53 |       60 |       21
              54 |       65 |       24
              55 |       70 |       27
              56 |       75 |       30
              57 |       10 |       12
              58 |       15 |       15
              59 |       20 |       18
              60 |       25 |       21
              61 |       30 |       24
              62 |       35 |       27
              63 |       40 |       30
              64 |       45 |       12
              65 |       50 |       15
              66 |       55 |       18
              67 |       60 |       21
              68 |       65 |       24
              69 |       70 |       27
              70 |       75 |       30
              71 |       10 |       12
              72 |       15 |       15
              73 |       20 |       18
              74 |       25 |       21
              75 |       30 |       24
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-15
          • 1970-01-01
          • 1970-01-01
          • 2022-11-11
          相关资源
          最近更新 更多