Java 系统输出不正确。可能的存取器或变异器错误
本节代码有问题,请参见下文Java 系统输出不正确。可能的存取器或变异器错误,java,Java,本节代码有问题,请参见下文 customer.setcustomerDiscount(customerPurchase); System.out.println("Percent off: "+ customer.getcustomerDiscount()); 正在打印“5%折扣:5%” 但当我删除前面的5%时,代码将打印百分比折扣:null 我正在寻找一种方法,让它可以打印“折扣:5%” 可能的问题区域在setter中,我想知道是否应该移动if-else语句,让getter抓住它。
customer.setcustomerDiscount(customerPurchase);
System.out.println("Percent off: "+ customer.getcustomerDiscount());
正在打印
“5%折扣:5%”
但当我删除前面的5%时,代码将打印
百分比折扣:null
我正在寻找一种方法,让它可以打印“折扣:5%”
可能的问题区域在setter中,我想知道是否应该移动if-else语句,让getter抓住它。
使用代码并移动片段,尝试解决难题 处于当前状态的代码可以完美地工作,而不是那样 完整代码
package driver2;
import java.util.Scanner;
import java.text.DecimalFormat;
class Person{
private String name;
private String address;
private String number;
private double customerPurchase = 0;
//////// Constructors /////////
public Person(String name, String address, String number, int customerPurchase){
this.name = name;
this.address = address;
this.number = number;
this.customerPurchase = customerPurchase;
}
public Person(){}
//////// Accessors /////////
public String getName(){
return this.name;
}
public String getAddress(){
return this.address;
}
public String getNumber(){
return this.number;
}
public double getcustomerPurchase(){
return this.customerPurchase;
}
//////// Mutators /////////
public void setName(String n){
this.name = n;
}
public void setAddress(String a){
this.address = a;
}
public void setNumber(String n){
this.number = n;
}
public void setcustomerPurchase(int a){
this.customerPurchase = a;
}
public void setcustomerDiscount(int r)
{}
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
class Customer extends Person{
private String customerNumber;
private boolean recieveMail;
private String customerDiscount;
//////// Constructors /////////
public Customer(String name, String address, String number, String customerN, boolean rm, int customerPurchase) {
super(name, address, number, customerPurchase);
this.customerNumber = customerN;
this.recieveMail = rm;
}
public Customer(){}
//////// Accessors /////////
public String getCustomerNumber(){
return this.customerNumber;
}
public boolean getRecieveMail(){
return this.recieveMail;
}
public String getcustomerDiscount(){
return customerDiscount;
}
//////// Mutators /////////
public void setCustomerNumber(String c){
this.customerNumber = c;
}
public void setRecieveMail(boolean r){
this.recieveMail = r;
}
@Override
public void setcustomerDiscount(int r){
String customerDiscount = "";
if (r >= 2000){
customerDiscount="10%";
System.out.print("10%");
}else if (r >= 1500){
customerDiscount="7%";
System.out.print("7%");
}else if (r >= 1000){
customerDiscount="6%";
System.out.print("6%");
}else if (r > 500){
customerDiscount="5%";
System.out.print("5%");
}else{
System.out.print("");
}
this.customerDiscount = customerDiscount;
}
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
public class Driver2{
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
System.out.print("Enter name of customer:");
String name1 = scanner.nextLine();
System.out.print("Enter address of customer:");
String address1 = scanner.nextLine();
System.out.print("Enter phone number of customer:");
String number1 = scanner.nextLine();
System.out.print("Enter customer number:");
String customerNumber = scanner.nextLine();
System.out.print("Enter yes/no -- does the customer want to recieve mail?:");
String answer = scanner.nextLine();
boolean recieveMail = (answer.equals("yes"));
System.out.print("Enter amount customer has spent:");
int customerPurchase = scanner.nextInt();
scanner.close();
Customer customer = new Customer(name1, address1, number1, customerNumber, recieveMail, customerPurchase);
System.out.println("\nCustomer: ");
System.out.println("Name: "+customer.getName());
System.out.println("Address: "+customer.getAddress());
System.out.println("Phone Number: "+customer.getNumber());
System.out.println("Customer Number: "+customer.getCustomerNumber());
System.out.println("Recieve Mail?: "+customer.getRecieveMail());
DecimalFormat ft = new DecimalFormat("####");
ft = new DecimalFormat("$0.00");
System.out.println("Amount Purchased: "+ft.format(customer.getcustomerPurchase()));
customer.setcustomerDiscount(customerPurchase);
System.out.println("Percent off: "+ customer.getcustomerDiscount());
}
}
问题是:
customerDiscount="5%";
System.out.print("5%"); // remove this
在打印其余部分之前先打印“5%”:
System.out.println("Percent off: "+ customer.getcustomerDiscount());
如果删除第一次打印(上面带有“删除此”注释),您将打印出您想要的内容。问题在于:
customerDiscount="5%";
System.out.print("5%"); // remove this
在打印其余部分之前先打印“5%”:
System.out.println("Percent off: "+ customer.getcustomerDiscount());
如果您删除第一次打印(上面带有“删除此”注释),您将打印您想要打印的内容。问题在于您的
setcustomerDiscount
方法所做的工作超出了预期;它还以百分比形式打印折扣。从该方法中删除System.out.print
语句。它看起来也很像您在关闭后刚刚创建的新帐户;而不是那样做,你应该编辑你的原始问题;它还以百分比形式打印折扣。从该方法中删除System.out.print
语句。它看起来也很像您在关闭后刚刚创建的新帐户;你不应该那样做,你应该编辑你原来的问题。