使用循环在Java中创建表

时间:2016-03-03 18:38:35

标签: java loops nested-loops

我必须使用循环在Java中创建一个表。它需要在一列中打印1-78,然后每五次打印15-75次(例如15,20,55,... 75)78次(因为循环需要打印出总共78个值;所以循环需要在第二列中迭代6次,然后每三次打印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次。

4 个答案:

答案 0 :(得分: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次,完全停止。然后为每个循环打印变量,根据需要递增和重置它们,然后循环。

答案 1 :(得分:1)

一种可能的解决方案是首先在78 x 4(或4 x 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();
    }
}

答案 2 :(得分:1)

你需要的是在整个循环中构建输入,假设你想要一个像

这样的表
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 :(得分:1)

您可以计算给定数据类型的索引,最大值,因子和偏移量的值。使用此信息,无论您处于哪个索引,都可以生成每一行。

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