我需要有人告诉我代码中的逻辑有什么问题

时间:2015-11-01 02:14:12

标签: java

我是Java的初学者。我正在尝试根据以下文本编写代码:

  

您要编写一个应用程序来预售有限数量的电影   门票。简单的用户界面将包含在Main.java和   实现它的对象称为TicketSeller和   仅包含以下公共方法:

     

public TicketSeller(int initialTicketAllotment) - 指定号码   您要出售的门票。

     

public int requestTickets(int ticketRequest) - 请求   ticketRequest张票数。返回   T 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
    }
 }

1 个答案:

答案 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;
}