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

Java中如何将用户输入传入Lease类set方法?getData方法实现求助

问题分析与代码修正

一、关于set方法的写法正确性

你提到的三种写法中,前两种完全可行,第三种存在错误:

  • 写法1:
    Lease ls = new Lease();
    Scanner input = new Scanner(System.in);
    String name = input.nextLine();
    ls.setName(name);
    
    合法,先将输入存入变量再传入set方法,逻辑清晰。
  • 写法2:
    ls.setName(input.nextLine());
    
    更简洁,直接把input.nextLine()的返回值作为参数传入setName,完全有效。
  • 写法3:ls.setName() = input.nextLine;
    错误,原因有两点:
    1. setName()是void类型方法,没有返回值,不能作为赋值语句的左操作数;
    2. input.nextLine缺少括号,正确写法是input.nextLine()。

二、现有代码的核心错误

1. TestLease类main方法的变量未定义

直接使用tenant、apt等变量但未声明,导致编译时“符号未找到”错误。

2. getData方法的逻辑错误

  • 方法声明返回Lease类型,但无return语句,编译报错;
  • Java是值传递,修改方法内的参数(如tenant = input.nextLine())不会影响外部变量,无法传递输入值。

3. Lease类explainPetPolicy方法无实际输出

方法内部定义了政策字符串,但未打印输出,调用后无效果。

三、修正后的完整代码

修正后的Lease类

class Lease {
    private String name;
    private int aptNumber;
    private double rent;
    private int term;
    private static final int FEE = 10;

    public Lease() {
        name = "XXX";
        aptNumber = 0;
        rent = 1000.0;
        term = 12;
    }

    public void setName(String tenant) {
        name = tenant;
    }

    public void setAptNumber(int apt) {
        aptNumber = apt;
    }

    public void setRent(double monthRent) {
        rent = monthRent;
    }

    public void setTerm(int t) {
        term = t;
    }

    public String getName() {
        return name;
    }

    public int getAptNumber() {
        return aptNumber;
    }

    public double getRent() {
        return rent;
    }

    public int getTerm() {
        return term;
    }

    public void addPetFee() {
        rent = rent + FEE; // 使用常量替代硬编码
        explainPetPolicy();
    }

    public static void explainPetPolicy() {
        String policy = "A pet fee of $10 is added to the monthly rent.";
        System.out.println(policy); // 添加输出语句
    }
}

修正后的TestLease类

import java.util.Scanner;

class TestLease {
    public static void main(String args[]) {
        // 声明4个Lease对象:1个用默认构造,3个通过getData获取输入
        Lease lease1 = new Lease();
        Lease lease2 = getData();
        Lease lease3 = getData();
        Lease lease4 = getData();

        // 输出每个对象的字段值
        showValues(lease1);
        showValues(lease2);
        showValues(lease3);
        showValues(lease4);
    }

    public static void showValues(Lease ls) {
        System.out.println("\n\nYour lease results:" +
                "\nName      : " + ls.getName() +
                "\nApartment : " + ls.getAptNumber() +
                "\nRent      : " + ls.getRent() +
                "\nTerm      : " + ls.getTerm());
    }

    public static Lease getData() {
        Scanner input = new Scanner(System.in);
        Lease newLease = new Lease();

        System.out.print("Enter lessee name >> ");
        newLease.setName(input.nextLine());

        System.out.print("Enter apartment number >> ");
        newLease.setAptNumber(input.nextInt());
        input.nextLine(); // 处理换行符,避免后续读取空值

        System.out.print("Enter rent >> ");
        newLease.setRent(input.nextDouble());
        input.nextLine(); // 处理换行符

        System.out.print("Enter lease term in months>> ");
        newLease.setTerm(input.nextInt());
        input.nextLine(); // 处理换行符

        return newLease; // 返回设置好属性的Lease对象
    }
}

四、关键修正说明

  1. getData方法重构:
    • 去掉无用参数,内部创建Lease对象,直接调用set方法绑定输入值,最后返回对象;
    • 添加input.nextLine()处理换行符,避免nextInt()/nextDouble()后,后续nextLine()读取空字符串的问题。
  2. main方法逻辑:
    • 创建4个Lease对象,1个用默认值,3个通过getData获取用户输入;
    • 调用showValues输出每个对象的字段值,满足作业要求。
  3. Lease类优化:
    • 使用常量FEE替代硬编码的10,增强可维护性;
    • 修复explainPetPolicy方法,添加输出语句使其生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:45:01