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.似乎您在层次化路径上混合了一些变量:
你的结构如下:
[摘要]阶级秩序
- 类现金订单
- 信用等级
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”会重复出现,但这看起来已经解决了它;非常感谢!如果你想把它作为回复添加到帖子中,我很乐意将其标记为解决方案。好的,我会添加一个关于它的答案。很好,谢谢。不知道为什么我错过了,但我们在这里。