繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM