【问题标题】:Call random methods in Android在 Android 中调用随机方法
【发布时间】:2014-03-06 17:15:20
【问题描述】:

我有一个问题,我真的不知道是否有可能实现它。情况就是这样;我有五种方法和一个按钮。实际上,如果我想调用一个方法,点击我写的按钮:

    btnore.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            //i call the method I need
            Met_one();
        }
    });

我需要做的是:

    btnore.setOnClickListener(new View.OnClickListener() {
    @Override
        public void onClick(View arg0) {
            // a random function call the methods. 
            Random = random of the methods(Met_one,     Met_two,Met_three,Met_four,Met_five)
        }   
    });

因此,当我点击按钮时,有时它会执行一种操作,有时会随机执行另一种操作。有可能吗?

【问题讨论】:

  • 一种简单的方法是生成一个从 1 到 5 的随机数,然后在 switch 语句中根据获得的随机数执行一种或另一种方法。
  • @ClaudioRedi 在上述评论中的明显解决方案将吸引一些模仿的答案——选择 Sergey 的 :)
  • 你能给我举个例子吗? O se sei italiano, potresti postare un esempio? :-)

标签: java android random onclick


【解决方案1】:

我认为最好的解决方案是使用带有随机数的开关

类似这样的:

Random random = new Random();
int numberOfMethods = 4;

switch(random.nextInt(numberOfMethods)) {
     case 0: 
          method1();
          break;
     case 1: 
          method2();
          break;
     case 2: 
          method3();
          break;
     case 3: 
          method4();
          break;
     default: 
     method1();
}

【讨论】:

  • nextInt() % numberOfMethods代替nextInt( numberOfMethods )
  • 为什么要提供默认值?或者,为什么case 3: 实际上不是default
  • 是的,这里的默认部分真的没用。
【解决方案2】:

在 java Math.random() * 5 中,这将返回 [0,5] 范围内的值。当您按下按钮时,您可以调用它。

onCreate里面

Button btn1=(Button)findViewById(R.id.button1);
btn1.setOnClickListener(btnOnClickListener);

Button.OnClickListener btnOnClickListener=new Button.OnClickListener()
    {

     @Override
     public void onClick(View v) {

          if(v==b1)
{
// your Math.random() * 5 function can invoke.
}

     }

【讨论】:

    【解决方案3】:

    是的,这是可能的。如果您有固定数量的方法,则概率将为 1/n。例如,使用 5,概率为 0.2。你可以有这样的东西,每次单击按钮时都会重新生成 rand:

    if (rand < 0.2)
        Met_one()
    else if (rand < 0.4)
        Met_two()
    else if (rand < 0.6)
        Met_three()
    ... etc
    

    【讨论】:

    • rand 是您生成的介于 0 到 1 之间的随机数。检查 Java 中的 Math.random()。不必介于 0 到 1 之间,例如,您可以从 0 到 100。如果您有两个函数,那么在 50% 的时间里,您将使用 met_one(); met_two 的 50%。如果你有三个,你会在 33% 的时间里去每个,等等。
    • @323go:我确信这种语气没有必要。你能详细说明为什么你认为这如此可怕吗?
    • 这是非常低效和混乱的。 switch 语句将是对此的自然选择,这意味着 rand 需要是 integer,导致 Random.nextInt。浮点数上的一串if else 语句只是糟糕的设计。 switch 生成的字节码也相当简洁,而 @Hajjat​​ 提出的“解决方案”会导致多次浮点比较。
    • 这只是一个高层次想法的速写,具体的实现留给程序员。我认为我们不应该灌输答案。
    • @Paul,我只会在这种情况下使用文字值——在其他情况下通常会使用标识符,或者最好是枚举。
    猜你喜欢
    • 2012-08-28
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2011-10-20
    相关资源
    最近更新 更多