我对java很陌生,但我尝试使用我有限的知识模拟手指游戏,' Sticks'这可能不是最好的,但是如果您要对我做一些建议,请链接一个解释该事情的页面,并且我会阅读它。
好的,所以问题基本上出现了,当我打电话给一个方法来决定是谁并且试图返回" count"最多5,但它没有返回main()
public static int TurnCalcBB(int PLH, int PRH, int BRH, int BLH, int Death)
{
//Attacking with bot Right hand
Random botAtk = new Random();
if(botAtk.nextInt(2) == 1 && PRH <= 5)
{
PRH = BRH + PRH;
JOptionPane.showMessageDialog(null,"Your right hand is now at " + PRH);
return PRH;
} else if(botAtk.nextInt(2) == 0 && PLH <= 5){
PLH = BRH + PLH;
JOptionPane.showMessageDialog(null, "Your left hand is now at " + PLH);
return PLH;
}
return Death;
}
死亡就在那里,因为我收到一个错误告诉我,我总是需要返回SOMETHING,以便我返回一个静态值。
基本上,问题是让PLH(玩家左手)或PRH(玩家右手)返回主。如果我没错,他们应该返回初始变量名(PL和PR),返回值是否正确?如果没有,我该怎么做才能解决这个问题?
代码比这个大很多,这个问题在整个程序中都会发生,所以我只展示了一种方法并假设它们都是同一个问题;方法几乎都是一样的。
另外,虽然我已经输入了一个问题,但是nextInt()是做随机数生成器的最佳方法吗?当我把它作为nextInt(1)时它只是攻击左手,当我把它切换到nextInt(2)时它现在攻击两者,但偶尔会攻击代码......&#34;崩溃&#34 ; (我的意思是崩溃是因为它在If语句寻找之外生成一个数字)。我显然需要生成1或2(或0和1,如果0计数)。
答案 0 :(得分:1)
您可以将代码更改为
public static Integer TurnCalcBB(int PLH, int PRH, int BRH, int BLH, int Death)
{
//Attacking with bot Right hand
Random botAtk = new Random();
if(botAtk.nextInt(2) == 1 && PRH <= 5)
{
PRH = BRH + PRH;
JOptionPane.showMessageDialog(null,"Your right hand is now at " + PRH);
return PRH;
} else if(botAtk.nextInt(2) == 0 && PLH <= 5){
PLH = BRH + PLH;
JOptionPane.showMessageDialog(null, "Your left hand is now at " + PLH);
return PLH;
}
return null;
}
注意:请确保首先检查调用此函数的空值。
答案 1 :(得分:0)
您正在生成两次随机数,这就是您可以观察到“奇怪”行为的原因。
Random botAtk = new Random();
if(botAtk.nextInt(2) == 1 && PRH <= 5) {
...
}
else if(botAtk.nextInt(2) == 0 && PLH <= 5) {
...
}
尝试只生成一次随机:
Random botAtk = new Random();
boolean right = botAtk.nextInt(2) == 1; // flip coin only once
if(right && PRH <= 5) {
...
}
else if(!right && PLH <= 5) {
...
}
答案 2 :(得分:0)
我知道答案不会被接受,因为有一个被接受的答案,但是:
我怀疑您对Java中的方法参数传递有错误的理解。 我从你的问题和评论中读到的是你希望这个有效:
public static int psInt = 0;
static void main() {
int someNumber = 1;
int someOtherNumber = 5;
method1( someNumber, someOtherNumber );
// You expect "someNumber" to be 6 right now.
// But in fact, the value will be unchanged.
// What WILL work: psInt is 0 now
method3(); // this method will modify the static class var
// psInt is 5 now.
}
static void method1( int numParam, int someothervalue ){
numParam = numParam + someothervalue;
}
static void method2( int someNumber, int someothervalue ){
someNumber = someNumber + someothervalue; // <- same name won't work either!
}
public static void method3(){
psInt = 5;
}
但是在Java方法中,参数是按值传递的。那是:副本! 所以无论你如何命名变量和参数,你都永远不会有一个&#34; out&#34;这里的论点。
可以做什么:
在你的情况下,4。没有多大意义,因为你不知道它是新的右手还是左手值。