前提:本章所提到的都是针对控制台的输入输出
其他输入输出如针对网卡和文件等进行读写后续才会讲到
一 输出
1.java中输出到控制台:
使用System.out这个out直接对应着控制台显示器设备,实现标准输出(标准输出是操作系统自带的,在不同的编程语言有不同的实现方式,java中通过对象实习)
2.不同的输出函数:
printfln:打印后换行
printf:
(1)可与C语言相同进行格式化打印
(2)也可与printfln打印规则一样
二 输入
1.java中实现标准化输入:System.in
这里的in直接对应控制台的键盘,实现标准输入
2.问题:Java自身提供的类System.in的读取操作不好用仅有能用的read操作一次也只能读取一个字节
3.解决:借助辅助的类Scanner
原理:还是使用System.in的read操作,只不过在内部实现了其多次读取和拼接的过程
4.格式:
Scanner scanner =new Scanner (System.in)
分析:Scanner是类,scanner是对象名,new创建一个新对象,System.in表示其是从控制台去输入内容,读取数据(因为Scanner不仅能从控制台读取,还能从文件,网卡等,所以需要说明)
5.注意事项:
(1)使用Scanner类的使用要import来引用
例如:import Java.util.Scanner
区别:类似于C语言的#include
实现的目的类似
实现方式不同:java是对引用内容进行格式化分析,C语言相当于把头文件的内容直接粘贴到#的位置了
(2)字符串读取的时候读取到空白符就会停止
补充:空白符:回车符,制表符,垂直制表符,空格,翻页符
解决:使用nextLine直接读取一整行,当其遇到回车符才会停止读取
6.多组输入问题:
(1)方式:使用Scanner提供的hasNext系列,判断是否有有对应数据可读
(2)原理:操作系统负责硬件(键盘),按下键盘按键,操作系统在感知你按了那个按键,操作系统会根据你按的按键内容,把对应的字符传到对应的对应的程序中
程序判断你是否有输入内容是以你按下enter键为标准的,在没有按下enter之前系统都一直在等待,只有真正·输入enter键时,才能得到结果
(3)结论:
(i)等这样的操作,在输入中是客观存在的
(ii)如果has在前面已经等过了那么next系列可不再等了
(iii)等待等到真正输入enter才会结束(block)
(4)格式:while(scanner.hasNextInt())其内部的条件是真是假取决于其能否真正读取到对应类型的数
如何结束:当遇到EOF(文件读取结束的标志,是自动的)或读取的数类型不匹配
注:hasNext是判断读取的是否为一个字符串,此时只有利用EOF才能进行终止
手动:Windows:ctrl+z Mac/Linux:ctrl+d
注:在idea的内置终端中,也是需要用ctrl+d
三 猜数字游戏(补充)
1.随机数的生成
(1)创建一个Random类的对象(注意引用时也要import说明)
(2)引用对象中的next方法(java中已经内置了时间戳作为种子)
2.真随机和伪随机
真随机:所有的数字都是以相同的几率出现的
伪随机:是遵循计算一系列复杂的数学公式得到来实现(几率与真随机近似相等)
真随机的实现消耗成本很大,伪随机基本上能满足日常的需求,甚至在一些表现上比真随机更好(比如游戏中的技能爆发几率)
3.获取时间戳
(1)方式:System.currentTimeMillis()