Java小程序问题,请高手帮忙改一下
初学Java,写了个猜拳的小程序,有错误不会改了,希望哪位高手指点一下,帮忙改一下,说具体点,谢谢!!//石头,剪刀,布游戏的程序publicclassCai{charm...
初学Java,写了个猜拳的小程序,有错误不会改了,希望哪位高手指点一下,帮忙改一下,说具体点,谢谢!!
//石头,剪刀,布游戏的程序
public class Cai
{
char m; //m为输入的石头,剪刀,布的一种
int n;
public static void main(String args[])
{
Cai cai=new Cai();
cai.pa(); //比较输入的项跟电脑随机的项并输出比较结果
cai.pb(); //电脑随机产生石头,剪刀,布中的一个
}
static char pa(char m)
{
if(m==cai.pb()) //电脑跟玩家出的一样为平局
{
System.out.println("平局,再来!");
}
if(m=="布") //玩家输入的为布,跟电脑随机的比较并输出结果
{
n=0;
String"布"=String.valueOf(n);
if("布"==(pb()-1))
System.out.println("我赢了!");
if("布"==(pb()-2))
System.out.println("我输了!");
}
if(m=="石头") //玩家输入为石头
{
n=1;
String"石头"=String.valueOf(n);
if("石头"==(pb()-1))
System.out.println("我赢了!");
if("石头"==(pb()+1))
System.out.println("我输了!");
}
if(m=="剪刀") //玩家输入为剪刀
{
n=2;
String"剪刀"=String.valueOf(n);
if("剪刀"==(pb()+2))
System.out.println("我赢了!");
if("剪刀"==(pb()+1))
System.out.println("我输了!");
}
}
static int pb() //电脑随机产生3个数,分别代表石头剪刀布,
{
int z;
double da=Math.random();
z=(int)da*2;
return z;
}
} 展开
//石头,剪刀,布游戏的程序
public class Cai
{
char m; //m为输入的石头,剪刀,布的一种
int n;
public static void main(String args[])
{
Cai cai=new Cai();
cai.pa(); //比较输入的项跟电脑随机的项并输出比较结果
cai.pb(); //电脑随机产生石头,剪刀,布中的一个
}
static char pa(char m)
{
if(m==cai.pb()) //电脑跟玩家出的一样为平局
{
System.out.println("平局,再来!");
}
if(m=="布") //玩家输入的为布,跟电脑随机的比较并输出结果
{
n=0;
String"布"=String.valueOf(n);
if("布"==(pb()-1))
System.out.println("我赢了!");
if("布"==(pb()-2))
System.out.println("我输了!");
}
if(m=="石头") //玩家输入为石头
{
n=1;
String"石头"=String.valueOf(n);
if("石头"==(pb()-1))
System.out.println("我赢了!");
if("石头"==(pb()+1))
System.out.println("我输了!");
}
if(m=="剪刀") //玩家输入为剪刀
{
n=2;
String"剪刀"=String.valueOf(n);
if("剪刀"==(pb()+2))
System.out.println("我赢了!");
if("剪刀"==(pb()+1))
System.out.println("我输了!");
}
}
static int pb() //电脑随机产生3个数,分别代表石头剪刀布,
{
int z;
double da=Math.random();
z=(int)da*2;
return z;
}
} 展开
展开全部
有不少错,我重新写了一个……
你这里,首先
String"布"=String.valueOf(n);
这句话很诡异,“布”是字符串常量,就不能放在变量的位置,可以写成String bu = String.valueOf(n);其余类似。
然后,你定义了m为char类型的,应该是不能和String类型的相比较的。在双引号里的就是String的,要单引号才是字符型的。
然后,定义了pa(int) ,在调用的时候就不能无参调用,但是你main()函数里写的pa调用就是无参调用,这样会找不到函数。
再然后,既然pa(int),这个主要的函数都跑完了,不知道你再调用pb()是想做什么。
因为你定义了pa是static的,所以实际上也就不需要再创建Cai的对象出来了。
此外,random方法是定义了0-1的随机数,你乘以2取整的话,是不是只能取到0和1呢?(嗯,即使能取到2,这个取到2的几率也会比较小吧?呃,这个我不清楚,纯粹在怀疑)
然后,下面写了一个,结果由用户的输入决定,界面稍微友好了一点。但是还有很多问题,比如不能处理错误,而且游戏不能重复玩,这些都有点麻烦,所以就没写了,基本的你可以参考下。
有几点:
像这样的情况,用枚举会比较好,这里把石头、剪子、布都放到了枚举类型里;
其次,使用java.util包里的Random类替代Math里的random方法,也比较好一点
import java.util.*;
public class Cai {
enum Res{SHITOU, JIANZI, BU};
Res res;
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Cai cai = new Cai();
System.out.println("请输入你的选择:");
System.out.println("0表示石头,1表示剪子,2表示布");
char yourResultOfChar =(char) System.in.read();
int yourResultOfInt = yourResultOfChar - '0';
int computerResult = pb();
cai.getYourResult(yourResultOfInt);
switch (computerResult)
{
case 0:
System.out.println("电脑选择石头");
break;
case 1:
System.out.println("电脑选择剪子");
break;
case 2:
System.out.println("电脑选择布");
break;
}
cai.pa(computerResult);
}
public void getYourResult(int count)
{
Res[] result = Res.values();
res = result[count];
}
void pa(int computer)
{
Res[] result = Res.values();
if(this.res == Res.SHITOU)
{
System.out.println("我选择石头");
switch(result[computer])
{
case SHITOU:
System.out.println("平局,再来!");
break;
case JIANZI:
System.out.println("我赢了!");
break;
case BU:
System.out.println("我输了!");
break;
}
} else if(this.res == Res.JIANZI)
{
System.out.println("我选择剪子");
switch(result[computer])
{
case JIANZI:
System.out.println("平局,再来!");
break;
case BU:
System.out.println("我赢了!");
break;
case SHITOU:
System.out.println("我输了!");
break;
}
} else if(this.res == Res.BU)
{
System.out.println("我选择布");
switch(result[computer])
{
case BU:
System.out.println("平局,再来!");
break;
case SHITOU:
System.out.println("我赢了!");
break;
case JIANZI:
System.out.println("我输了!");
break;
}
}
}
static int pb()
{
Random ran = new Random();
int res = ran.nextInt(3);
return res;
//输出0-2的整数,0表示石头,1表示剪子,2表示布,和enum Res中的顺序相对应
}
}
你这里,首先
String"布"=String.valueOf(n);
这句话很诡异,“布”是字符串常量,就不能放在变量的位置,可以写成String bu = String.valueOf(n);其余类似。
然后,你定义了m为char类型的,应该是不能和String类型的相比较的。在双引号里的就是String的,要单引号才是字符型的。
然后,定义了pa(int) ,在调用的时候就不能无参调用,但是你main()函数里写的pa调用就是无参调用,这样会找不到函数。
再然后,既然pa(int),这个主要的函数都跑完了,不知道你再调用pb()是想做什么。
因为你定义了pa是static的,所以实际上也就不需要再创建Cai的对象出来了。
此外,random方法是定义了0-1的随机数,你乘以2取整的话,是不是只能取到0和1呢?(嗯,即使能取到2,这个取到2的几率也会比较小吧?呃,这个我不清楚,纯粹在怀疑)
然后,下面写了一个,结果由用户的输入决定,界面稍微友好了一点。但是还有很多问题,比如不能处理错误,而且游戏不能重复玩,这些都有点麻烦,所以就没写了,基本的你可以参考下。
有几点:
像这样的情况,用枚举会比较好,这里把石头、剪子、布都放到了枚举类型里;
其次,使用java.util包里的Random类替代Math里的random方法,也比较好一点
import java.util.*;
public class Cai {
enum Res{SHITOU, JIANZI, BU};
Res res;
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Cai cai = new Cai();
System.out.println("请输入你的选择:");
System.out.println("0表示石头,1表示剪子,2表示布");
char yourResultOfChar =(char) System.in.read();
int yourResultOfInt = yourResultOfChar - '0';
int computerResult = pb();
cai.getYourResult(yourResultOfInt);
switch (computerResult)
{
case 0:
System.out.println("电脑选择石头");
break;
case 1:
System.out.println("电脑选择剪子");
break;
case 2:
System.out.println("电脑选择布");
break;
}
cai.pa(computerResult);
}
public void getYourResult(int count)
{
Res[] result = Res.values();
res = result[count];
}
void pa(int computer)
{
Res[] result = Res.values();
if(this.res == Res.SHITOU)
{
System.out.println("我选择石头");
switch(result[computer])
{
case SHITOU:
System.out.println("平局,再来!");
break;
case JIANZI:
System.out.println("我赢了!");
break;
case BU:
System.out.println("我输了!");
break;
}
} else if(this.res == Res.JIANZI)
{
System.out.println("我选择剪子");
switch(result[computer])
{
case JIANZI:
System.out.println("平局,再来!");
break;
case BU:
System.out.println("我赢了!");
break;
case SHITOU:
System.out.println("我输了!");
break;
}
} else if(this.res == Res.BU)
{
System.out.println("我选择布");
switch(result[computer])
{
case BU:
System.out.println("平局,再来!");
break;
case SHITOU:
System.out.println("我赢了!");
break;
case JIANZI:
System.out.println("我输了!");
break;
}
}
}
static int pb()
{
Random ran = new Random();
int res = ran.nextInt(3);
return res;
//输出0-2的整数,0表示石头,1表示剪子,2表示布,和enum Res中的顺序相对应
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询