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

Java程序输出null null 0.0问题求助:TestStaff类实现遇困

解决TestStaff程序输出null null 0.0的问题

刚学类和对象的时候碰到这种默认值的问题真的超容易懵!我帮你捋捋问题出在哪,再给你改好代码~

问题根源分析

你输出null null 0.0,本质是因为类的成员变量没被正确赋值,Java里的默认值规则导致的:

  • 引用类型(比如String)的默认值是null
  • 基本数据类型里,double默认是0.0,int默认是0

结合你给出的代码片段,大概率是这几个问题:

  1. setStaffInfo方法里没把传入的参数赋值给类的成员变量
  2. 没有实现薪资计算的逻辑,salary一直是默认的0.0
  3. 可能没写获取私有属性的getter方法,导致输出时拿不到正确的值

修正后的完整代码

1. Staff类(完善属性赋值、薪资计算和getter方法)

class Staff {
    // 私有成员变量,封装起来更安全
    private String name;
    private String staffID;
    private double salary;
    private int dailyWorkingHours; // 变量名更清晰,代表每日工作时长

    // 设置员工基础信息的方法
    public void setStaffInfo(String nm, String id, int hours) {
        // 用this区分成员变量和方法参数,避免变量名冲突
        this.name = nm;
        this.staffID = id;
        this.dailyWorkingHours = hours;
    }

    // 计算薪资的方法,这里假设时薪是50.0,你可以根据需求调整,甚至改成用户输入时薪
    public void calculateSalary() {
        double hourlyRate = 50.0;
        this.salary = dailyWorkingHours * hourlyRate;
    }

    // 获取姓名的getter方法(私有属性只能通过这种方式外部访问)
    public String getName() {
        return name;
    }

    // 获取员工ID的getter方法
    public String getStaffID() {
        return staffID;
    }

    // 获取薪资的getter方法
    public double getSalary() {
        return salary;
    }
}

2. TestStaff类(接收用户输入、调用方法并输出)

import java.util.Scanner;

public class TestStaff {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 创建Staff类的对象,这是类和对象的核心:用类创建实例
        Staff staff = new Staff();

        // 接收用户输入的信息
        System.out.print("请输入员工姓名:");
        String name = scanner.nextLine();
        System.out.print("请输入员工ID:");
        String staffID = scanner.nextLine();
        System.out.print("请输入每日工作时长:");
        int dailyHours = scanner.nextInt();

        // 调用set方法给对象的属性赋值
        staff.setStaffInfo(name, staffID, dailyHours);
        // 调用计算薪资的方法,给salary赋值
        staff.calculateSalary();

        // 通过getter方法获取属性值并输出
        System.out.println(staff.getName() + " " + staff.getStaffID() + " " + staff.getSalary());

        scanner.close();
    }
}

关键知识点回顾

  • 成员变量赋值:一定要通过set方法或者构造方法给私有成员变量赋值,不然会保留默认值
  • this关键字:用来区分类的成员变量和方法里的局部变量,避免变量名覆盖
  • 封装思想:用private修饰成员变量,通过getter/setter方法访问和修改,这是面向对象的基础
  • 方法调用:创建对象后,必须调用对应的方法(比如setStaffInfo、calculateSalary)才能执行赋值和计算逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:27