代码为什么在本地编译器正常输出但在PTA编译器上无输出但也不报错?快读模板处理换行符

博主分享了一次在PTA平台进行编程题练习时遇到的问题,题目为L1-005考试座位号。最初使用Java编程时,由于输入输出处理方式导致测试点超时,后改为快读快输但出现答案错误。经过调试发现,Eclipse中需要特定的`re.readLine()`来正确读取数据,但在测试案例中这会导致多余的输出。博主对于为何出现这种现象感到困惑,并推测可能与测试案例的换行符有关。
摘要由CSDN通过智能技术生成

问题描述

一道很简单的天梯赛初级题: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();
	}
}

在这里插入图片描述
在这里插入图片描述


但是我还是没理解为啥会这个亚子,我的不成熟的猜测,测试案例那里不会没换行符吧(这是个什么道理)?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值