【问题标题】:How to Print Four Columns of Data如何打印四列数据
【发布时间】:2014-03-14 23:47:51
【问题描述】:

我有一个数据数组,我正试图将它们转换成某种格式,例如...

Frequencies:
 1 (221)-   12 (229)+   23 (230)+   34 (223)-   
 2 (229)+   13 (235)+   24 (236)+   35 (237)+   
 3 (217)-   14 (225)-   25 (241)+   36 (238)+   
 4 (201)-   15 (223)-   26 (251)+   37 (233)+   
 5 (228)-   16 (238)+   27 (244)+   38 (219)-   
 6 (235)+   17 (232)+   28 (224)-   39 (234)+   
 7 (229)+   18 (240)+   29 (231)+   40 (229)+   
 8 (227)-   19 (217)-   30 (225)-   41 (263)+   
 9 (200)-   20 (198)-   31 (230)+   42 (221)-   
10 (211)-   21 (252)+   32 (226)-   43 (243)+   
11 (221)-   22 (228)-   33 (215)-   44 (227)-

我想不通的是我如何向下 11,然后转到新列,向下 11,等等?谢谢你的时间,哦,这是java。

【问题讨论】:

    标签: java arrays multiple-columns


    【解决方案1】:

    我假设您有一个一维数组,您正在尝试将其组织成列以进行显示。这有时会很棘手,但基本上可以归结为:

    1. 创建一种将单个元素格式化为固定宽度字符串的方法。
    2. 创建一种方法来确定哪个元素对应于给定的行和列。
    3. 一次输出一行。

    因此,从格式开始,例如(假装 Element 是您要打印的内容):

    class Element {
        // obviously i don't know what you're data format is; these
        // are just for illustrative purposes.
        int getIndex ();
        int getValue ();
        char getSign ();
    }
    
    void printElement (PrintWriter out, Element e) {
        // column width is 2+1+3+1+1 = 8
        out.printf("%2d(%3d)%c", e.getIndex(), e.getValue(), e.getSign());
    }
    

    有关可以指定给PrintWriter.printf 的格式字符串的更多信息,请参阅Format String Syntax

    然后,由于您一次只能打印一行,因此您需要能够确定给定行号和列号的元素的索引。这要求您能够提前计算行数。所以说你有一个ArrayList<Element> elems

    int rows = elems.size() / 4; 
    

    现在你输出每一行,一次一个,使用rows作为一行中相邻元素之间的偏移量:

    PrintWriter out = System.out; // or whatever
    
    for (int r = 0; r < rows; ++ r) {
       for (int c = 0; c < 4; ++ c) {
          int index = c * rows + r; 
          if (index < elems.size()) { 
              printElement(out, elems.get(index)); // print data
              out.print("  "); // column spacer
          }
       }
       out.println(); // line ending after each row
    }
    

    旁注:当然,在(现在很少见)您唯一的输出是到正确终端的情况下,您也可以使用例如curses 在屏幕上显式设置输出行和列。但是,您可能不是这种情况。

    【讨论】:

      【解决方案2】:
      public void genStats(int[] array)
      {
          int mod = array.length / 4;
      
          for(int i = 0; i < mod; i++)
          {
              System.out.println(array[i] + " " + array[i + mod*1]
                      + " " + array[i + mod*2] + " " + array[i + mod*3]);
          }
      }
      

      【讨论】:

      • 如果array.length 不是4 的倍数,这将在最后一行抛出ArrayIndexOutOfBoundsException。此外,在您的示例int[] 的情况下,它不能保证固定宽度的列(例如打印11000)。
      猜你喜欢
      • 2022-11-03
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 2012-09-14
      • 1970-01-01
      相关资源
      最近更新 更多