[英]I need someone to tell me what is wrong with logic in my code
我是Java的初学者。 我正在尝试根据以下文本编写代码:
您将编写一个应用程序来预售有限数量的电影票。 简单的用户界面将包含在Main.java中,用于实现此目的的对象称为TicketSeller,它仅包含以下公共方法:
public TicketSeller(int initialTicketAllotment)
-指定要出售的门票数量。
public int requestTickets(int ticketRequest)
-请求ticketRequest
的票数。 返回牛逼icketSeller.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
}
}
您的逻辑错误在于您的构造函数和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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.