3. 从一个猜数游戏开始

一、从源码中学习

1.1 源码

一个简单的猜数大小游戏,不集的输入,直到猜测正确时退出。

use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
    let secret_number = rand::thread_rng().gen_range(1, 101);

    // println!("神秘数字是: {}", secret_number);

    loop {
        println!("猜测一个数[1,100]:");

        let mut guess = String::new();
        //把输入放到guess字符串中
        io::stdin().read_line(&mut guess).expect("无法读取行");

        let guess: u32 = match guess.trim().parse(){
            Ok(num1) => num1,
            Err(message) => {
                println!("错误: {message}!");
                continue;
            }
        };

        // println!("您猜测的数是: {}", guess);

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("太小了!"),
            Ordering::Greater => println!("太大了!"),
            Ordering::Equal => {
                println!("赢麻了_^_!");
                break;
            }
        }
    }
}

1.2 运行结果

在这里插入图片描述

二、 导入一个trait

该程序需要引用第三方随机数库,打开Cargo.toml文件,在[dependencies]下添加一行rand = "0.3.14",也可以写成rand = ^0.3.14,前者是后者的简写,表示任何至少是 0.3.14 但小于 0.4.0 的版本。

三、重要源码分析

  1. 类似于python中的import导入第三方包,Rust需要使用use导入它所需要使用的随机数Ordering枚举以及io操作库。
use rand::Rng;
use std::cmp::Ordering;
use std::io;
  1. Rng 是一个 trait,它定义了随机数生成器应实现的方法,代码中调用了rand::thread_rng 函数提供实际使用的随机数生成器:它位于当前执行线程的本地环境中,并从操作系统获取种子,接着调用随机数生成器的 gen_range 方法,可以使用start..=end的方式来包含上下端,也可以使用代码中的方式,两者都表示生成[1,100]中的随机数。
let secret_number = rand::thread_rng().gen_range(1, 101);
  1. Rust使用let定义变量,默认的变量为不可变变量,例如下面的语句会报错
let x = 1;
x = 3;  //Error: cannot assign twice to immutable variable

要解决这个问题,需要添加mut关键字

let mut x = 1;
x = 3;   //Right
  1. 由于需要向一串表示字符串的地址中写入数据,因此将指向该地址的变量定义为mut类型,使用String::new()申请一串地址空间,该空间是一个UTF8编码的可增长文本块,可以将该函数理解成c++中的静态方法。
  2. 从标准输入(键盘,即stdin)中读取字符串并存入申请的内存地址中,注意:read_line的工作原理是:无论用户在标准输入中输入什么内容,都会追加到一个字符串中,因此不能把String::new()函数写到loop外面,因为这样写会每次都追加数据(包括回车符),导致程序出错
  3. 从键盘输入的为字符串,因此要使用let guess: u32强制将输入的字符串转换为32位无符号整数,以此与生成的整数进行比较。
  4. trim()取消输入字符两边的空格和换行符,parse()转换为整数,如果转换成功返回Ok和最终的值,否则返回Err和错误信息,因此将返回值进行处理。
 let guess: u32 = match guess.trim().parse(){
       Ok(num1) => num1,
       Err(message) => {
           println!("错误: {message}!");
           continue;
       }
   };
  1. 最后将输入的值与生成的值进行对比分析,指引用户逐渐输入正确的值。
要使用Java创建一个0到100之间的猜数游戏,你可以按照以下步骤进行: 1. 生成随机数:首先需要生成一个0到100之间的随机数,这个随机数是用户需要猜测的目标数字。 2. 用户输入:程序需要提示用户输入他们的猜测,并接收用户的输入。 3. 结果判断:程序需要根据用户的输入判断用户猜的数字是太高、太低还是正确。 4. 循环猜测:用户需要有多次机会猜测,直到猜对为止。每次猜测后,程序应该给出相应的提示,并让用户继续猜测。 5. 结束游戏:一旦用户猜对了数字,游戏结束,并显示用户猜测的次数。 下面是一个简单的Java程序示例代码,实现了上述功能: ```java import java.util.Scanner; import java.util.Random; public class GuessNumberGame { public static void main(String[] args) { // 创建Scanner对象以获取用户输入 Scanner scanner = new Scanner(System.in); // 创建Random对象以生成随机数 Random random = new Random(); // 生成一个0到100之间的随机数 int numberToGuess = random.nextInt(101); // 用户猜测次数 int numberOfTries = 0; // 用户猜测的数字 int guess; System.out.println("猜数游戏开始!我已经想好了一个0到100之间的数字。"); // 循环直到用户猜对数字 while(true) { System.out.print("猜猜看,这个数字是多少? "); guess = scanner.nextInt(); // 获取用户输入 numberOfTries++; if(guess < numberToGuess) { System.out.println("太低了,再试一次。"); } else if(guess > numberToGuess) { System.out.println("太高了,再试一次。"); } else { System.out.println("恭喜你,猜对了!数字就是 " + numberToGuess); System.out.println("你总共猜了 " + numberOfTries + " 次。"); break; // 猜对了,退出循环 } } scanner.close(); // 关闭scanner对象 } } ``` 运行这个程序,用户将被提示输入猜测的数字,并根据程序的提示进行多次猜测,直到猜对为止。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贱贱的剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值