栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java-猜拳游戏

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-猜拳游戏

猜拳游戏 抛砖引玉

我们先来掌握一个知识点

Java中 == 和 equalse()的区别
  1. Java中数据类型有两种:基本数据类型和引用数据类型

基本数据类型的值存储在内存的栈中;引用数据类型栈中存储的是对象的地址,该地址指向的堆中内存空间存储的才是我们需要的内容,比如对象存储在内存的堆中。

  1. 关于==:

比较的是内存地址。当比较的是基本数据类型变量时,判断它们是否来自同一个内存地址,由于基本类型变量值是存储在栈里面的,当两个变量有同一个值时,其实它们只用到了一个内存空间,所以比较的结果是true。
当
比较的是引用数据类型变量时,判断的也是内存地址,如果两个引用的地址信息相同,指向的就是同一个对象,得到的结果就是true。
例如:
例子1:
String s1 = “123”;
String s2 = “123”;
s1s2 值为true
例子2:
String s1 = “123”;
String s2 = new String(“123”);
s1
s2 的结果是false

例子1中:java中有字符串缓冲池的概念,通俗的说,就是程序在运行的时候会创建一个字符串缓冲池,里面放了字符串对象,在声明String变量的时候,程序首先会在这个String缓冲池中寻找相同的对象,如果有相同对象,就将已有的地址赋值给引用;如果没有就创建新的内存地址,因此缓冲池里原来有的字符串的那个变量和新申请的变量,其实指向的是同一个内存空间。因此例子1里面s1和s2用到的都是同一个内存空间的“123”。所以此时==的结果是true。
例子2中:由于s2用new 关键字重写申请了空间,没有用到缓冲池里的原有的变量,所以它们内存地址不相同,所以结果为false。

  1. 关于equalse()

equalse()方法是Object类的基本方法之一,在Object类中的equalse()方法是对两个对象的地址值进行比较的,但是当String、Math、Integer等封装类在使用equalse()方法是已经覆盖了Object类的equalse()方法,所以每个类都有自己的equalse()方法,是比较两个对象的内容是否一样。所以上面的例子如果换成是equalse()比较的话,结果都true。

我们在来掌握一个知识点

将用户输入的数字与随机生成的数字进行比较

我的任务是创建一个随机生成的数字,要求用户输入一个数字,然后比较两者并显示一个消息框,告诉他们是否匹配。到目前为止,这是我的代码…

import javax.swing.*; //GUI 组件

public class RandomGuessMatch
{
public static void main(String[] args)
{
Integer random = (1 + (int)(Math.random() * 5)),userNum;

    // 获取输入
    userNum = JOptionPane.showInputDialog("输入一个数字 1 - 5.");

    // 检查数字是否匹配
    boolean matches = (random == userNum);
    JOptionPane.showMessageDialog(null, "这个随机数是 " + random + ". " + "它匹配吗? " + matches);
}

}

我遇到的唯一错误是当我试图获取用户输入时。 “无法从String转换为Integer”。但是,我无法弄清楚如何获取用户的号码并将其与“userNum”相关联,以便我可以将其与“随机”进行比较。

1.可以通过解析将字符串转换为整数。
int x = Integer.parseInt(“1”);
请注意,如果String为NaN
,则会抛出异常
2.
JOptionPane的showInputDialog方法返回String。你可以做的是使用结果字符串作为Integer类的构造函数中的参数:
userNum = new Integer(JOptionPane.showInputDialog(“Enter a number 1 - 5.”));
此外,由于您使用的是Integer对象,因此必须使用equals方法对它们进行比较:
boolean matches = random.equals(userNum);
3.
需要使用
将字符串响应强制转换为整数
Integer.parseInt(userChoice)
4.
可以通过这种方式获得输入:
userNum = Integer.getInteger(JOptionPane.showInputDialog(“Enter a number 1 - 5.”));
稍后您可以进行一些输入验证以防止非整数输入。
5.
ShowInputDialog will return a String。因此,您将其值放入的变量也必须具有String类型。
尝试创建一个名为" userInput"的变量。并将用户输入的值放在那里。然后你可以说
userNum = Integer.valueOf(userInput);
从那里,使用" userNum.equals(随机)"比较两个整数。 double equals运算符只适用于int类型,而不是Integers。
6.
如果您读取用户输入它是一个String,那么您必须将userNum声明为String而不是Integer。
String userNum;
下一步是将随机数与字符串进行比较。要做到这一点,你需要Integer.valueOf(String s)方法,因此它们都是Integer值:
boolean matches = (random == Integer.valueOf(userNum));

我们可以用第二条(已过期)解决当前问题

import javax.swing.*; //GUI components组件

