Leetcode是直接调用我们写一个函数来测试算法,不存在数据的读取问题。牛客是写一个完整的程序, 需要读取题目给出的数据。牛客的数据处理方式:需要接受数据,返回数据。
Scanner类
java语言的输入输出主要是依靠Scanner类。
Scanner类的功能:可以实现键盘输入数据到程序中
- 导包:import java.util.Scanner;【import 包路径.类名称()】
- 创建: Scanner in = new Scanner(System.in); 【类名称 对象名=new 类名称();】
- ps: System.in代表从键盘进行输入
- 使用
对象名.成员方法名();- 获取键盘输入的一个int数字:int n=sc.nextInt();
- 获取键盘输入的一个字符串:String str=sc.next();
具体参考方法如下所示:
import java.util.Scanner;
//注入import也需要自己导入
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a + b);
}
}
}
hasNext() vs hasNextLine() vs hasNextInt()
-
hasNext()
方法会认为之后再没有非空字符,会返回一个false
-
hasNextLine()
方法会认为换行符\n
是一个空行,符合行的匹配模式,则会返回一个true
,但实际上由于之后再没有数据了,所以会在读取输入流的时候发生异常,从而导致整个运行报错. -
hasNext()
方法会判断接下来是否有非空字符.如果有,则返回true
,否则返回false
-
hasNextLine()
方法会根据行匹配模式去判断接下来是否有一行(包括空行),如果有,则返回true
,否则返回false
-
采用
hasNextXxxx()
的话,后面也要用nextXxxx()
:-
比如前面用
hasNextLine()
,那么后面要用nextLine()
来处理输入; -
后面用
nextInt()
方法的话,那么前面要使用hasNext()
方法去判断.
-
输出结果
- **System.out.pirnt(10);**一般输出,同样不能保留精度格式转化,也不能换行输出;
- **System.out.printf(“%.2f”,10.344568);**常用于格式转换,但需要注意不是换行输出,只用于精度转换(保留两位小数)
- **System.out.println();**为换行输出,不能用于格式转换
案例
若输入和输出均为整数:
//按照输入的数字的个数进行计算的
import java.util.Scanner;
//注入import也需要自己导入
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
sc.nextInt();//输出的数据,不需要进行使用
while (in.hasNextInt()) { //判断是否有整数输入
//while (in.hasNext()) { //判断是否有数字输入
int a = in.nextInt();//输入的第一个整数
int b = in.nextInt();//输入第二个整数
if(a<1 ||b>1000) {break;}//判断结束条件
System.out.println(a + b);//输出结果
}
}
}
//按照输入的行进行计算
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String[] s= sc.nextLine().split(" ");//对每行数字进行划分,如1 2 3 4 转换成{"1","2","3","4"}
int sum=0;
for(int i=0;i<s.length;i++){
sum+=Integer.parseInt(s[i]);//将str类型转化为int类型
}
System.out.println(sum);
}
}
}
若输入和输出均为字符串:
import java.util.Scanner;
import java.util.Arrays;
import java.lang.Integer;
public class Main{
public static void main(String[] agrs){
Scanner sc = new Scanner(System.in);
int count = Integer.parseInt(sc.nextLine());
String[] strs = sc.nextLine().split(" ");//对输入的字符进行分割
String[] strs = sc.nextLine().trim().split(" ");//trim() 方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符
Arrays.sort(strs);//按照首字母abcd进行排序
Long a = Long.parseLong(strs[0]);//将字符串转换成数字的方法。
Long b = Long.parseLong(strs[1]);
for (int i = 0; i < count-1; i++){
String res = strs[i] + " ";
System.out.print(res);
}
System.out.printf(strs[count-1]);
}
}