OJ平台(牛客等)中Java的输入方法
之前做题主要是在leetcode里做的,在leetcode平台,做题的时候只需要完成所给的函数,使用时,输入为函数输入的形参,输出为程序的返回值。而在牛客网上的题目,包括一些竞赛时的题目,型式为输入的是从控制台键入的几行数据,而输出是直接将结果打印到控制台,因此,这里将所遇到的输入的格式即对应的代码放在这里。
基本格式及所需的库
在Java5中引入了Scanner
库,这个库在日常使用中是非常方便的,可以直接将输入按照格式读取,但是,在牛客上经过笔者的测试,效率要比BufferedReader
差很多,因此,在做题时推荐还是用BufferedReader
和InputStreamReader
来使用。
在这些平台,一般要求主类名为Main,然后将方法写到main()
方法中,因此,我们的类大概是类似如下的格式:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
......
}
}
有一点要注意的是,由于在IO时所用的方法往往是有声明必检异常的,所以这里如果不想在代码中加入try-catch块的话,main()
方法也要声明抛出’IOException`异常。
输入为一个字符串时
若输入为一个字符串,如:
abcd
相应的读取输入代码:
// 创建一个BufferedReader对象
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 读取字符串
String line = br.readLine();
// 测试输入是否正确
System.out.println(line);
若输入为多个数字
若输入为多个数字,如下:
1 2
这个例子中有两个数字,则代码为:
// 创建一个BufferedReader对象
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 读取第一行数据
String line = br.readLine();
// 将字符串根据空格进行分隔
String[] strings = line.trim().split(" ");
// 分别将其中的每个数值读出
int n = Integer.parseInt(strings[0]);
int v = Integer.parseInt(strings[1]);
// 测试输入是否正确
System.out.println("n: " + n + "\tv: " + v);
若输入中有一个数组,且有数组的长度
一种常见的输入方式为,给出数行数据,其中一行为数组,而在前面某一行中,会有一个数据为其数组的位数。如:
7 6
1 2 3 4 5 6 7
其中第二行为一个数组,第一行的第一个数字表示第二行数组的长度,则读取输入的代码为:
// 创建一个BufferedReader对象
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 读取第一行数据
String line = br.readLine();
// 将字符串根据空格进行分隔
String[] strings = line.trim().split(" ");
// 分别将其中的每个数值读出
int n = Integer.parseInt(strings[0]);
int v = Integer.parseInt(strings[1]);
// 读取第二行数据
line = br.readLine();
strings = line.trim().split(" ");
// 创建一个int型的数组用来储存第二行的多个数字
int[] nums = new int[n];
for (int i = 0; i < n; i ++) {
nums[i] = Integer.parseInt(strings[i]);
}
// 测试输入是否正确
for (int num: nums) {
System.out.print(num + " ");
}