输入篇
第一种方法:Scanner
Scanner cin=new Scanner(System.in);
int a=cin.nextInt();
float b=cin.nextFloat();
double c=cin.nextDouble();
String str1=cin.next();//String类型,遇到空格结束
String str2=cin.nextLine();//String类型,读取一行数据,遇到换行结束。类似gets
while(cin.hasNext()){
}// 可用此语句循环输入
cin.close();
此种方法在做算法题时不太推荐,因为速度较慢。
第二种方法:BufferedReader
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str3=br.readLine();//读一行
int x=br.read();//read()只读取一个字符
String[] arr=str3.split(" ");//按空格拆分
int a1=Integer.valueOf(arr[0]);//将String类型转换成int类型
在windows中按一下回车键 一共有两个字符 “\n\r” 而read()只能读取一个字符;
所以如要要用read来达到吸收回车的目的,需要用两个read();
如果用readLine()的话会将"\n\r"全部吸收 , 所以只需要一个readLine()来吸收回车。
第三种方法:StreamTokenizer
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer st =new StreamTokenizer(br);
st.nextToken();//每读入一个,就移动一次,相当于一个跟踪的“指针”
int i=(int)st.nval;//数字
st.nextToken();
String s=st.sval;//字符串
while (st.nextToken() != StreamTokenizer.TT_EOF){
}
//多组输入,StreamTokenizer.TT_EOF这个是个参数,就是相当于EOF了。
sval是获取不带空格的字符串,含有空格的字符串无法全部读取,只会获取空格之前的。并且只能用来获取含字母和数字、中英文句号的字符串。
输出篇
第一种方法:System.out
System.out.println("123"); //输出并且换行
System.out.print("123"); //输出但不换行
System.out.printf("%d %s",a,s); //输出不换行,可以指定类型
第二种方法:BufferedWriter
int a =65;
String s ="Hello";
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
out.write(a);//输出 :A
out.write(a+"\n");//输出:65(换行)
out.write(Integer.toString(a));//输出:65
out.write(s);
out.flush();//刷新输出缓冲区,把缓冲区的内容输出到控制台
out.close();
write() 不能直接输出int类型, 因为write(int a) 会输出其对应的ASCii码的字符 ,比如输出 65 会显示 A。
所以当需要输出一个int类型的变量时, 可以用Integer.toString(int a)方法 将其变为字符串形式输出。或者使用 + 拼接一个字符串,这样 参数整体就是一个字符串了,比如加一个换行符。
第三种方法:PrintWriter(推荐)
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
int a=1;
out.println("第一行");//println可以换行
out.println("第二行");
out.printf("%d",a);
out.print(a);
out.flush();
二者区别:
1. PrintWriter的print、println方法可以接受任意类型的参数,而BufferedWriter的write方法只能接受字符、字符数组和字符串;
2. PrintWriter的println方法自动添加换行,BufferedWriter需要显示调用newLine方法;
3. PrintWriter的方法不会抛异常,若关心异常,需要调用checkError方法看是否有异常发生;
4. PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush);