输入和输出
输入
Scanner s = new Scanner(System.in); //声明一个从控制台中读入数据的对象
int x = s.nextInt();
double x = s.nextDouble();
String x = s.next(); //无法读入空格
String x = s.nextLine(); //可以读入空格,遇到换行停止
while(s.hasNext()) { //hasNext() 判断还有没有读入值 相当于while(scanf())
//如果有字符,返回true,否则阻塞
//hasNext()不会返回false
}
s.hasNextInt(); //判断输入是否为int,是则返回,否则阻塞
s.hasNextDouble(); //判断输入是否为double,是则返回,否则阻塞
输出
System.out.println();
System.out.print();
System.out.printf(); //格式化输出
prinf()函数与C++中的prinf相同
print()和println()的区别是println()换行
封装输入和输出
通过重写函数的形式来缩写输入和输出,具体情况如下所示
输入
static int gtInt() {
int x = sc.nextInt();
return x;
}
输出
static void print(int x) {
System.out.print(x);
}
static void println(int x) {
System.out.println(x);
}
快速读写
构造:
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(System.out));
int x = r.read(); //读取一个字符并将其转换为UTF-8的值
eg: 输入123213123,x只能读取到1
String x = r.readLine(); //读取一行的值
String[] x = r.readLine().split(' '); //分割字符形成字符串
需要注意的是 在windows中按一下回车键 一共有两个字符 “\n\r” 而read()只能读取一个字符所以如要要用read来达到吸收回车的目的,需要用两个read(); 如果用readLine()的话会将"\n\r"全部吸收 , 所以只需要一个readLine()来吸收回车
w.write(x);
w.write("\n");
w.flush();
w.write(Integer.toString(x)); //输出int型变量
需要注意的是 write() 不能直接输出int类型, 因为write(int a) 会输出其对应的ASCii码的字符
eg:write(65); => A
由于java是面向对象的语言,所以这里将快读和快写封装成类比较好用一些。
快读类
StreamTokenizer读取字符类型,而BufferedReader读取字符串。这里买呢StreamTokenizer也可以读取字符串,但是不会读取特殊符号和数字,所以我们最好用BufferedReader读取。
static class FastRead {
StreamTokenizer streamTokenizer; //读取数字
BufferedReader bufferedReader; //读取字符串
public FastRead() {
streamTokenizer = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
br = new BufferedReader(new InputStreamReader(System.in));
}
int gtInt() throws IOException {
streamTokenizer.nextToken();
int x = (int) streamTokenizer.nval;
return x;
}
long gtLong() throws IOException {
streamTokenizer.nextToken();
long l = (long) streamTokenizer.nval;
return l;
}
double gtDouble() throws IOException {
streamTokenizer.nextToken();
double x = streamTokenizer.nval;
return x;
}
String gtString() throws IOException {
String s = bufferedReader.readLine();
return s;
}
}
快写类
快速输出这里我们选用的是printWriter。
static class FastWrite {
PrintWriter printWriter;
public FastWrite() {
printWriter = new PrintWriter(new OutputStreamWriter(System.out));
}
void print(int x) {
printWriter.print(x);
}
void print(String sc) {
printWriter.print(sc);
}
void print(double x) {
printWriter.print(x);
}
void println(int x) {
printWriter.println(x);
}
void println(double x) {
printWriter.println(x);
}
}