前言❤️❤️
hello hello💕,这里是洋不写bug~😄,欢迎大家点赞👍👍,关注😍😍,收藏🌹🌹
在这篇文章中,会介绍Java中的输入输出操作,时间戳,并通过猜数字游戏来学习随机数,这些都是Java中的基础内容,在以后写代码时会经常用到,需要掌握牢固🌞🌞
🎇个人主页:洋不写bug的博客
🎇所属专栏:Java学习之旅,从入门到进阶
🎇铁汁们对于Java的各种常用核心语法(不太常用的也有😆),都可以在上面的Java专栏学习,专栏正在持续更新中🐵🐵,有问题可以写在评论区或者私信我哦~
1,输出操作(print,printf,println)
Java中输出到控制台,通过System.out这个对象(Java自带的对象,直接就能使用后)来完成标准输出
System.in这个对象进行输入,对应控制台标准输入
标准输入和标准输出都是操作系统自带的
println 打印一行
ln => line
相当于在打印的时候,自动添加换行符 \n
print打印不换行,除非手写\n
printf进行的是格式化打印(printf => print format),类似于C语言。
下面是println的打印和print的打印,一个换行,一个不换行
public class Test1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a);
System.out.println(b);
}
}

public class Test1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.print(a);
System.out.print(b);
}
}

用printf来打印的话,除了前面要加个System.out,其他的跟C语言一样,就是按照一定的格式来打印,示例如下:
public class Test1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.printf("a = %d\nb = %d\n",a,b);
}
}

2,输入操作(Scanner)
1,输入Scanner简介
其实Java自身提供的也有读取操作,是System.in.read,但是太不好用了,一次只能读取一个字节的数据,特别不好用,这也是Java的一个设计缺陷,因此这时我们就需要使用另外的辅助类,Scanner。
Scanner这个辅助类在本质上还是调用了System.in.read来实现的,在内部处理了数据的分次读取和拼装过程\
要想使用Scanner这个类,需要先去创建一个对象,使用scanner变量表示这个对象(这里注意,这个变量名字叫什么都可以,但是一般我们为了便于区分,就把类的首字母大写改为小写,为对象命名)
Scanner的功能特别强大,可以读取控制台,文件,网络…
在上篇经典题目解析的时候提到过包的导入,这里回顾一下:
在创建Scanner时,上边会自动生成一个import java.util.Scanner;这就是导入了一个包,类似于C语言中的#inlcude,这个包的导入是为了Scanner类的使用
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
}
}
万一没有出现差错没有自动导入包的话,直接一个鼠标放在爆红的地方,一个alt + enter键,点击第一个导入包即就解决了
注:这里导入包的本质还是导入这个包下的Scanner类,因此这里显示的是import class

2,判断控制台是否有数据可读
这里通过while(scanner.hasNextInt())来判断是否有整数数据可读,进而这里就可以无限的输入输出,这个比较有趣,铁汁们可以试一下😆
import java.util.Scanner;
public class exercise {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int n = scanner.nextInt();
System.out.println(n);
}
}
}

当输入一个字母时,判断出无法从控制台读取需要的数据,就会自动退出程序。

Scanner内置类有很多has判断方法,下面是几个常用的:
- 判断是否有字符串可读:hasNext
- 判断是否有一行可读:hasNextLine
- 判断是否有整数可读:hasNextInt
- 判断是否有double可读:hasNextDouble

