Java方法本应返回随机数却输出0.0,求故障排查
问题排查与修复方案
问题背景
这是编程入门课程的任务:需在海龟图形显示器的随机位置绘制多种图形,为确保坐标在画布内,需使用public int generateCoordinate(int limit)方法(limit值应为35,用于修正随机数避免越界),但调用该方法时返回值始终显示为0。以下是limit设为5的原始代码:
public class debug { private int x; private int coord; /** * Constructor for objects of class debug */ public debug() { generateCoordinate(5); System.out.println(coord); } public int generateCoordinate(int limit){ double coord = (Math.random()*301-159); if (coord < (-150+limit)) return (int)coord + limit; if (coord > (150-limit)) return (int)coord - limit; return (int)coord; } }
问题原因
- 成员变量未被赋值:构造方法中调用
generateCoordinate(5)后,没有将返回值赋值给类的成员变量coord,成员变量默认初始值为0,因此打印结果始终是0。 - 变量遮蔽:
generateCoordinate方法内定义了局部变量double coord,覆盖了类的成员变量coord,导致成员变量无法获取方法内的计算结果。 - 随机数范围错误:原代码中
Math.random()*301-159生成的随机数范围是[-159, 142),与画布预期的[-150,150]有效范围不符,初始随机数就存在越界问题。
修复方案
- 将
generateCoordinate方法的返回值赋值给成员变量coord,确保成员变量被更新。 - 重命名方法内的局部变量,避免遮蔽成员变量。
- 修正随机数生成公式,让初始范围匹配画布有效区间。
修复后的代码
public class Debug { private int coord; /** * Constructor for objects of class Debug */ public Debug() { // 接收方法返回值,更新成员变量 coord = generateCoordinate(5); System.out.println(coord); } public int generateCoordinate(int limit) { // 生成[-150, 151)区间的随机数,匹配画布有效范围 double randomCoord = Math.random() * 301 - 150; if (randomCoord < (-150 + limit)) { return (int) randomCoord + limit; } if (randomCoord > (150 - limit)) { return (int) randomCoord - limit; } return (int) randomCoord; } }
修复说明
- 类名修改为
Debug(符合Java大驼峰命名规范)。 - 构造方法中通过
coord = generateCoordinate(5)将方法返回值赋值给成员变量,解决初始值为0的问题。 - 方法内用
randomCoord代替原局部变量coord,避免遮蔽成员变量。 - 修正随机数公式为
Math.random() * 301 - 150,生成[-150,151)的随机数,更贴合画布有效范围,减少不必要的边界修正。 - 当limit设为35时,最终坐标会被限制在
[-115, 115]区间内,确保不会超出画布边界。
内容的提问来源于stack exchange,提问作者Mars
相关产品推荐
相关产品推荐

