从方法java返回int值

时间:2014-09-11 18:26:02

标签: java random return

我对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计数)。

3 个答案:

答案 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;这里的论点。

可以做什么:

  1. 在静态方法中,您可以使用和修改静态类变量。
  2. 在非静态方法中,您可以使用和修改非静态和静态类变量。
  3. 您可以传递State-Object,您可以在其中修改字段值。
  4. 您可以返回一个值。
  5. ......还有更多可能性。这些只是为了开始。
  6. 在你的情况下,4。没有多大意义,因为你不知道它是新的右手还是左手值。