Java的输入输出及猜数字游戏详解

Java输入输出

每一个编程语言都会涉及到输入输出的问题,只有能够输入输出我们才能够得到我们想要的结果。

输入

Java的输入需要使用到Scanner类,这个类存在于util包中,在输入的时候需要导入Scanner类包;因为类只是一个抽象的概念,要使用就要创建对象以此来控制实例;这就是类别和个体之间的关系,比如狗是一个类别,而什么品种的狗狗就是一个个体;

import java.util.Scanner;
Scanner scanner = new Scanner(System.in)
int ret = scanner.nextInt(); 

Scanner是类型,scanner是对象名,new Scanner()是调用,System.in是输入意思.
在创建scanner对象之后用对象名声明一个int类型的变量,使用nextInt();以此类推声明double类型变量使用nextDouble();
但有一个是比较特殊的,那就是String类型变量,只需要是用next()即可;

String str = scanner.next();

nextLine()的作用
在上述各个声明变量的方法都是以空格等等作为结束标记的,那如果我要得到"游鱼 优秀"这样的字符串怎么办呢,寻常输入在读取到“游鱼”时便结束了,因为后面便是空格;
这个时候就要使用到nextLine(),它的结束标志只有一个——换行符

        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        System.out.println(str);
游鱼 优秀
游鱼 优秀

与next对比

        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        System.out.println(str);
游鱼 优秀
游鱼

输出

Java的输出多样化,总有四种形式

        System.out.println();//第一
        System.out.print();//第二
        System.out.printf("printf:%s ", str);//第三
        System.out.format("format:%s ", str);//第四
请输入:>游鱼优秀
游鱼优秀
游鱼优秀printf:游鱼优秀 format:游鱼优秀 

这四个输出格式当中,System.out功能都是相同的,都是表示输出的意思,不一样的地方在于后面的方法;
println()为换行输出,即在输出结果之后自动换行;
print()为不换行输出,就是在书结果之后不换行;
printf()和fromat()两个基本上是一样的,和C语言中的printf()一样都是格式化输出。

习题

猜数字游戏

猜数字游戏是在学习输入输出之后应用的最好例子,较为简单易上手.
首先,猜数字我们要系统随机给出数字让我们来猜才行,在Java中选取随机数的类为Random();
同样的,在使用前要想调用类包Java.util.Random,其次再是使用类名来创建对象,我这个代码的对象为r;
值得注意的是,Random r = new Random(seed:),当中的seed是要填一个种子(一般在使用的时候不填,在此只是说明);
计算机中使用的随机数都是“伪随机数”,即都是根据数学公式所给出来的随机数列;seed就是这个随机数列的起始值,一般在使用Random()的时候我们一般不填.

import java.util.Random;
        Random r = new Random();
        //不加1的i区间范围[0, 99);
        int i = r.nextInt(100) + 1;

第二步即调用Scanner类并创建对象以此输入我们所猜的数字;

import java.util.Scanner;
   Scanner s = new Scanner(System.in);
   int guess = s.nextInt();

第三步根据我们所猜的数字给出是否猜对了数字,猜对了break结束循环;猜错了根据所猜数字判断是大是小并给出范围;

            if(guess < 0 || guess > 100){
                System.out.println("请输入1~100的数字!");
                continue;
            }
            //判断玩家猜的对不对
            if(guess == i){
                System.out.println("恭喜你,猜对了!");
                break;
            } else if(guess > i){
                System.out.println("猜大了!数字在" + left +"和" + guess + "之间");

            } else if(guess < i){
                System.out.println("猜小了!数字在" + guess +"和" + right + "之间");
            }

范围是跟据所猜数字而给出的一个范围,而当猜的数字小的时候,我们便调整left以缩小左边区间的范围;同理当猜大时,调整right的值以缩小右边的值;

            if(guess < i){
                left = guess;
            } else{
                right = guess;

具体代码如下:

import java.util.Random;
import java.util.Scanner;

public class GuessNumber {
    public static void main(String[] args) {
        //取随机数作为要被猜的数据
        Random r = new Random();
        //不加1的i区间范围[0, 99);
        int i = r.nextInt(100) + 1;
//        System.out.println(i);
        //猜数字的过程
        // 使用Scanner输入玩家猜的数字
        Scanner s = new Scanner(System.in);
        int left = 0;
        int right = 100;
        while(true){
            System.out.print("请输入你心中的数字:>");
            int guess = s.nextInt();
            if(guess < 0 || guess > 100){
                System.out.println("请输入1~100的数字!");
                continue;
            }
            //判断玩家猜的对不对
            if(guess == i){
                System.out.println("恭喜你,猜对了!");
                break;
            } else if(guess > i){
                System.out.println("猜大了!数字在" + left +"和" + guess + "之间");

            } else if(guess < i){
                System.out.println("猜小了!数字在" + guess +"和" + right + "之间");
            }
            //left   guess1   i      guess2     right
            //当所猜的数guees1要小于i的时候,这个时候是猜小了,那么我们就是left变成guess1,以此来缩小范围
            //当所猜的数guees1要大于i的时候,我们就是使right变成guess2来缩小范围,,
            //这样不会因为改变某个数而造成数据交错
            //如果两个都改变的话,那么连续两次猜大或猜小的时候会导致范围都到了所猜数字i的大于边或者小于边
            //
            if(guess < i){
                left = guess;
            } else{
                right = guess;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值