Android Studio按钮生成随机数的变量作用域问题求解
解决Android Studio中变量作用域与跨方法访问问题
嘿,我来帮你搞定这个问题!
首先,咱们先明确问题根源:你在NewNumOnClick方法里定义的RandomNumberGenerated是局部变量,它的作用域只限于这个方法内部,所以GuessOnClick方法根本看不到它,这就是你遇到的“变量超出作用域”问题。
关于指针的疑问
先直接给答案:Java里没有像C/C++那样的指针,所以没法用指针来解决这个问题。咱们得用Java面向对象的方式来处理。
最优解决方案:将变量提升为类成员变量
把RandomNumberGenerated定义为MainActivity类的成员变量,这样类里的所有方法都能访问到它。修改后的代码如下:
public class MainActivity extends AppCompatActivity { Random rand = new Random(); // 把变量提升为类成员变量,让两个方法都能访问 private int RandomNumberGenerated; public void NewNumOnClick (View view){ // 直接给成员变量赋值,不需要再重新定义 RandomNumberGenerated = 1+ rand.nextInt(20); } public void GuessOnClick(View view){ EditText numberGuessed = (EditText) findViewById(R.id.numberGuessedET); int input = Integer.parseInt(numberGuessed.getText().toString()); Log.i("Status : " , "The user entered " + input); // 可选优化:先判断用户是否已经生成了随机数 if (RandomNumberGenerated == 0) { Toast.makeText(this,"请先点击按钮生成随机数!", Toast.LENGTH_LONG).show(); return; } if (input > 20 || input < 1){ Toast.makeText(this,"The number you entered is out of range. Please enter #1-20", Toast.LENGTH_LONG).show(); } else if (RandomNumberGenerated == input){ Toast.makeText(this,"YOU GUESSED IT RIGHT!", Toast.LENGTH_LONG).show(); } else if(input > RandomNumberGenerated){ Toast.makeText(this,"Try a lower number", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this,"Try a higher number", Toast.LENGTH_LONG).show(); } } }
为什么这样可行?
- 类成员变量的作用域覆盖整个类的实例,所以
NewNumOnClick可以给它赋值,GuessOnClick可以读取它的值。 - 我还帮你优化了条件判断:用
else if代替多个独立的if,避免多个Toast同时弹出的问题;另外加了一个判断,提醒用户先生成随机数(因为成员变量默认初始值是0,而你的随机数范围是1-20,所以可以用这个来判断是否已经生成过)。
其他可选思路(不推荐)
- 你也可以用
SharedPreferences或者全局单例来存储这个随机数,但对于这个简单的场景来说,类成员变量是最直接、最轻量化的方案。
内容的提问来源于stack exchange,提问作者ViciousKing RFNA
相关产品推荐
相关产品推荐

