问题描述
一道很简单的天梯赛初级题:L1-005 考试座位号,真的不建议用java去刷题,最开始提交的时候有两个测试点超时了,于是改用快读快输,结果答案错误。在测试区(我觉得这是PTA平台很不错子的地方)运行测试,好家伙没有输出,但是在自己的Eclipse是输出正确的。
原因分析:
首先还是检查是否有package,是否类名不是Main这些比较基础的。
如下是过了的代码:可以看见我下面连续注释的三行,我发现问题在于Eclipse需要加上re.readLine();才能读取正确的准考证,而在测试案例加上之后会多余。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Main {
static BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer in = new StreamTokenizer(re);
public static int nextInt() {
try {
in.nextToken();
} catch (IOException e) {
e.printStackTrace();
}
return (int) in.nval;
}
public static void main(String[] args) throws IOException {
int times = 0;
times = nextInt();
//re.readLine(); // 把后面的回车吞了
Map<String, String> map = new HashMap<String, String>();
String tmp;
String[] tmps = null;
for (int i = 0; i < times; i++) {
tmp = re.readLine();
tmps = tmp.split(" ");
//System.out.println(tmp);
//System.out.println(Arrays.toString(tmps));
//System.out.println("____________________");
map.put(tmps[1], tmps[0] + " " + tmps[2]);
}
times = nextInt();
PrintWriter pr = new PrintWriter(new OutputStreamWriter(System.out));
int setNo = 0;
for (int i = 0; i < times; i++) {
setNo = nextInt();
pr.println(map.get(String.valueOf(setNo)));
}
pr.flush();
}
}
但是我还是没理解为啥会这个亚子,我的不成熟的猜测,测试案例那里不会没换行符吧(这是个什么道理)?