牛客网笔试输入输出总结:
https://blog.csdn.net/weixin_43431182/article/details/108423023?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
1.对于那种只需要写一个方法的题目,只要注意方法中参数的类型和返回值类型即可
2.对于需要自己考虑输入和输出的题目,自己主要遇到过以下几种情况,并自己尝试了进行读取:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.nextInt()){
//读入一组数据
//处理
//输出
}
}
}
while用来读入多组(一组一般为一行)数据,要读多组(行)时套上while,只用读单组则不套。
- 读入确定个数的一组输入(用nextInt(),读入int变量。)
使用nextInt(),一行有几个数就用几次
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int a=in.nextInt();
int b=in.nextInt();
System.out.println(a+b);
}
}
}
- 读入未知个数的一组输入(用nextLine(),读入一维数组。)
使用nextLine(),存入String[ ], 再用int = Integer.parseInt( string )把String[ ]中每一个string转化为int
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//读入字符串数组
String[] temp = sc.nextLine().split(" ");
//字符串数组转整数数组
int[] arr = new int[temp.length];
for (int i = 0; i < arr.length; i++){
arr[i] = Integer.parseInt(temp[i]);
}
//打印整数数组
System.out.println(Arrays.toString(arr));
//打印数组中的每一个元素,用逗号隔开
for (int i: arr) {
System.out.print(i + ",");
}
//下标法打印数组中的每一个元素,用逗号隔开
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ", ");
}
}
}
- 读入一个数据的行数N,再读入这N行数据(双层循环。用nextLine()读入每一行。读入二维数组)。我们知道每行几个数。
import java.util.Scanner;
//不套while处理一组数据:
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int c = Integer.parseInt(sc.nextLine()); //读入N
String[][] steps = new String[c][3]; //假设每行3个数
for (int i = 0; i < c; i++){
String[] temp = sc.nextLine().split(" ");
for (int j = 0; j < 3; j++){
steps[i][j] = temp[j];
}
}
}
}
//套上while处理多组数据:
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int c = Integer.parseInt(sc.nextLine());
String[][] steps = new String[c][3];
for (int i = 0; i < c; i++) {
String[] temp = sc.nextLine().split(" ");
for (int j = 0; j < 3; j++) {
steps[i][j] = temp[j];
}
}
//打印二维数组
for (int i = 0; i < steps.length; ++i){
for (int j = 0; j < steps[0].length; ++j) {
System.out.print(steps[i][j] + " ");
}
System.out.println();
}
}
}
}
//输入输出样例
input1:
1
12 3 45
output1:
12 3 45
input2:
2
3 2 1
1 2 3
output2:
3 2 1
1 2 3
Integer.parseInt(s)与Integer.valueOf(s)的区别详解:
https://blog.csdn.net/u010502101/article/details/79162587
牛客网输入输出练习场:
https://ac.nowcoder.com/acm/contest/5647
Note:
排序List<>: Collections.sort(list)
排序array:Arrays.sort(arr)
因为sc.nextInt()方法只读取空白符前面的值,会把空白符继续留在缓存区,而sc.nextLine()会把空白符也读取并清除,所以每次用完sc.nextInt()方法最好在后面加个sc.nextLine(),但最好舍弃这个方法,每行都采用sc.nextLine()方法读取。【在这里两个方法混用,提交代码的时候很容易经常出现数组越界的问题】