可以通过牛客相关OJ活动进行练习,链接:https://ac.nowcoder.com/acm/contest/5652#question
方法一:Scanner
1. 输入模块:
方法1:
Scanner sc = new Scanner (new BufferedInputStream(System.in));
方法2:
Scanner sc = new Scanner (System.in);
在读入数据量大的情况下,方法1的速度会快些。
2. 判别模块
判断是否有下一个输入可以用sc.hasNext()
或sc.hasNextInt()
或sc.hasNextDouble()
或sc.hasNextLine()
3.读取模块
读一个整数:
int num= sc.nextInt();
读一个字符串:
String str= sc.next();
读一个浮点数:
double dou= sc.nextDouble();
读一整行:
String lin= sc.nextLine();
代码模板
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args)throws Exception{
//输入模块
Scanner sc=new Scanner(new BufferedInputStream(System.in));
int a=0,...;
//判别模块
while(sc.hasNext()){
//读取模块
a=sc.nextInt();
...
//上面根据需求修改读取模块代码
System.out.println(输出结果);//该处是为了防止整数整数越界设置的,可以根据需求更改输出
}
}
tips:
hasNext():读取下一个目标,判断它是否存在
这里括号里可以添加终止条件字符/字符串,变成 while(!sc.hasnext("终止字符串"))
格式,遇到终止字符实现跳出循环
nextxxx(): 读取当前输入中的指定格式目标
方法二:BufferedReader
1.输入模块
BufferedReader bu=new BufferedReader(new InputStreamReader(System.in));
2.判别模块
遇到空输入就直接跳出读取循环(这里str声明什么的到后面模板会看到)
(str=bu.readLine())!=null
3. 读取模块
针对一行多个数据的情况下,这里首先必须添加split方法对数据进行分割。
String[] tmp=str.split("分割符");
或者
bu.readLine().split("分割符");
生成的格式是字符串数组的格式,这里就按照数组读取的格式将数组转化成自己想要的格式
基本类型 变量名=包装类.parsexxx;//这里自行查找,因为暂时没找到比较全的总结素材····
代码模板:
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
//输入模块
BufferedReader bu=new BufferedReader(new InputStreamReader(System.in));
String str;
//判别模块
while((str=bu.readLine())!=null){
//终止模块
if(str.equals("终止字符串")) break;
//分割模块
String[] tmp=str.split("分割字符串");
//读取模块,下面以整数数组为例
int l=Integer.parseInt(tmp[0]);
System.out.println(l);
}
}
}