Java输入输出操作,时间戳,猜数字游戏

前言❤️❤️

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一定要多写代码,初学的铁汁有空的话最好把代码敲一遍,理解效果会更好,🥳🥳大家都学废了吗?完结撒花~ 🎉🎉🎉

    在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值