我是Java的初学者。我正在尝试根据以下文本编写代码:
您要编写一个应用程序来预售有限数量的电影 门票。简单的用户界面将包含在Main.java和 实现它的对象称为TicketSeller和 仅包含以下公共方法:
public TicketSeller(int initialTicketAllotment)
- 指定号码 您要出售的门票。
public int requestTickets(int ticketRequest)
- 请求ticketRequest
张票数。返回 TicketSeller.TOO_MANY_TICKETS_REQUESTED
如果有多个TicketSeller.MAXIMUM_TICKETS_ALLOWED
。请注意其中之一 常数是私有的,一个是公共的。哪一个需要暴露 给用户?
public int getNumberOfBuyers()
- 跟踪购票者数量。您 只计算已完成请求的买家。错误不计算在内。
这是我到目前为止所拥有的。但是,我的代码中有错误,但我找不到它:
public class TicketSeller {
private final static int MAXIMUM_TICKETS_ALLOWED = 4;
public static final int TOO_MANY_TICKETS_REQUESTED = -1;
private int buyers = 0;
private int initialTicketAllotment;
int placeHolder;
public TicketSeller(int initialTicketAllotment) {
this.initialTicketAllotment = initialTicketAllotment;
}
public int requestTickets(int ticketRequest) {
if (placeHolder > 0) {
int value = 0;
value = placeHolder - ticketRequest;
placeHolder = value;
buyers += 1;
}
if (ticketRequest > MAXIMUM_TICKETS_ALLOWED
|| ticketRequest > initialTicketAllotment) {
return TOO_MANY_TICKETS_REQUESTED;
}
if (ticketRequest >= 0 && ticketRequest <= MAXIMUM_TICKETS_ALLOWED
&& placeHolder == 0) {
int value = 0;
value = initialTicketAllotment - ticketRequest;
placeHolder = value;
buyers += 1;
}
return placeHolder;
}
public int getNumberOfBuyers() {
return buyers;
}
}
以下代码注释中的错误输出:
public class Main {
public static void main(String[] args) {
TicketSeller ts = new TicketSeller(8);
System.out.println(ts.requestTickets(1)); //outputs 7
System.out.println(ts.requestTickets(2)); //outputs 5
System.out.println(ts.requestTickets(3)); //outputs 2
System.out.println(ts.requestTickets(1)); //outputs 1
System.out.println(ts.requestTickets(1)); //outputs 7, instead of 0
}
}
答案 0 :(得分:0)
您的逻辑错误在于您的构造函数和requestTickets(int)
方法:
public TicketSeller(int initialTicketAllotment) {
this.initialTicketAllotment = initialTicketAllotment;
// you need to initialize 'placeholder' to the initial
// amount of tickets available
this.placeholder = initialTicketAllotment;
}
public int requestTickets(int ticketRequest) {
// you should check if there are no more tickets to request
// or more than MAXIMUM_TICKETS_ALLOWED (4 tickets) have been
// requested, before checking if placeholder > 0. Also, you
// want to check if 'ticketRequest > placeholder' not the
// initial amount of tickets.
if (ticketRequest > MAXIMUM_TICKETS_ALLOWED
|| ticketRequest > placeholder) {
return TOO_MANY_TICKETS_REQUESTED;
}
// remove the local 'value' variable, it just confuses your
// code to other readers, thinking you need a temporary variable
// for some reason
if (placeHolder > 0) {
placeholder -= ticketRequest;
buyers += 1;
}
// if placeholder equals 0, that means there are no more tickets
// left... not sure why you would set it back to
// 'initialTicketAllotment - ticketRequest'. I would get rid of this
// method.
/*
if (ticketRequest >= 0 && ticketRequest <= MAXIMUM_TICKETS_ALLOWED
&& placeHolder == 0) {
int value = 0;
value = initialTicketAllotment - ticketRequest;
placeHolder = value;
buyers += 1;
}
*/
return placeHolder;
}