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

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);
        }
    }
}

关键修改点说明

  1. Airplane实例的作用域:把Airplane从第一个if的局部变量改成方法级变量,这样第二个if里的Flight就能拿到它的rows和columns值。
  2. Flight类的计算逻辑:新增了专门的计算方法,让Flight能基于外部传入的数据算出座位数,而不是一直用默认的0值。

这样修改后,你输入的行列数就能被Flight正确计算出乘积啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:23:25