我有一系列数据,我试图将其放入像...这样的格式
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。
答案 0 :(得分:2)
我假设你有一个1D数组,你试图组织成列显示。这有时候很棘手,但基本上归结为:
因此,从格式开始,例如(假装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]);
}
}