两个随机数始终以相同的数字开头

时间:2014-07-02 06:59:15

标签: android random

我对Android很陌生,所以请不要因为问一个愚蠢的问题而开枪。 我已经检查了'Stackoverflow'和许多其他网站,但似乎无法找到正确的答案......

我正在创建一个简单的数学应用程序来帮助我女儿的数学。 当我尝试创建两个随机数时,假设乘法表为1,它们总是以两个相同的数字(8x7)开头。 点击我的提交按钮后,我得到'正确'的数字,这意味着第一个数字是'1',第二个数字是'0'和'11'之间的数字。

感谢任何帮助。 谢谢!

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class Vermenigvuldig extends Activity implements OnClickListener {

TextView firstNumber;
TextView secondNumber;
TextView times_sign, equals_sign, ok;
EditText answer;
Button submit;
int solution;

// int firstNumberB, secondNumberB;
ImageView thumbs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.vermenigvuldig);

    firstNumber = (TextView) findViewById(R.id.tv_fnum);
    secondNumber = (TextView) findViewById(R.id.tv_snum);
    times_sign = (TextView) findViewById(R.id.tv_x);
    answer = (EditText) findViewById(R.id.et_answer);
    submit = (Button) findViewById(R.id.b_submit);
    submit.setOnClickListener(this);
    thumbs = (ImageView) findViewById(R.id.iv_thumbs);

}

@Override
public void onClick(View v) {

    Random myRandom = new Random();
    switch (v.getId()) {
    case R.id.b_submit:

        int test1 = Integer.parseInt(firstNumber.getText().toString());
        int test2 = Integer.parseInt(secondNumber.getText().toString());

        solution = test1 * test2;

        firstNumber.setText(String.valueOf(myRandom.nextInt(10)));
        secondNumber.setText(String.valueOf(myRandom.nextInt(10)));
        int outcome = Integer.parseInt(answer.getText().toString());
        if (outcome == solution) {
            thumbs.setImageResource(R.drawable.thumbsup);
        } else {
            thumbs.setImageResource(R.drawable.thumbsdown);
        }

        answer.setText("");
        break;
    }
}
} 

2 个答案:

答案 0 :(得分:0)

你被所有测试人员的噩梦所困扰。 Test a random number generator。没有办法测试任何算法的随机性。我建议你生成一个更大的随机数并修改它以获得一个足够随机的数字。样本越小,你的算法越随意,你无能为力。它的数学。

希望我已经暗示你回答。

答案 1 :(得分:0)

你可以制作一种不那么干净的解决方案。检查随机值,如果它们与之前的数字相同,则再次开始随机。如果随机数总是相同的话,理论上这可能会在循环中挂起一段时间。但我想,在这个小应用程序中,应该没问题。例如,首先将整数值设为全局:

   private int valueOneOldValue=0;
   private int valueTwoOldValue=0;
   private Random myRandom = new Random();

然后将其全部用自己的方法分开:

   private int generateOutcome{

       int out = myRandom.nextInt(10);
       return out;
   }

然后检查它是否与以前相同:

   private boolean isEqual(int oldValue, int newValue){

        boolean equal=false;

     if(oldValue==newValue){
           equal=true;
     }else{
           equal=false;
     }   
    return equal;
    }

然后做剩下的事情:

  private void generateExercise(){         

    int firstValue = generateOutcome();
    int secondValue = generateOutcome();

    if(isEqual(valueOneOldValue,firstValue)==true){

     generateExercise();

    }else{

     if(isEqual(valueTwoOldValue,secondValue)==true){

        generateExercise();
      }else{

          setValues(firstValue,secondValue);
      }

    }
  }

并设置您的值,如果一切正常:

    private void setValues(int first, int second){

     int test1 = Integer.parseInt(firstNumber.getText().toString());
    int test2 = Integer.parseInt(secondNumber.getText().toString());

    solution = test1 * test2;

     firstNumber.setText(String.valueOf(first));
    secondNumber.setText(String.valueOf(second));
    int outcome = Integer.parseInt(answer.getText().toString());
    if (outcome == solution) {
        thumbs.setImageResource(R.drawable.thumbsup);
    } else {
        thumbs.setImageResource(R.drawable.thumbsdown);
    }

    answer.setText("");
    valueOneOldValue = first;
    valueTwoOldValue = second;

   }

并在onButtonClick上调用它:

       generateExercise();

这只是一个想法,现在没有经过测试。如果您认为它可能是您的问题的解决方案,但您有问题或该代码的任何错误(因为我现在无法测试),请告诉我。