我试图解决这个problem下面Java代码:我可以做些什么来提高Java代码的性能?
Scanner scanner = new Scanner(System.in);
int testNum = scanner.nextInt();
StringBuilder sb = new StringBuilder();
double x;
double y;
int year;
for(int i = 0; i < testNum; i++) {
x = scanner.nextDouble();
y = scanner.nextDouble();
year = (int)((x * x + y * y) * Math.PI/100);
sb.append("Property ").append(i+1).append(": This property will begin eroding in year ");
if(year * 100/Math.PI < x * x + y * y)
sb.append(year+1);
else
sb.append(year);
System.out.println(sb.append('.'));
sb.delete(0, sb.length());
}
System.out.println("END OF OUTPUT.");
在判断我的节目,我觉得它的成本3164K内存和125MS的时间,同时也有许多其他的用户,其提交被接受,而且只花了约92K内存和15MS时间。这比我的结果好得多,那么有没有更好的方法来解决这个问题?
我认为for循环是处理器上最难的。不知道它是否会做任何事情,但也许它成为一个while循环? 'while(scanner.hasNext())'也许? –
我认为他们做一些形式的IO优化,这是不值得你的时间。您可能想尝试不使用扫描仪,但可以使用BufferReader + StringTokenizer + Double.parseDouble()。你也可以尝试读取输入到char []并进行解析,并通过在char []上进行工作来打印整数。但我保证,你花时间进行这种优化并不会帮助你在竞争性节目中获得更好的表现。 – nhahtdh
你的if语句似乎在检查'(x * x + y * y)>(x * x + y * y)'。去掉它?另外,使用StringBuilder附加并不断清除它,或者为每次迭代重新分配一个字符串的值会更快吗? – acattle