You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同包类中用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;
    }
}

关于同包类之间的输入传递逻辑

你想要的效果其实就是通过对象的方法调用实现的:

  1. 在TestCircle1中用Scanner获取用户输入的数值;
  2. 创建Circle类的实例对象c1;
  3. 调用c1.setRadius()方法,把输入的数值传递进去,Circle类内部会把这个值保存到自己的radius成员变量里;
  4. 之后不管是在TestCircle1里调用getRadius()获取这个值,还是在Circle类内部的其他方法中使用radius,都能拿到用户输入的内容了。

因为两个类在同一个包testcircle1下,默认的访问权限就允许你直接创建对方的对象并调用public方法,完全满足你的需求~

内容的提问来源于stack exchange,提问作者Throwback90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:32:52