Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现继承-can';虽然我的代码中类似的方法可以很好地工作,但我无法让一个方法工作_Java - Fatal编程技术网

Java 实现继承-can';虽然我的代码中类似的方法可以很好地工作,但我无法让一个方法工作

Java 实现继承-can';虽然我的代码中类似的方法可以很好地工作,但我无法让一个方法工作,java,Java,这是我的密码: 订单列表测试 package orderlisttest; import java.util.Scanner; import java.util.InputMismatchException; public class OrderListTest { public static void main(String[] args) { Integer orderListSize = Input.getInteger("order list si

这是我的密码:

订单列表测试

package orderlisttest;

import java.util.Scanner;
import java.util.InputMismatchException;

public class OrderListTest {

    public static void main(String[] args) {
        Integer orderListSize = Input.getInteger("order list size: ");
        OrderList orders = new OrderList(orderListSize);
        Integer orderNumber;
        Integer option;
        do {
            System.out.println("0: quit");
            System.out.println("1: add order");
            System.out.println("2: deliver order");
            System.out.println("3: refund order");
            System.out.println("4: pay order");
            System.out.println("5: display unpaid credit orders");
            System.out.println("6: display orders");
            option = Input.getInteger("option: ");
            switch (option) {
                case 0:
                    System.out.println("quitting program");
                    break;
                case 1:
                    System.out.println("1: credit order");
                    System.out.println("2: cash order");
                    Integer type = Input.getInteger("order type: ");
                    Integer number = Input.getInteger("number: ");
                    Integer value = Input.getInteger("value");
                    if (type == 1) {
                        try {
                            System.out.print("Paid? y/n");
                            Scanner scan = new Scanner(System.in);
                            String input = scan.nextLine();
                            if (input.equalsIgnoreCase("y")) {
                                orderNumber = selectOrder(orders);
                                orders.payOrder(orderNumber);
                                System.out.println("Paid");
                            } else if (input.equalsIgnoreCase("n")) {
                                System.out.println("Not paid");
                            }

                        } catch (InputMismatchException e) {
                            System.out.println("Invalid input!");
                        }
                        orders.addCreditOrder(number, value);
                    } else {
                        Boolean discountApplied = true;
                        orders.addCashOrder(number, value, discountApplied);
                    }

                    break;
                case 2:
                    orderNumber = selectOrder(orders);
                    orders.deliverOrder(orderNumber);
                    break;
                case 3:
                    orderNumber = selectOrder(orders);
                    orders.refundOrder(orderNumber);
                    break;
                case 4:
                    orderNumber = selectOrder(orders);
                    orders.payOrder(orderNumber);
                    break;
                case 5:
                    // self assessment 7 add code here

                    break;
                case 6:
                    System.out.println(orders);
                    break;
                default:
                    System.out.println("invalid option");
            }
        } while (option != 0);
    }

    private static Integer selectOrder(OrderList orders) {
        Integer order;
        System.out.println(orders);
        order = Input.getInteger("order: ");
        return order;
    }
}
package orderlisttest;

public class OrderList {

    private Order[] orders;
    private Integer numberOfOrders;
    private Integer number;

    public OrderList(Integer orderListSize) {
        this.orders = new Order[orderListSize];
        this.numberOfOrders = 0;
        this.number = 1;
    }

    public String toString() {
        String orderListDetails = new String();
        if (this.numberOfOrders != 0) {
            orderListDetails += String.format("%-10s%-10s%10s%15s%15s%15s%15s\n", 
                    "NUMBER", "TYPE", "VALUE", "DELIVERED", "REFUNDED", "DISCOUNTED", "PAID");
            for (Integer order = 0; order < this.numberOfOrders; order++) {
                orderListDetails += this.orders[order] + "\n";
            }
        } else {
            orderListDetails += "order list is empty";
        }
        return orderListDetails;
    }

    public void addCreditOrder(Integer number, Integer value) {
        this.orders[this.numberOfOrders] = new CreditOrder(number, value);
        this.numberOfOrders++;
    }

    public void addCashOrder(Integer number, Integer value, Boolean discountApplied) {
        this.orders[this.numberOfOrders] = new CashOrder(number, value, discountApplied);
        this.numberOfOrders++;
    }

    public void deliverOrder(Integer number) {
        Order order = this.getOrder(number);
        order.deliverOrder();
    }

    public void refundOrder(Integer number) {
        Order order = this.getOrder(number);
        order.refundOrder();
    }

    public void payOrder(Integer number) {
        Order order = this.getOrder(number);
        order.payOrder();
    }

    private Order getOrder(Integer number) {
        Order order = null;
        Integer index = 0;
        while (order == null) {
            if (number.equals(this.orders[index].getNumber())) {
                order = this.orders[index];
            } else {
                index++;
            }
        }
        return order;
    }
    // self assessment 7 add code here
}
订单列表

package orderlisttest;

import java.util.Scanner;
import java.util.InputMismatchException;

public class OrderListTest {

