[英]How do I make one random generated number equal to another?
I have two different random number generators: "numtofind" and "num". 我有两个不同的随机数生成器:“ numtofind”和“ num”。 The first one puts a number from 1 to 50 into a textView("textNumberToHit")
and the second one puts a number from 1 to 50 to another ten textViews("textGeneratenumber1-12")
. 第一个将1到50的数字放入textView("textNumberToHit")
,第二个将1到50的数字放入另外十个textViews("textGeneratenumber1-12")
。
When the game starts, I want the first textView("textNumberToHit")
to be contained in one of the other textView("textGeneratenumber")
elements. 游戏开始时,我希望第一个textView("textNumberToHit")
包含在其他textView("textGeneratenumber")
元素之一中。 That is, if textView("textNumberToHit")
is 17, 17 should appear in one of the other elements. 也就是说,如果textView("textNumberToHit")
为17,则17应该出现在其他元素之一中。 I want that to happen when a "buttonGenerate" button is pressed. 我希望在按下“ buttonGenerate”按钮时发生这种情况。
While I can press the button, I am having trouble finding a way of doing the above logic. 虽然可以按按钮,但我很难找到一种执行上述逻辑的方法。
Here is the code for textNumberToHit: 这是textNumberToHit的代码:
final Random numtofind = new Random();
final TextView textNumberToHit = (TextView) findViewById(R.id.numbertofind);
textNumberToHit.setText(String.valueOf(numtofind.nextInt(51)));
Here is the code for textGeneratenumber: 这是textGeneratenumber的代码:
final Random num = new Random();
buttongenerate.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
buttongenerate.setBackgroundResource(R.drawable.pressedbut);
textGenerateNumber1.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber2.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber3.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber4.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber5.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber6.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber7.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber8.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber9.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber10.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber11.setText(String.valueOf(num.nextInt(51)));
textGenerateNumber12.setText(String.valueOf(num.nextInt(51)));
break;
case MotionEvent.ACTION_UP:
buttongenerate.setBackgroundResource(R.drawable.normalbut);
break;
}
return true;
}
});
Here is a picture for you to better understand: 这是一张图片,您可以更好地了解:
How would I accomplish this? 我将如何完成?
Think about it this way. 这样想吧。 Here is a (simplified) procedure based on what you are asking. 根据您的要求,这是一个(简化的)过程。
Q: What is the logical / mathematical flaw in the description of that procedure? 问:该程序描述中的逻辑/数学缺陷是什么?
A: Clearly the second number is NOT a random number! 答:显然第二个数字不是随机数!
So here's what you need to do. 这就是您需要做的。 (Simplified version!) (简体版!)
.... or something like that. .... 或类似的东西。
1 - At least, I assume they need to be different. 1-至少,我认为它们需要有所不同。 Your game is going to look rather odd if you occasionally see the "number to be found" on multiple buttons .... 如果您偶尔在多个按钮上看到“要查找的数字”,则您的游戏看起来会很奇怪。
Something I would recommend to begin with is rather than having 12 static TextView's to use a GridView: https://developer.android.com/guide/topics/ui/layout/gridview.html 我建议首先使用的不是使用GridView的12个静态TextView: https : //developer.android.com/guide/topics/ui/layout/gridview.html
To Answer your question with what you have though; 用什么来回答你的问题; This is how i would approach the problem: 这就是我要解决的问题:
Steps: 脚步:
Code: 码:
final Random numtofind = new Random();
final int numtofindValue = numtofind.nextInt(51);
final TextView textNumberToHit = (TextView) findViewById(R.id.numbertofind);
textNumberToHit.setText(String.valueOf(numtofindValue));
final Random num = new Random();
final Random textViewToSet = new Random();
// reason i am adding 1 is because nextInt(int num) returns a random number from 0 up to but not including the value of the param "num"
// http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt(int)
// and since you have 12 textviews and we want to get one of those we need to add one so the range of random numbers will be 1-12 instead of 0-11.
int textViewToSetValue = textViewToSet.nextInt(12) + 1; // which textview to set the value of numtofind
// populate hashmap with textviews
Map<Integer, TextView> textViews = new HashMap<>();
// not an efficient way of doing this - but since you are not using a GridView its the only way
textViews.put(1, textGenerateNumber1);
textViews.put(2, textGenerateNumber2);
textViews.put(3, textGenerateNumber3);
textViews.put(4, textGenerateNumber4);
textViews.put(5, textGenerateNumber5);
textViews.put(6, textGenerateNumber6);
textViews.put(7, textGenerateNumber7);
textViews.put(8, textGenerateNumber8);
textViews.put(9, textGenerateNumber9);
textViews.put(10, textGenerateNumber10);
textViews.put(11, textGenerateNumber11);
textViews.put(12, textGenerateNumber12);
TextView tvToSet = textViews.get(textViewToSetValue); // this will get the textview for a number 1 - 12
// set value of textView
tvToSet.setText(String.valueOf(numtofindValue));
buttongenerate.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
buttongenerate.setBackgroundResource(R.drawable.pressedbut);
// loop through the remaining textViews and set their values to random values
for (Map.Entry<Integer, TextView> entry : textViews.entrySet(){
// make sure we dont reset the value we set earlier
if(entry.getKey() != textViewToSetValue){
entry.getValue().setText(num.nextInt(51));
}
}
break;
case MotionEvent.ACTION_UP:
buttongenerate.setBackgroundResource(R.drawable.normalbut);
break;
}
return true;
}
});
The first thing is, you want to store the value of generated number to hit: 第一件事是,您要存储要打的生成数字的值:
final Random numtofind = new Random();
final TextView textNumberToHit = (TextView) findViewById(R.id.numbertofind);
int generatedNumber = numtofind.nextInt(51);
textNumberToHit.setText(String.valueOf(generatedNumber));
Now, you are generating 12 other random numbers for your textGenerateNumber. 现在,您正在为textGenerateNumber生成其他12个随机数。 There are following problems with it: 它存在以下问题:
So, first I would create 12 unique randoms. 因此,首先,我将创建12个唯一随机数。
ArrayList<Integer> wrongNumbers = new ArrayList<Integer>();
int wrongNumber = 0;
//I will not write the exact code. You will need to do them but the logic is correct.
for(loop from 1 to 50) //you would not be looping 50 times. It is very unlikely that you won't get 12 random numbers even in 50 times (worst case)
{
wrongNumber = numtofind.nextInt(51);
if(wrongNumber DOES NOT EXIST IN wrongNumbers)
{
wrongNumber => (PUSH TO ARRAY(wrongNumbers))
}
if(wrongNumbers.SIZE => 12) //You know have 12 numbers
{exit from this for loop;}
}
//Now create the textGenerateNumbers in loop.
buttongenerate.setBackgroundResource(R.drawable.pressedbut);
for(loop from int i = 0 => 11)
{
textGenerateNumber[i + 1].setText(wrongNumbers[i]); //as your textGenerateNumber is from 1-12
}
//Create a random value from 0-11 to hold the correct value.
int correctIndex = numtofind.nextInt(11);
//Finally, override the value at the correctIndex with your number to hit.
textGenerateNumber[correctIndex] = generatedNumber;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.