我们先来掌握一个知识点
Java中 == 和 equalse()的区别- Java中数据类型有两种:基本数据类型和引用数据类型
基本数据类型的值存储在内存的栈中;引用数据类型栈中存储的是对象的地址,该地址指向的堆中内存空间存储的才是我们需要的内容,比如对象存储在内存的堆中。
- 关于==:
比较的是内存地址。当比较的是基本数据类型变量时,判断它们是否来自同一个内存地址,由于基本类型变量值是存储在栈里面的,当两个变量有同一个值时,其实它们只用到了一个内存空间,所以比较的结果是true。
当比较的是引用数据类型变量时,判断的也是内存地址,如果两个引用的地址信息相同,指向的就是同一个对象,得到的结果就是true。
例如:
例子1:
String s1 = “123”;
String s2 = “123”;
s1s2 值为true
例子2:
String s1 = “123”;
String s2 = new String(“123”);
s1s2 的结果是false
例子1中:java中有字符串缓冲池的概念,通俗的说,就是程序在运行的时候会创建一个字符串缓冲池,里面放了字符串对象,在声明String变量的时候,程序首先会在这个String缓冲池中寻找相同的对象,如果有相同对象,就将已有的地址赋值给引用;如果没有就创建新的内存地址,因此缓冲池里原来有的字符串的那个变量和新申请的变量,其实指向的是同一个内存空间。因此例子1里面s1和s2用到的都是同一个内存空间的“123”。所以此时==的结果是true。
例子2中:由于s2用new 关键字重写申请了空间,没有用到缓冲池里的原有的变量,所以它们内存地址不相同,所以结果为false。
- 关于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和falseBoolean数据类型
有两个值: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;
}
}
看效果:
达到预期