    public static void main(String[] args) {
        Integer orderListSize = Input.getInteger("order list size: ");
        OrderList orders = new OrderList(orderListSize);
        Integer orderNumber;
        Integer option;
        do {
            System.out.println("0: quit");
            System.out.println("1: add order");
            System.out.println("2: deliver order");
            System.out.println("3: refund order");
            System.out.println("4: pay order");
            System.out.println("5: display unpaid credit orders");
            System.out.println("6: display orders");
            option = Input.getInteger("option: ");
            switch (option) {
                case 0:
                    System.out.println("quitting program");
                    break;
                case 1:
                    System.out.println("1: credit order");
                    System.out.println("2: cash order");
                    Integer type = Input.getInteger("order type: ");
                    Integer number = Input.getInteger("number: ");
                    Integer value = Input.getInteger("value");
                    if (type == 1) {
                        try {
                            System.out.print("Paid? y/n");
                            Scanner scan = new Scanner(System.in);
                            String input = scan.nextLine();
                            if (input.equalsIgnoreCase("y")) {
                                orderNumber = selectOrder(orders);
                                orders.payOrder(orderNumber);
                                System.out.println("Paid");
                            } else if (input.equalsIgnoreCase("n")) {
                                System.out.println("Not paid");
                            }

                        } catch (InputMismatchException e) {
                            System.out.println("Invalid input!");
                        }
                        orders.addCreditOrder(number, value);
                    } else {
                        Boolean discountApplied = true;
                        orders.addCashOrder(number, value, discountApplied);
                    }

                    break;
                case 2:
                    orderNumber = selectOrder(orders);
                    orders.deliverOrder(orderNumber);
                    break;
                case 3:
                    orderNumber = selectOrder(orders);
                    orders.refundOrder(orderNumber);
                    break;
                case 4:
                    orderNumber = selectOrder(orders);
                    orders.payOrder(orderNumber);
                    break;
                case 5:
                    // self assessment 7 add code here

                    break;
                case 6:
                    System.out.println(orders);
                    break;
                default:
                    System.out.println("invalid option");
            }
        } while (option != 0);
    }

    private static Integer selectOrder(OrderList orders) {
        Integer order;
        System.out.println(orders);
        order = Input.getInteger("order: ");
        return order;
    }
}
package orderlisttest;

public class OrderList {

    private Order[] orders;
    private Integer numberOfOrders;
    private Integer number;

    public OrderList(Integer orderListSize) {
        this.orders = new Order[orderListSize];
        this.numberOfOrders = 0;
        this.number = 1;
    }

    public String toString() {
        String orderListDetails = new String();
        if (this.numberOfOrders != 0) {
            orderListDetails += String.format("%-10s%-10s%10s%15s%15s%15s%15s\n", 
                    "NUMBER", "TYPE", "VALUE", "DELIVERED", "REFUNDED", "DISCOUNTED", "PAID");
            for (Integer order = 0; order < this.numberOfOrders; order++) {
                orderListDetails += this.orders[order] + "\n";
            }
        } else {
            orderListDetails += "order list is empty";
        }
        return orderListDetails;
    }

    public void addCreditOrder(Integer number, Integer value) {
        this.orders[this.numberOfOrders] = new CreditOrder(number, value);
        this.numberOfOrders++;
    }

    public void addCashOrder(Integer number, Integer value, Boolean discountApplied) {
        this.orders[this.numberOfOrders] = new CashOrder(number, value, discountApplied);
        this.numberOfOrders++;
    }

    public void deliverOrder(Integer number) {
        Order order = this.getOrder(number);
        order.deliverOrder();
    }

    public void refundOrder(Integer number) {
        Order order = this.getOrder(number);
        order.refundOrder();
    }

    public void payOrder(Integer number) {
        Order order = this.getOrder(number);
        order.payOrder();
    }

    private Order getOrder(Integer number) {
        Order order = null;
        Integer index = 0;
        while (order == null) {
            if (number.equals(this.orders[index].getNumber())) {
                order = this.orders[index];
            } else {
                index++;
            }
        }
        return order;
    }
    // self assessment 7 add code here
}
现金订单

package orderlisttest;

public abstract class Order {

    private Integer number;
    protected Integer value;
    private Boolean delivered;
    protected Boolean paid;
    protected Boolean refunded;

    public Order(Integer number, Integer value) {
        this.number = number;
        this.value = value;
        this.delivered = false;
        this.paid = false;
        this.refunded = false;
    }

    public String toString() {
        String orderDetails = new String();
        orderDetails += String.format("%-10d", this.number);
        if (this instanceof CashOrder) {
            orderDetails += String.format("%-10s", "Cash");
        } else {
            orderDetails += String.format("%-10s", "Credit");
        }
        orderDetails += String.format("%10d%15s%15s", this.value, this.delivered.toString(), this.refunded.toString());
        return orderDetails;
    }

    public abstract void refund();

    public void deliverOrder() {
        this.delivered = true;
    }

    public void refundOrder() {
        this.refunded = true;
    }

    public void payOrder() {
        this.paid = true;
    }

    public Integer getNumber() {
        return this.number;
    }

}
package orderlisttest;

public class CashOrder extends Order {

    private Boolean discountApplied;

