我在使用其他类的方法时遇到问题。我将在下面发布具体代码:
import java.util.ArrayList;
/**
* Train models a train containing a car class and a seat class.
*
* @author Nicholas Howes, Carleton University
* @version Oct 9th, 2017
*/
public class Train
{
/** The cars in this train. */
private ArrayList<Car> cars;
/**
* Constructs an empty train; i.e., one that has no cars.
*/
public Train()
{
cars = new ArrayList<Car>(0);
}
/**
* Adds the specified car to this train.
* @param car The car object being appended to the end of the list.
*/
public void addCar(Car car)
{
cars.add(car);
}
/**
* Returns this trains's list of cars. This method is intended for
* testing purposes only, and should not be called by other objects,
* as it may be removed from the final version of this class.
*
* @return A list of the cars in the train
*/
public ArrayList<Car> cars()
{
return cars;
}
/**
* Attempts to issue a ticket for a business class seat or an
* economy class seat, as specified by the method's argument.
* It will attempt to book a seat in the first car of the appropriate
* type, but if a seat is not available it will attempt to book a seat
* in the second car of the appropriate type, and so on.
* A request to issue a ticket in a business-class car will never result
* in a seat being reserved in an economy-class car, and vice-versa.
* Returns true if successful, false otherwise.
*/
public boolean issueTicket(boolean businessClassSeat)
{
for(int i = 0; i < cars.size(); i++) {
if(businessClassSeat == (isBusinessClass())) {
cars(i).bookNextSeat();
if(bookNextSeat == true) {
i = cars.size();
return true;
}
}
}
return false;
}
/**
* Cancels the ticket for the specified seat in the specified car.
* Returns true if successful, false otherwise.
*/
public boolean cancelTicket(int carId, int seatNo)
{
return false;
}
}
/**
* Car models a car in a passenger train.
*
* @author Nicholas Howes, Carleton University
* @version 1.0 September 29, 2017
*/
public class Car
{
/** This car's identifier. */
private int id;
/**
* true == this car is a business-class car,
* false == this car is an economy-class car.
*/
private boolean businessClass;
/** The cost of a business class seat, in dollars. */
public static final double BUSINESS_SEAT_COST = 125.0;
/** The cost of an economy class seat, in dollars. */
public static final double ECONOMY_SEAT_COST = 50.0;
/** The number of seats in a business class car. */
public static final int BUSINESS_SEATS = 30;
/** The number of seats in an economy class car. */
public static final int ECONOMY_SEATS = 40;
/** The list of this car's seats. */
private Seat[] seats;
/**
* Constructs a new Car object with the specified id.
* If parameter isBusinessClass is true, the car is a business-class
* car. If parameter isBusinessClass is false, the car is an
* economy-class car.
* @param carId The car id # for the new car object.
* @param isBusinessClass The boolean value corresponding to the class
* of the car.
*/
public Car(int carId, boolean isBusinessClass)
{
id = carId;
businessClass = isBusinessClass;
int Count = 1;
if (businessClass == true) {
seats = new Seat[BUSINESS_SEATS];
for(int i = 0; i < seats.length; i++) {
seats[i] = new Seat(Count, BUSINESS_SEAT_COST);
Count++;
}
} else {
seats = new Seat[ECONOMY_SEATS];
for(int i = 0; i < seats.length; i++) {
seats[i] = new Seat(Count, ECONOMY_SEAT_COST);
Count++;
}
}
}
/**
* Returns this car's list of seats. This method is intended for
* testing purposes only, and should not be called by other objects,
* as it may be removed from the final version of this class.
*
* @return The seats in this car, an array of Seat objects.
*/
public Seat[] seats()
{
return seats;
}
/**
* Returns true if this is a business-class car,
* false if this is an economy-class car.
* @return true The boolean value returned if the car is business class.
* @return false The boolean value returned if the car is economy class.
*/
public boolean isBusinessClass()
{
if(businessClass == true) {
return true;
}
return false;
}
/**
* Returns the id of this car.
* @return id The value returned is the id # of the car.
*/
public int id()
{
return id;
}
/**
* This method is called when the specified seat has been booked,
* to print a ticket for that seat.
*
* @param seatNo The integer identifier of the seat.
*/
private void printTicket(int seatNo)
{
System.out.println("Car ID: " + id);
System.out.println("Seat number: " + seatNo);
System.out.println("Price: ");
if (businessClass) {
System.out.println(BUSINESS_SEAT_COST);
} else {
System.out.println(ECONOMY_SEAT_COST);
}
}
/**
* Attempts to book a seat. If successful, this method prints a
* ticket and returns true.
* If no seats are available, this method returns false.
* @return true The return value when a new seat is booked.
* @return false The return value when no seats are available.
*/
public boolean bookNextSeat()
{
// After booking an available seat, print the ticket by calling
// private method printTicket(); e.g.,
// printTicket(seats[i].number());
for(int i = 0; i < seats.length; i++) {
if(seats[i].isBooked() == false) {
seats[i].book();
printTicket(seats[i].number());
return true;
}
}
return false;
}
/**
* Cancels the booking for the specified seat, which must be between
* 1 and the maximum number of seats in the car.
* If the seat number is valid and if the seat has been reserved, this
* method cancels the booking for that seat and returns true.
* If the seat number is not valid, this method returns false.
* If the seat number is valid, but the seat has not been reserved,
* this method returns false.
* @param seatNo The seat number to cancel if it is booked and valid.
*/
public boolean cancelSeat(int seatNo)
{
if(seatNo < 1 || seatNo > seats.length) {
return false;
}
if(seats[seatNo-1].isBooked() == false) {
return false;
}
seats[seatNo-1].cancelBooking();
return true;
}
}
/**
* Seat models a seat in a car in a passeger train.
*
* @author D.L. Bailey, SCE
* @version 1.00 January 28, 2007
*/
public class Seat
{
private int number; // the seat's number
private boolean booked; // has this seat has been reserved?
private double price; // the cost of a ticket for this seat, in dollars
/**
* Constructs a new Seat with the specified seat number and
* ticket price.
*/
public Seat(int seatNo, double cost)
{
booked = false;
number = seatNo;
price = cost;
}
/**
* Returns the cost of purchasing a ticket for this Seat.
*/
public double price()
{
return price;
}
/**
* Returns this seat's number.
*/
public int number()
{
return number;
}
/**
* Returns true if someone has purchased a ticket
* for this Seat.
*/
public boolean isBooked()
{
return booked;
}
/**
* If this seat is available, books it and returns true.
* If the seat is not available, returns false.
*/
public boolean book()
{
if (!booked) {
booked = true;
return true;
}
return false;
}
/**
* If this seat is booked, cancels the booking and returns true.
* If the seat was not booked, returns false.
*/
public boolean cancelBooking()
{
if (booked) {
booked = false;
return true;
}
return false;
}
}
我遇到的问题是使用课程boolean issueTicket
中的方法Train
。我知道我可以使用我的Car
类中的方法来搜索指定类型的所有汽车(在issueTicket
中传递的参数),无论是商业还是经济(真或假),然后使用方法{ {1}}预订下一个空座位然后退出for循环,如果它返回true,方法是将bookNextSeat
设置为等于arraylist大小。所有这些使用类车的方法我做错了什么?
答案 0 :(得分:1)
首先,语句i = cars.size();
完全是必需的,您可以使用break;
来打破循环。我建议使用方法范围变量boolean status = false
并仅在bookNext返回true并调用break时更新status的值并返回状态变量而不是hardcoded true false。
由于return语句只在loop方法范围内,因此无法返回任何内容,实际上你会得到缺少的return语句错误。