public class RandomGuessMatch
{
public static void main(String[] args)
{
Integer random = (1 + (int) (Math.random() * 5)),userNum;

    // 获取匹配
    userNum = new Integer(JOptionPane.showInputDialog("输入一个数字 1 - 5."));

    // 检查数字是否匹配
    // boolean matches = (random == userNum);
    boolean matches = random.equals(userNum);
    JOptionPane.showMessageDialog(null, "这个随机数是 " + random + ". " + "它匹配吗? " + matches);
}

}

我们看效果:

我们继续掌握一个知识点

Boolean数据类型以及判断true和false

Boolean数据类型

有两个值:true和false
Boolean()函数可以将任何数据类型转化为boolean类型
boolean数据类型

转化为true  true
转化为false  false

String数据类型

转化为true  任何非空字符串
转化为false  “ ”(非空字符串)

Number数据类型

转化为true  任何非0数字
转化为false  0和NaN

Object数据类型

转化为true  任何对象
转化为false  null

undefined数据类型

转化为true 无
转化为false  undefined

在做if判断的时候的 真 和 假

假(6):false、空字符串、0、null、undefined、NaN
在做运算判断时


运算符 + - * / %

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


public class MoraGame 
{
    //测试
    public static void main(String[] args) 
    {
        // 创建一个玩家对象
        Tom t = new Tom();

        // 用来记录最后的输赢次数
        byte isWinCount = 0;

        // 创建二维数组,用来接收局数,Tom 出拳情况以及电脑出拳情况
        byte[][] arrone = new byte[3][3];
        byte j = 0;

        // 创建一个一维数组,用来接收输赢情况
        String[] arrtwo = new String[3];

        Scanner scanner = new Scanner(System.in);
        for(byte i=0;i<3;i++)
        {
            // 获取玩家出的拳
            System.out.println("请输出你要出的拳  0 —— 石头   1 —— 剪刀   2 —— 布");
            byte num = (byte)scanner.nextInt();  // 接收客户端从键盘的输入
            t.setTomGuessNum(num);  // 调用 Tom 类中的方法及传参
            byte tomGuess = t.getTomGuessNum();    // 调用 Tom 类中的方法以及接收当前客户端在键盘的输入
            arrone[i][j + 1] = tomGuess;

            // 获取电脑出拳
            byte comGuess = (byte)t.computerNum();
            arrone[i][j + 2] = comGuess;

            // 将玩家猜的拳与电脑做比较
            String isWin = t.vsComString();
            arrtwo[i] = isWin;
            arrone[i][j] = t.count;

            // 对每一局的情况进行输出
            System.out.println("============================");
            System.out.println("局数t玩家的出拳t电脑的出拳t输赢情况");
            System.out.println(t.count + "t" + tomGuess + "tt" + comGuess + "tt" + arrtwo[i]);
            System.out.println("============================");
            System.out.println("nn");
            isWinCount = t.winCount(isWin);
        }
        
        // 对游戏的最终结果进行输出
        System.out.println("局数t    玩家的出拳t    电脑的出拳tt输赢情况");
        for(byte a=0;a
            for (byte b = 0; b < arrone[a].length; b++) 
            {
                System.out.print(" "+arrone[a][b] + "tt");
            }
            System.out.println(arrtwo[a]);
            // System.out.println();
        }
        System.out.println("您赢了" + isWinCount + "次");
    }
}

// Tom 类
class Tom   // 核心代码
{
    // 玩家出拳的类型
    byte tomGuessNum;

    // 电脑出拳的类型
    byte comGuessNum;

    // 玩家赢的次数
    byte winCountNum;

    // 比赛的次数
    byte count = 1;

    public void showInfo()
    {
        // ...
    }
    
    

    public int computerNum()
    {
        Random r = new Random();
        comGuessNum = (byte) r.nextInt(3); // 方法  返回 0-2 的随机数
        // System.out.println("电脑的随机"+comGuessNum);
        return comGuessNum;
    }
    
    
    public void setTomGuessNum(byte tomGuessNum)
    {
        if(tomGuessNum>2||tomGuessNum<0)
        {
            // 抛出一个异常 未处理
            // throw new IllegalArgumentException("数字输入错误");
            System.out.println("数字输入错误");
        }
        this.tomGuessNum = tomGuessNum;
    }
    
    public byte getTomGuessNum()
    {
        return tomGuessNum;
    }

    

    public String vsComString()
    {
        // 比较巧
        if(tomGuessNum==0&&comGuessNum==1)
        {
            return "您赢了";
        }
        else if(tomGuessNum==1&&comGuessNum==2)
        {
            return "您赢了";
        }
        else if(tomGuessNum==2&&comGuessNum==0)
        {
            return "您赢了";
        }
        else if(tomGuessNum==comGuessNum)
        {
            return "平手";
        }
        else 
        {
            return "您输了";
        }
    }
    
    

    public byte winCount(String s)
    {
        count++;
        if(s.equals("您赢了"))
        {
            winCountNum++;
        }
        return winCountNum;
    }
}

看效果:


达到预期

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号