Java中如何在一个方法内使用另一个方法生成的数值?
问题原因分析
你的代码出错核心是三个问题:
- 变量遮蔽问题:你已经在类顶部定义了
static int getRandomNumber、static int mDifference等静态变量,但在getRandomNum()方法内部又重新定义了同名的局部变量。方法运行时所有操作都是针对局部变量的,方法执行结束后局部变量直接销毁,类静态变量的值始终是初始化的0。 - 静态变量初始化时机错误:你在类层面定义了
static int m = getRandomNumber,这个赋值操作是在类加载阶段就执行的,此时getRandomNumber还没被赋值为随机数,值为0,后续即使getRandomNumber被修改,m的值也不会自动更新。 - 变量作用域问题:
getRandomNum()末尾的int m = getRandomNumber是方法局部变量,运行完就销毁,根本没有把生成的随机数存到全局可用的位置;reverseDigits()末尾的int n = reverseDigits也是局部变量,计算完的反转结果没有对外暴露。
修复方案
- 删除
getRandomNum()方法内部和类静态变量同名的局部变量定义,直接操作类静态变量 - 取消类层面的
static int m定义,在getRandomNum()方法里直接把生成的随机数赋值给类静态变量 - 给
reverseDigits()方法添加返回值,或者把反转结果存入类静态变量,同时增加输出语句验证运行结果
修复后的完整代码
public class MathTrick { static int upperBound = 999; static int lowerBound = 100; // 存储生成的随机三位数 static int randomNum = 0; public static void main(String[]args) { getRandomNum(); System.out.println("生成的随机三位数:" + randomNum); int reversedNum = reverseDigits(); System.out.println("反转后的数字:" + reversedNum); } static void getRandomNum() { int mDifference = 0; while (mDifference <= 1) { randomNum = (int)(Math.random()*((upperBound-lowerBound)+1)) + lowerBound; int x = randomNum / 100; int y = randomNum % 10; mDifference = Math.abs(x-y); } } static int reverseDigits() { int a = randomNum; int reverseResult = 0; while (a != 0) { int remainder = a % 10; reverseResult = reverseResult * 10 + remainder; a = a / 10; } return reverseResult; } }
内容的提问来源于stack exchange,提问作者Man Hei Li
相关产品推荐
相关产品推荐

