2013-04-23 98 views
0

我遇到的问题是非常基本的,但是这是我没有很好地掌握的东西。下面的程序使用递归来计算给定数量的骰子(由用户输入)总计为用户选择的数字的概率。Diceroll概率方法结构

据我所知,方法DiceRoll是Diceroll类的一部分。但是,当我尝试调用该方法时,出现错误。我相信这个计划的结构有一些根本性的错误。有人可以帮我吗?

import java.util.Scanner; 

public class DiceRoll { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     double dice = 0; 
     int r = 0; 
     System.out.println("Please input the number of dice you wish to roll between 0 and 25: "); 
     if (in.nextInt() < 0 || in.nextInt() > 25){ 
      System.out.println("invalid number of dice"); 
     } else { 
      dice = in.nextInt();    
     } 
     System.out.println("What number between 0 and 125 do you wish to roll?"); 
     if (in.nextInt() < 0 || in.nextInt() > 125) { 
      System.out.println("invalid number, please choose between 0 and 125"); 
     } else { 
      r = in.nextInt(); 
     } 
    } 

    double DiceRoll(double dice,int r) { 
     if (dice==1 && (r<1 || r>6)){ 
      return 0; 
     } 
     if (dice==1 && (r>=1 && r<=6)){ 
      return (1.0/6); 
     } else { 
      return ((1.0/6)*DiceRoll(dice-1,r-1)); 
     } 
    } 
} 

DiceRoll(dice, r) 
+0

您至少可以尝试格式化您的问题。 – 2013-04-23 22:49:48

+0

我的道歉,猎人。我会尝试编辑它。 – purpscurp 2013-04-23 22:50:57

+0

@MrD对不起,我已经编辑过这个问题。 – 2013-04-23 22:54:26

回答

0

从主方法^ _ ^内部取出Diceroll方法
编辑: 实现DiceRoll方法不是主要的方法内声明,但在调用它被放置的主要方法之外,内部移动它它应该可以工作

+0

DiceRoll不在他们的主要方法中。 – 2013-04-23 22:50:43

2

Java中的所有代码都需要包含在方法或类中。你不能只是打电话给DiceRoll漂浮在你的班级中间。

你真正想要做的是从用户那里获取你的输入,然后在方法调用DiceRollmain里面输入。

+0

你能帮我分解这个程序的确切结构吗?据我所知,DiceRoll类包含了包含扫描器和方法的主要方法DiceRoll,它依赖于变量dice和r。从Neil的评论中,我将DiceRoll方法转移到主要方法中。你是说我可以在主方法中调用DiceRoll方法,它应该可以工作吗? – purpscurp 2013-04-23 23:05:58

+0

没关系,我已经想出了大部分。我将DiceRoll方法放在主方法外(但仍在类中),并在主方法中调用方法。谢谢!现在我需要在递归部分工作,但这似乎并不困难。 – purpscurp 2013-04-23 23:36:02

0

您需要删除行

DiceRoll(dice, r) 

此外,而不是使用

double DiceRoll(double dice,int r) 

这需要您实例化一个对象,使用

static double RollDice(double dice, int r) 

为静态方法,您不必实例化该类型的对象以使其工作。我也将它重命名,以便编译器不会抱怨它看起来像一个无效的构造函数方法。使用静态方法,您只需在main方法的末尾拨打

RollDice(dice, r) 

你的代码还有另一个问题 - 输入不会像你想要的那样行为。我假设你想要检查输入是否有效,然后再询问是否不合适。目前,它会说它是无效的,然后什么也不做,但是当它有效时,它会立即期待另一个数字。改变你的语句是这样的:

System.out.println("Please input the number of dice you wish to roll between 0 and 25: "); 
dice = in.nextInt(); 
while (dice < 0 || dice > 25){ 
    System.out.println("invalid number of dice"); 
    dice = in.nextInt();    
} 

,直到他们提供有效的输入这只会得到另一个号码,如果他们进入一个无效的号码,并且会循环。

+0

哦,我很确定,你的算法计算概率不会给出正确的答案。 – 2013-04-23 23:07:33