Java提供两种方式进行键盘的输入, BufferedReader 和 Scanner
一.用BufferedReader进行输入
提供的方法有:
- readLine(); // 以enter为结束标志,读取一行数据,返回一个字符串,
注意点1:导入三个包(也可以直接import .*; 美滋滋)
import ; import ; import ;
注意点2:main方法要手动抛出IO异常
throws IOException
1. 输入字符串
import ;
import ;
import ;
public class Main{
//1.输入字符串
public static void main(String[] args) throws IOException {
//获取键盘一行的输入,以enter键为结束标志
BufferedReader reader = new BufferedReader(new InputStreamReader());
String s = ();
//s是最终得到的输入字符串
}
}
补充:如果不知道输入有多少行,需要加一条判断语句
String str;
while(!(str = ()).equals("")){
//如果不为空,才进行下述操作
......
}
2.输入数字或数组
import ;
import ;
import ;
public class Main{
//2.输入数字或数组
public static void main(String[] args) throws IOException {
//获取键盘一行的输入,以enter键为结束标志
BufferedReader reader = new BufferedReader(new InputStreamReader());
String[] s = ().split(" "); //用空格分割,也可以用逗号分割
//转化为int数组
int[] arr = new int[];
for(int i = 0; i < ; i++){
arr[i] = (s[i]);
}
//arr是最终得到的int型数组
}
}
3.输入单链表
import ;
import ;
import ;
public class Main{
//3.输入链表
public static void main(String[] args) throws IOException {
//获取键盘一行的输入,以enter键为结束标志
BufferedReader reader = new BufferedReader(new InputStreamReader());
String[] s = ().split(" "); //用空格分割,也可以用逗号分割
//创建链表,并赋值
LinkNode head = new LinkNode(0);
LinkNode index = head;
for(int i = 0; i < ; i++){
int val_i = (s[i]);
= new LinkNode(val_i);
index = ;
}
= null;
head = ;
//head是最终得到的链表头节点
}
//辅助类:构建一个节点类,用于链表构建
static class LinkNode {
int val;
LinkNode next;
public LinkNode(int val){
= val;
}
}
}
4.输入二叉树
import ;
import ;
import ;
public class Main{
//4.输入二叉树
public static void main(String[] args) throws IOException {
//获取键盘一行的输入,以enter键为结束标志
BufferedReader reader = new BufferedReader(new InputStreamReader());
String[] s = ().split(" "); //用空格分割,也可以用逗号分割
//用数组按层级遍历顺序存储二叉树的节点
TreeNode[] tree = new TreeNode[];
for(int i = 0; i < ; i++){
int val_i = (s[i]);
if(val_i == -1){
tree[i] = null; //-1代表null
}else{
tree[i] = new TreeNode(val_i);
}
}
//再遍历一边,给左右子树赋值
for(int i = 0; i * 2 + 2 < ; i++){
if(tree[i] != null){
tree[i].left = tree[i * 2 + 1];
tree[i].right = tree[i * 2 + 2];
}
}
TreeNode root = tree[0];
//root是最终得到的二叉树根节点
}
//辅助类:构造树需要的结点类
static class TreeNode {
int val;
TreeNode left, right;
public TreeNode(int val) {
= val;
}
}
}
二.用Scanner进行输入
提供的方法有:
- next(): // 读取一个字符串;
- nextInt(): // 将读取的字符串转换成int类型的整数;
- nextFloat(): // 将读取的字符串转换成float型;
- nextBoolean(): //将读取的字符串转换成boolean型;
- nextLine(): // 读取一整行数据,返回字符串
1.输入数字
import ;
public class Main{
//1.输入数字
public static void main(String[] args) {
//获取键盘的单个字节输入,以空格,enter,tab为结束标志
Scanner scanner = new Scanner();
int a = ();
int b = ();
//求两数之和
int sum = a + b;
//输出
(sum);
}
}
补充:如果不知道输入有多少行,需要加一条判断语句
import ;
public class Main{
//1.输入数字
public static void main(String[] args) {
//获取键盘的单个字节输入,以空格,enter,tab为结束标志
Scanner scanner = new Scanner();
while(()){
int a = ();
//输出
(a);
}
}
}
其他方法同上,可以自行实现......
总结:
根据观察,笔试过程中用Scanner方式处理输入的人相对比较多,所以就推荐大家优先使用Scanner吧。