【发布时间】:2017-09-09 19:00:37
【问题描述】:
此程序在我的设备上运行时间为 0.099 秒。我想在 0.01 秒内运行它。如何做到这一点。它可能与读写流有关。这个程序基本上是接受一个字符串,并在方法calc中对字符串的字符一个一个地进行一些操作,并返回一些int值。你真的不需要理解代码。如果有任何优化必须发生在 i/o 流或方法内部。我想不出任何其他需要进行这种优化的地方。
import java.io.*;
import java.util.*;
class ride{
static int calc(String s){
char[] d=new char[s.length()];
s.getChars(0,s.length(),d,0);
int sum=1;
for(char c:d){
sum*=(c-'A'+1);
}
return sum%47;
}
public static void main(String args[]){
try{
BufferedReader br=new BufferedReader(new FileReader("ride.in"));
FileWriter fw=new FileWriter("ride.out");
String s;
while((s=br.readLine())!=null){
if(calc(s)==calc(br.readLine())){
fw.write("GO\n");
}
else
fw.write("STAY\n");
}
fw.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
【问题讨论】:
-
总和还是积? sum*= or sum+= 另外请修正格式
-
显然,您的重点应该放在可读性、可维护性和健壮性上。不在性能上。您的代码没有缩进,不尊重 Java 命名约定,使用晦涩的单字母变量名,并且不关闭其文件流。一个快速但无法维护的错误程序是没有用的。还不清楚您如何衡量运行它所花费的时间。我的猜测是大部分时间都花在启动 JVM 上。
-
如果您正确缩进程序,它们会运行得更快。 (好吧......这是一个谎言......但无论如何在你要求别人阅读它之前正确缩进你的代码。)
-
我的直觉是 JB Nizet 是对的。此外,我的直觉是,如果您希望程序在 0.01 秒内启动/运行/完成,您需要用一种可以编译为本地二进制文件的语言编写它。这排除了 Java。
-
@StephenC ... 除非您将 Java 编译为本机二进制文件(excelsiorjet.com;iOS 上的代号)。但它仍然可能比要求的要慢。
标签: java optimization file-io