如何在同包类中用Scanner获取输入并在另一个类使用?代码错误排查
问题分析与修正方案
嘿,我来帮你梳理下代码里的问题,以及如何实现「在一个类获取用户输入,传递给同包另一个类」的需求~
你代码里的两个核心错误
- 语法错误:对void方法赋值
c1.setRadius() = in.nextDouble();这行写法不对。setRadius()是返回值为void的方法,你不能把输入的数值赋值给它,正确的做法是把输入值作为参数传递给这个方法。 - Circle类缺少成员变量
你的Circle类里没有声明radius这个实例变量,导致setRadius和getRadius方法里的this.radius找不到对应的变量,编译会报错。
修正后的完整代码
TestCircle1类
package testcircle1; import java.util.Scanner; public class TestCircle1 { public static void main(String[] args) { System.out.println("Welcome!!!!"); Circle c1 = new Circle(); Scanner in = new Scanner(System.in); System.out.println("Please enter a number"); // 把输入值作为参数传给setRadius方法 double inputRadius = in.nextDouble(); c1.setRadius(inputRadius); System.out.println(c1.getRadius()); in.close(); // 记得关闭Scanner资源 } }
Circle类
package testcircle1; public class Circle { // 新增radius成员变量,用private封装 private double radius; public Circle() { // 默认构造函数可以初始化radius为0 this.radius = 0; } public Circle(double radius) { // 带参构造函数调用setRadius,复用校验逻辑 setRadius(radius); } public void setRadius(double radius) { if (radius >= 0) this.radius = radius; } public double getRadius() { return radius; } }
关于同包类之间的输入传递逻辑
你想要的效果其实就是通过对象的方法调用实现的:
- 在
TestCircle1中用Scanner获取用户输入的数值; - 创建
Circle类的实例对象c1; - 调用
c1.setRadius()方法,把输入的数值传递进去,Circle类内部会把这个值保存到自己的radius成员变量里; - 之后不管是在
TestCircle1里调用getRadius()获取这个值,还是在Circle类内部的其他方法中使用radius,都能拿到用户输入的内容了。
因为两个类在同一个包testcircle1下,默认的访问权限就允许你直接创建对方的对象并调用public方法,完全满足你的需求~
内容的提问来源于stack exchange,提问作者Throwback90
相关产品推荐
相关产品推荐

