我有这个 Java 代码,它将用户的年龄分为 8 组:
private int[] A0, A1, A2, A3, A4, A5, A6, A7, A8;
public Grouping() {
super();
for (int i = 5; i < 10; i++)
A0[i] = i;
for (int i = 10; i < 20; i++)
A1[i] = i;
for (int i = 20; i < 30; i++)
A2[i] = i;
for (int i = 30; i < 40; i++)
A3[i] = i;
for (int i = 40; i < 50; i++)
A4[i] = i;
for (int i = 50; i < 60; i++)
A5[i] = i;
for (int i = 60; i < 70; i++)
A6[i] = i;
for (int i = 70; i < 80; i++)
A7[i] = i;
for (int i = 10; i < 20; i++)
A8[i] = i;
}
现在我想优化这段代码。有什么想法吗?
最佳答案
You've said你想要它“更短”。这是一个较短的版本,除了我不知道你想用A8
做什么,这对A1
来说是多余的,所以已经离开关闭:
private int[][] groups; // I assume you initialize `A0` and so on somewhere you haven't shown; initialize this there
public Grouping() {
int i, groupIndex, group;
super();
groupIndex = 0;
group = groups[0];
for (i = 5; i < 80; ++i) {
if (i % 10 == 0) {
++groupIndex;
group = groups[groupIndex];
}
group[i] = i;
}
}
请注意,这仍然是相当奇怪的代码,因为它执行原始代码的操作,并将数组中的各种条目保留为其默认值 (0
) 。例如,在您的代码中,A0
的索引 0
到 4
永远不会被分配,groups[0 也是如此]
的 0
到 4
也是如此。 (后面的差距更大。)
不过,您的标题表明您希望它更加“高效”。 "performant"!= "shorter"您的代码可能执行很好,可能比我上面的代码好得多,因为它不需要 %
操作和 if
在循环内。
或者这是一个实现 Seelenvirtuose's suggestion 的版本:
private int[][] groups; // I assume you initialize `A0` and so on somewhere you haven't shown; initialize this there
public Grouping() {
int i;
super();
for (i = 5; i < 80; ++i) {
groups[i / 10][i] = i;
}
}
...之所以有效,是因为 i/10
位是整数除法。
关于java - 我如何优化此代码以使其看起来性能更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30680721/