Java中如何将用户输入传入Lease类set方法?getData方法实现求助
问题分析与代码修正
一、关于set方法的写法正确性
你提到的三种写法中,前两种完全可行,第三种存在错误:
- 写法1:
合法,先将输入存入变量再传入set方法,逻辑清晰。Lease ls = new Lease(); Scanner input = new Scanner(System.in); String name = input.nextLine(); ls.setName(name); - 写法2:
更简洁,直接把ls.setName(input.nextLine());input.nextLine()的返回值作为参数传入setName,完全有效。 - 写法3:
ls.setName() = input.nextLine;
错误,原因有两点:setName()是void类型方法,没有返回值,不能作为赋值语句的左操作数;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对象 } }
四、关键修正说明
- getData方法重构:
- 去掉无用参数,内部创建Lease对象,直接调用set方法绑定输入值,最后返回对象;
- 添加
input.nextLine()处理换行符,避免nextInt()/nextDouble()后,后续nextLine()读取空字符串的问题。
- main方法逻辑:
- 创建4个Lease对象,1个用默认值,3个通过getData获取用户输入;
- 调用showValues输出每个对象的字段值,满足作业要求。
- Lease类优化:
- 使用常量FEE替代硬编码的10,增强可维护性;
- 修复explainPetPolicy方法,添加输出语句使其生效。
内容的提问来源于stack exchange,提问作者Takeshi DBXV
相关产品推荐
相关产品推荐

