Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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 系统输出不正确。可能的存取器或变异器错误_Java - Fatal编程技术网

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
语句。它看起来也很像您在关闭后刚刚创建的新帐户;你不应该那样做,你应该编辑你原来的问题。