Java类间值传递问题求助:计算座位数始终返回0
问题分析与解决方案
嘿,我一眼就看出问题出在哪啦!你现在的Flight类完全不知道Airplane里存的rows和columns是什么,它的numberOfSeats从始至终都是默认的0,所以不管你输入啥数值,输出肯定都是0。
具体来说有两个核心问题:
- 你在第一个
if块里创建的Airplane实例是局部变量,第二个if块根本访问不到它,更别说让Flight用它的数据了。 - Flight类只有
numberOfSeats的getter和setter,没有任何逻辑去计算座位数,也没有接收外部数据(比如Airplane的rows和columns)的入口。
下面是给你调整后的代码,保证能正常算出座位数:
修改后的Flight类
public class Flight { private int numberOfSeats; // 新增方法:通过Airplane实例计算座位数 public void calculateSeatsFromAirplane(Airplane airplane) { this.numberOfSeats = airplane.getRows() * airplane.getColumns(); } // 也可以加一个直接接收行列数的重载方法(可选) public void calculateSeats(int rows, int columns) { this.numberOfSeats = rows * columns; } // 原有的getter和setter public int getNumberOfSeats() { return numberOfSeats; } public void setNumberOfSeats(int numberOfSeats) { this.numberOfSeats = numberOfSeats; } }
修改后的Main类
import java.util.Scanner; public class Main { public static void main(String[] args) { int counter = 1; // 把Airplane实例移到if外面,让两个if块都能访问 Airplane airplane = new Airplane(); if (counter == 1) { Scanner scanner = new Scanner(System.in); int rows, columns; rows = scanner.nextInt(); airplane.setRows(rows); columns = scanner.nextInt(); airplane.setColumns(columns); System.out.println("直接计算的座位数:" + airplane.getColumns() * airplane.getRows()); counter++; } if (counter == 2) { Flight flight = new Flight(); // 调用新增的方法,把Airplane的数据传给Flight计算 flight.calculateSeatsFromAirplane(airplane); // 或者用重载方法:flight.calculateSeats(airplane.getRows(), airplane.getColumns()); int seats = flight.getNumberOfSeats(); System.out.println("Flight类计算的座位数:" + seats); } } }
关键修改点说明
- Airplane实例的作用域:把Airplane从第一个
if的局部变量改成方法级变量,这样第二个if里的Flight就能拿到它的rows和columns值。 - Flight类的计算逻辑:新增了专门的计算方法,让Flight能基于外部传入的数据算出座位数,而不是一直用默认的0值。
这样修改后,你输入的行列数就能被Flight正确计算出乘积啦!
内容的提问来源于stack exchange,提问作者Nick Kakl
相关产品推荐
相关产品推荐

