int[][] graph = new int[1000][1000];
for (int i = 0; i < graph.length; i++) {
for (int j = 0; j < graph.length; j++) {
System.out.print(new Point(i, j));
}
System.out.println();
}
public class Point {
private final double x;
private final double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
@Override
public String toString() {
return ("(" + x + ", " + y + ")");
我可以获取代码以打印出1000 x 1000的网格点,但是我希望程序可以在不浪费运行时间的情况下打印出网格。
答案 0 :(得分:0)
如以上评论中的John Bollinger所述,“ I / O是您可以要求计算机执行的最慢的操作之一。”
因为您的目标是将网格打印到控制台,所以我建议构建一个包含网格的String
,然后进行打印(而不是顺序打印每个元素)。
您更新的代码如下所示:
int[][] graph = new int[1_000][1_000];
StringBuilder sb = new StringBuilder(1_000_000);
for (int i = 0; i < graph.length; i++) {
for (int j = 0; j < graph.length; j++) {
sb.append(new Point(i, j));
}
sb.append('\n');
}
System.out.println(sb);
如果没有适当地进行基准测试,它平均仍需不到400毫秒才能完成,而您的旧代码在不到4秒的时间内就为我完成了。
答案 1 :(得分:0)
我认为代码中还有另一个问题:
在第二个for循环中,您将访问图的第一列的长度。这将导致如果您使用具有不同大小的列和行的代码,则输出仍将具有相同大小的行和列。可以通过在第二个for循环中访问graph[i].length
来解决此问题。