import java.util.Scanner;
/**
* @author heartFade
* @create 2023-10-30 13:34
*/
public class demoGame {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入你的名字");
String name=scanner.nextLine();
System.out.println("请选择你的对手");
System.out.println("1.菠萝吹雪");
System.out.println("2.橙留香");
String opposite = scanner.next();//定义选择的对手序号
String oppositeName;
if(opposite.equals("1")){
oppositeName="菠萝吹雪";
}else if(opposite.equals("2")){
oppositeName="橙留香";
}else oppositeName="匿名用户";
while(true){
System.out.println("请输入你的选择");
System.out.println("1.石头");
System.out.println("2.剪刀");
System.out.println("3.布");
String option = scanner.next();
String []n=new String[3];
n[0]="石头";
n[1]="剪刀";
n[2]="布";
// int computerOption = (int)((Math.random()*2+1));//先用Math.round取[0,1)的随机数再乘以二变为[0,2)在加一取到[1,3)
int computerOption=(int)(Math.random()*3);
String computerOptionToStr=computerOption+"";//将数字转化为字符串
if((computerOptionToStr.equals("0")&&option.equals("2"))||(computerOptionToStr.equals("1")&&option.equals("3"))
||(computerOptionToStr.equals("2")&&option.equals("1")))//电脑赢
{
System.out.println("你"+name+"输了你出的是:"+n[Integer.parseInt(option)-1]);
System.out.println("电脑"+oppositeName+"赢了出的是:"+n[computerOption]);
}
else if((computerOptionToStr.equals("1")&&option.equals("1"))||(computerOptionToStr.equals("2")&&option.equals("2"))
||(computerOptionToStr.equals("0")&&option.equals("3")))
{
System.out.println("你"+name+"赢了你出的是:"+n[Integer.parseInt(option)-1]);
System.out.println("电脑"+oppositeName+"输了出的是:"+n[computerOption]);
}else {
System.out.println("平手出的是"+n[computerOption]);
}
//*************************以上概率有问题电脑出二的几率明显大
//应该把 int computerOption = (int)((Math.random()*2+1));改为int computerOption=(int)(Math.random()*3)
}}
}
import java.util.Scanner;
/**
* @author heartFade
* @create 2023-10-30 14:52
*/
public class demoGame1 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入你的名字");
String name=scanner.nextLine();
System.out.println("请选择你的对手");
System.out.println("1.菠萝吹雪");
System.out.println("2.橙留香");
String opposite = scanner.next();//定义选择的对手序号
String oppositeName;
if(opposite.equals("1")){
oppositeName="菠萝吹雪";
}else if(opposite.equals("2")){
oppositeName="橙留香";
}else oppositeName="匿名用户";
while (true){
System.out.println("请输入你的选择");
System.out.println("1.石头");
System.out.println("2.布");
System.out.println("3.剪刀");
String option = scanner.next();
int optionNumber=Integer.parseInt(option)-1;//减一是为了保持一致
String []n=new String[3];
n[0]="石头";
n[1]="布";
n[2]="剪刀";
// int computerOption = (int)((Math.random()*2+1));//先用Math.round取[0,1)的随机数再乘以二变为[0,2)在加一取到[1,3)
int computerOption=(int)(Math.random()*3);
if(computerOption-optionNumber==1||computerOption-optionNumber==-2)//电脑赢
{
System.out.println(oppositeName+"赢他出了:"+n[computerOption]);
System.out.println(name+"输了出了:"+n[optionNumber]);
}
else if(computerOption-optionNumber==-1||computerOption-optionNumber==2)
{
System.out.println(oppositeName+"输他出了:"+n[computerOption]);
System.out.println(name+"赢了出了:"+n[optionNumber]);
}else{
System.out.println("出了"+n[computerOption]);
System.out.println("我除了"+n[optionNumber]);
}
//*************************以上概率有问题电脑出二的几率明显大
//应该把 int computerOption = (int)((Math.random()*2+1));改为int computerOption=(int)(Math.random()*3)
}}
}
通过执行javap -c xx.class文件 if语句过多会导致代码执行的效率变低
改成switch经过javap 的反编译
先进行hashcode的地址计算,是一个顺序结构
Switch直接去找条件而不是像if一样去一个一个判断效率提高了
import java.util.Scanner;
/**
* @author heartFade
* @create 2023-10-30 15:28
*/
public class demoGame2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的名字");
String name = scanner.nextLine();
System.out.println("请选择你的对手");
System.out.println("1.菠萝吹雪");
System.out.println("2.橙留香");
String opposite = scanner.next();//定义选择的对手序号
String oppositeName;
// if (opposite.equals("1")) {
// oppositeName = "菠萝吹雪";
// } else if (opposite.equals("2")) {
// oppositeName = "橙留香";
// } else oppositeName = "匿名用户";
switch (opposite)
{
case "1":oppositeName="菠萝吹雪";break;
case "2":oppositeName="橙留香";break;
default:oppositeName="匿名用户";
}
while (true) {
System.out.println("请输入你的选择");
System.out.println("1.石头");
System.out.println("2.布");
System.out.println("3.剪刀");
String option = scanner.next();
int optionNumber = Integer.parseInt(option) - 1;//减一是为了保持一致
String[] n = new String[3];
n[0] = "石头";
n[1] = "布";
n[2] = "剪刀";
// int computerOption = (int)((Math.random()*2+1));//先用Math.round取[0,1)的随机数再乘以二变为[0,2)在加一取到[1,3)
int computerOption = (int) (Math.random() * 3);
// if (computerOption - optionNumber == 1 || computerOption - optionNumber == -2)//电脑赢
// {
// System.out.println(oppositeName + "赢他出了:" + n[computerOption]);
// System.out.println(name + "输了出了:" + n[optionNumber]);
// } else if (computerOption - optionNumber == -1 || computerOption - optionNumber == 2) {
// System.out.println(oppositeName + "输他出了:" + n[computerOption]);
// System.out.println(name + "赢了出了:" + n[optionNumber]);
// } else {
// System.out.println("出了" + n[computerOption]);
// System.out.println("我除了" + n[optionNumber]);
// }
switch (computerOption-optionNumber)
{
case -2:System.out.println(oppositeName + "赢他出了:" + n[computerOption]);
System.out.println(name + "输了出了:" + n[optionNumber]);break;
case -1:System.out.println(oppositeName + "输他出了:" + n[computerOption]);
System.out.println(name + "赢了出了:" + n[optionNumber]);break;
case 1: System.out.println(oppositeName + "赢他出了:" + n[computerOption]);
System.out.println(name + "输了出了:" + n[optionNumber]);break;
case 2: System.out.println(oppositeName + "输他出了:" + n[computerOption]);
System.out.println(name + "赢了出了:" + n[optionNumber]);break;
default:
System.out.println("平手出了" + n[computerOption]);
}
}
}
}