如何打印四列数据

时间:2014-03-14 23:47:51

标签: java arrays multiple-columns

我有一系列数据,我试图将其放入像...这样的格式

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。

2 个答案:

答案 0 :(得分:2)

我假设你有一个1D数组,你试图组织成列显示。这有时候很棘手,但基本上归结为:

  1. 创建一种将单个元素格式化为固定宽度字符串的方法。
  2. 创建一种方法来确定哪个元素对应于给定的行和列。
  3. 一次输出一行。
  4. 因此,从格式开始,例如(假装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());
    }
    

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

    然后,由于您一次只能打印一行,因此您需要能够在给定行和列编号的情况下确定元素的索引。这要求您能够提前计算行数。所以说你有一个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在屏幕上显式设置输出行和列。但是,这可能不是你所处的情况。

答案 1 :(得分:1)

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]);
    }
}