首页 > 解决方案 > 在 if 条件中使用数组

问题描述

此代码应该模拟机场的票务系统。

这段代码有 3 个不同的类: AirlineTicket,它包含在这个程序中创建的对象的构造函数、访问器和修改器;AirlineTicketTester,它创建一个对象和一个数组,并使用同一类中的一个方法用“乘客”填充该数组;TicketOrganizer 有两种方法,但只有一种方法很重要:canBoardTogether(). 这个方法应该做的是检查数组中的乘客是否可以与以下乘客一起登机。这样做的条件是两个乘客都需要具有相同的登机组和行(AirlineTicket 类的两个属性)。但是,此方法无法正常工作,它不会返回可以一起登机的正确乘客。

我能做些什么来纠正所说的方法?TicketOrganizer 类

import java.util.*;
public class TicketOrganizer
{
    private ArrayList<AirlineTicket> tickets;
    
    public TicketOrganizer(ArrayList<AirlineTicket> ticket){
        this.tickets = ticket;
    }
    
    public ArrayList<AirlineTicket> getTickets(){
        return tickets;
    }
       
        }
        public String canBoardTogether(){
            String together = "";
            int counter = 0;
            for(int i = 0; i<tickets.size()-1; i++){
                if(tickets.get(i).getBoardingGroup() == 
                tickets.get(i+1).getBoardingGroup()&&tickets.get(i).getRow() == 
                tickets.get(i+1).getRow()){
                together = together + "Passenger " + i + " can board with Passenger " + (int)(i+1) + "\n";
                counter++;
            }
        } 
            if(counter == 0){
            return "There are no passengers with the same row and boarding group.";
            }
            
            return together;
        

    }
    }

标签: javaarraylistmethods

解决方案


因为您只与 比较tickets.get(i),所以tickets.get(i+1)您的代码要求具有相同登机组和行的票在列表中相邻。tickets

除非门票按登机组排序然后行,否则您的代码不一定会找到您期望的匹配项。

在进行搜索之前试试这个:

tickets.sort(comparing(AirlineTicket::getBoardingGroup).andThen(AirlineTicket::getRow));

推荐阅读