    public CashOrder(Integer number, Integer value, Boolean discountApplied) {
        super(number, value);
        this.discountApplied = discountApplied;
    }

    public String toString() {
        String cashOrderDetails = new String();
        cashOrderDetails += super.toString();
        cashOrderDetails += String.format("%15s", this.discountApplied.toString());
        return cashOrderDetails;
    }

    public void refund() {
        this.refunded = true;
    }
}
package orderlisttest;

public class CreditOrder extends Order {

    private Boolean paid;

    public CreditOrder(Integer number, Integer value) {
        super(number, value);
        this.paid = false;
    }

    public String toString() {
        String creditOrderDetails = new String();
        creditOrderDetails += super.toString();
        creditOrderDetails += String.format("%30s", this.paid.toString());
        return creditOrderDetails;
    }

    public void pay() {
        this.paid = true;
    }

    public void refund() {
        if (this.paid) {
            this.refunded = true;
        }
    }

    // self assessment 7 add code here
}
CreditOrder

package orderlisttest;

public abstract class Order {

    private Integer number;
    protected Integer value;
    private Boolean delivered;
    protected Boolean paid;
    protected Boolean refunded;

    public Order(Integer number, Integer value) {
        this.number = number;
        this.value = value;
        this.delivered = false;
        this.paid = false;
        this.refunded = false;
    }

    public String toString() {
        String orderDetails = new String();
        orderDetails += String.format("%-10d", this.number);
        if (this instanceof CashOrder) {
            orderDetails += String.format("%-10s", "Cash");
        } else {
            orderDetails += String.format("%-10s", "Credit");
        }
        orderDetails += String.format("%10d%15s%15s", this.value, this.delivered.toString(), this.refunded.toString());
        return orderDetails;
    }

    public abstract void refund();

    public void deliverOrder() {
        this.delivered = true;
    }

    public void refundOrder() {
        this.refunded = true;
    }

    public void payOrder() {
        this.paid = true;
    }

    public Integer getNumber() {
        return this.number;
    }

}
package orderlisttest;

public class CashOrder extends Order {

    private Boolean discountApplied;

    public CashOrder(Integer number, Integer value, Boolean discountApplied) {
        super(number, value);
        this.discountApplied = discountApplied;
    }

    public String toString() {
        String cashOrderDetails = new String();
        cashOrderDetails += super.toString();
        cashOrderDetails += String.format("%15s", this.discountApplied.toString());
        return cashOrderDetails;
    }

    public void refund() {
        this.refunded = true;
    }
}
package orderlisttest;

public class CreditOrder extends Order {

    private Boolean paid;

    public CreditOrder(Integer number, Integer value) {
        super(number, value);
        this.paid = false;
    }

    public String toString() {
        String creditOrderDetails = new String();
        creditOrderDetails += super.toString();
        creditOrderDetails += String.format("%30s", this.paid.toString());
        return creditOrderDetails;
    }

    public void pay() {
        this.paid = true;
    }

    public void refund() {
        if (this.paid) {
            this.refunded = true;
        }
    }

    // self assessment 7 add code here
}

由于某种我无法理解的原因,
payOrder
不起作用,订单总是未付,而
deliverOrder
returnorder
可以正常工作。顺便问一下,我是否有办法让它立即显示处于更新状态的订单,因为出于某种原因,当我退款订单或将其标记为已交付时,我必须运行
displayOrder
才能查看更新的订单。还有,有人知道NetBeans中浅绿色高亮显示的含义吗?我一直在看,但似乎在网上找不到任何钥匙。TIA.

似乎您在层次化路径上混合了一些变量:

你的结构如下:

[摘要]阶级秩序

  • 类现金订单
  • 信用等级
接下来的变量在Order类中声明:

private Integer number;
protected Integer value;
private Boolean delivered;
protected Boolean paid;
protected Boolean refunded;
按照信用顺序,您有:

private Boolean paid;
即使CreditOrder已经有一个布尔值,它从Order类继承。 因此,如果在CreditOrder上调用setPaid(booleanPayed),则可以设置本地变量,该变量在Order类中隐藏paid

但是,当您在Order上调用toString时(这是您在打印时所做的),您正在查看Order类中付费布尔值

如果要解决问题,请删除

private Boolean paid;

CreditOrder类中的行,这样,您将修改正确的变量。

“不起作用”。你能说得更具体一点吗?为什么你在CreditOrder课上重复“布尔支付”?@Stultuske-如果不清楚的话,很抱歉。当我选择选项4运行<代码>支付订单时,订单总是返回时“订单已支付”设置为“false”。OTOH当我选择其他选项将订单标记为已交付或已退款时,它们将返回并将“订单已交付”或“订单已退款”设置为“真”。如果还不清楚的话,我可以添加一个屏幕截图。@Stultuske-我不知道为什么“Boolean paid”会重复出现,但这看起来已经解决了它;非常感谢!如果你想把它作为回复添加到帖子中,我很乐意将其标记为解决方案。好的,我会添加一个关于它的答案。很好,谢谢。不知道为什么我错过了,但我们在这里。