import java.util.Scanner; public class exercise { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNextInt()){ int n = scanner.nextInt(); System.out.println(n); } } }热知识:这个程序运行后,在键盘输入时,操作系统感知到我们按的是哪个,把对应的字符传到程序中
但是在按enter之前,程序是无法判定有没有输入,或者输入的符不符合要求,会先运行到while处,然后等着我们按enter键来进行判断,按enter键之前都是一直在等待。
这种has判断操作和next读取操作,都需要等待用户按enter键,这里的等待,使用阻塞(block)这样的术语来表示。
那这时候铁汁们可能有这样一个问题:hasNext是用来读取字符串的,在控制台上无论输出什么都是字符串,那这个while循环不是一直就跳不出来了
EOF就是end of file,文件结束的标志。
- 如果我们读取的内容是从文件来读,那么读到文件末尾,就会自动触发EOF。
- 如果我们读取的是网络内容,网络内容读干净了,也会自动触发EOF。
- 如果是从控制台上来读的话,就只有在用户手动输入EOF时才会触发。
那用户如何手动输入EOF呢?
windows => ctrl + z
linux/max => ctrl + d
测试如下:import java.util.Scanner; public class exercise { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNext()){ String a = scanner.next(); System.out.println(a); } } }
3,猜数字游戏
1,题目详解
题目要求:系统随机生成一个[1,100]的随机数,接着让用户来猜,判断出用户是猜大了,猜小了,还是正确,让用户继续猜,直到猜对了为止。
思路:这里因为是不猜对的话要一直猜,因此使用while循环。
import java.util.Random; import java.util.Scanner; public class exercise { public static void main(String[] args) { Random random = new Random(); int answerName = random.nextInt(100) + 1; Scanner scanner = new Scanner(System.in); System.out.println("请猜一个1-100的整数:"); while(true){ int guessName = scanner.nextInt(); if(guessName < answerName){ System.out.println("猜小了,请再猜一次:"); continue; }else if(guessName > answerName){ System.out.println("猜大了,请再猜一次:"); continue; }else{ System.out.println("恭喜你,猜对了!!!"); } } } }代码拆分讲解:‘
Random random = new Random();
这里我们会新学习一个内部类,叫Random,跟Scanner用法相似,都是创建对象,再使用对象的方法去实现一些功能(方法就是C语言中所说的函数,只是在Java中叫方法)
Random是用来生成随机数的,这里就是创建出它的一个对象,用于生成随机数int answerName = random.nextInt(100) + 1;
这段代码就是用random(对象)的nextInt方法来生成随机数
这个nextInt方法括号里面的数字是我们自己写的,这括号里面的数字n表示的就是生成一个在[0,100)区间(前闭后开)内的随机数,这道题我们需要的是1-100的随机数,生成的是0-99的,在后面加上1就行了,表示的是[1,101)这个区间,正好生成的是1-100代码中其他的逻辑应该不难理解,这里就不再赘述了
2,伪随机数
大家可能认为,运行上面这个猜数字程序,每次生成1-100之间这100个数的概率是几乎相同的,这样生成的随机数就叫做真随机数。
但是上面我们的Random内置类并不是这样,它生成的随机数是伪随机数
可以打个比方,我这次运行程序时生成的随机数是50,那么下次运行就不是生成1-100每个数的概率是0.01了,生成50的概率会低很多,而生成其他99个数的概率就会高一些。计算机也可以生成真随机数,但是成本较高,在大部分应用场景下,其实伪随机数就可以了,而且用伪随机数用户体验还会更好一些。
就比如在王者中,英雄普攻暴击的概率是30%,那么第一次没有打出暴击,下一次普攻暴击的概率就会高于30%但是某些游戏,他们的抽奖系统,跟“随机”没有半毛钱关系,完全是产品经理在背后进行暗箱操作
4,时间戳
时间戳:以1970年1月1日0时9分0秒作为基准时刻,计算当前时刻和基准时刻的秒数/毫秒数之差。计算机就是通过时间戳来表示时间的
这里使用System类的currentTimeMillis,打印当今的时间戳(单位是毫秒)public class exercise { public static void main(String[] args) { System.out.println(System.currentTimeMillis()); } }
也可以在浏览器上搜索时间戳,来查看当今的时间戳。

结语💕💕
学习Java一定要多写代码,初学的铁汁有空的话最好把代码敲一遍,理解效果会更好,🥳🥳大家都学废了吗?完结撒花~ 🎉🎉🎉



被折叠的 条评论
为什么被折叠?



