Java 如何使一个随机生成的数字等于另一个?
我有两个不同的随机数生成器:“numtofind”和“num”。第一个将1到50之间的数字放入Java 如何使一个随机生成的数字等于另一个?,java,android,random,Java,Android,Random,我有两个不同的随机数生成器:“numtofind”和“num”。第一个将1到50之间的数字放入文本视图(“textNumberToHit”),第二个将1到50之间的数字放入另十个文本视图(“textGenerateEnumber1-12”) 当游戏开始时,我希望第一个textView(“textNumberToHit”)包含在另一个textView(“textGeneratenumber”)元素中。也就是说,如果textView(“textNumberToHit”)为17,则17应出现在其他元素
文本视图(“textNumberToHit”)
,第二个将1到50之间的数字放入另十个文本视图(“textGenerateEnumber1-12”)
当游戏开始时,我希望第一个textView(“textNumberToHit”)
包含在另一个textView(“textGeneratenumber”)
元素中。也就是说,如果textView(“textNumberToHit”)
为17,则17应出现在其他元素之一中。我希望在按下“buttonGenerate”按钮时发生这种情况
虽然我可以按下按钮,但我很难找到执行上述逻辑的方法
以下是textNumberToHit的代码:
final Random numtofind = new Random();
final TextView textNumberToHit = (TextView) findViewById(R.id.numbertofind);
textNumberToHit.setText(String.valueOf(numtofind.nextInt(51)));
以下是TextGenerateEnumber的代码:
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;
}
});
下面是一张让您更好理解的图片:
我该如何做到这一点?这样想。这里有一个(简化的)程序,基于您的要求
A:很明显,第二个数字不是随机数 这就是你需要做的。(简化版!)
1-至少,我认为他们需要与众不同。如果你偶尔在多个按钮上看到“要找到的号码”,你的游戏看起来会很奇怪……这样想吧。这里有一个(简化的)程序,基于您的要求
A:很明显,第二个数字不是随机数 这就是你需要做的。(简化版!)
1-至少,我认为他们需要与众不同。如果你偶尔在多个按钮上看到“要找到的号码”,你的游戏看起来会很奇怪……我建议首先使用GridView而不是12个静态文本视图: 用你的想法回答你的问题;这就是我处理问题的方法: 步骤:
final Random numtofind=new Random();
最终整数numtofind值=numtofind.nextInt(51);
最终文本视图textNumberToHit=(文本视图)findViewById(R.id.numbertofind);
textnumbertofit.setText(String.valueOf(numtofinvalue));
最终随机数=新随机数();
最终随机文本VIEWTOSET=新随机();
//我添加1的原因是因为nextInt(int num)返回一个从0到的随机数,但不包括参数“num”的值
// http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt(国际)
//既然你有12个文本视图,我们想得到其中一个,我们需要添加一个,这样随机数的范围将是1-12,而不是0-11。
int textViewToSetValue=textViewToSet.nextInt(12)+1;//哪个textview设置numtofId的值
//用文本视图填充hashmap
Map textViews=新建HashMap();
//这不是一种有效的方法,但由于您没有使用GridView,这是唯一的方法
textViews.put(1,textGenerateEnumber1);
textViews.put(2,textGenerateEnumber2);
textViews.put(3,textGenerateEnumber3);
textViews.put(4,textGenerateEnumber4);
textViews.put(5,textGenerateNumber5);
textViews.put(6,textGenerateEnumber6);
textViews.put(7,textGenerateNumber7);
textViews.put(8,textGenerateEnumber8);
textViews.put(9,text9);
textViews.put(10,textGenerateNumber10);
textViews.put(11,textGenerateNumber11);
textViews.put(12,textGenerateNumber12);
TextView tvToSet=textViews.get(textViewToSetValue);//这将获得数字1-12的文本视图
//设置textView的值
setText(String.valueOf(numtofindValue));
buttongenerate.setOnTouchListener(新视图.OnTouchListener(){
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
按钮Generate.setBackgroundResource(R.drawable.pressedbut);
//循环浏览其余的文本视图,并将其值设置为随机值
对于(Map.Entry:textViews.entrySet(){
//确保我们没有重置之前设置的值
if(entry.getKey()!=textViewToSetValue){
entry.getValue().setText(num.nextInt(51));
}
}
打破
case MotionEvent.ACTION\u UP:
buttongenerate.setBackgroundResource(R.drawable.normalbut);
打破
}
返回true;
}
});
我建议首先使用GridView,而不是使用12个静态TextView:
用你的想法回答你的问题;这就是我如何解决这个问题的方法:
步骤:
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;
}
});
final Random numtofind = new Random();
final TextView textNumberToHit = (TextView) findViewById(R.id.numbertofind);
int generatedNumber = numtofind.nextInt(51);
textNumberToHit.setText(String.valueOf(generatedNumber));
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;