Java 测试(if..Else if..Else)语句(不工作)

Java 测试(if..Else if..Else)语句(不工作),java,Java,测试似乎不起作用的if-else语句 假设它与可能将IF-else更改为getter而不是setter有关? 或者与返回INT而不是string的变量有关? 小糊涂已经重新安排和修改这段代码一段时间了,不能让它工作 //package Driver2; import java.util.Scanner; class Person{ private String name; private String address; private String number; private int c

测试似乎不起作用的if-else语句 假设它与可能将IF-else更改为getter而不是setter有关? 或者与返回INT而不是string的变量有关? 小糊涂已经重新安排和修改这段代码一段时间了,不能让它工作

//package Driver2;

import java.util.Scanner;

class Person{
private String name;
private String address;
private String number;
private int 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 int 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)
{
   r =  this.customerPurchase;
    if (r > 500)
    {
        System.out.print("5%");
    }
    else if (r >= 1000)
    {
        System.out.print("6%");
    }
    else if (r >= 1500)
    {
        System.out.print("7%");
    }
    else if (r >= 2000)
    {
        System.out.print("10%");
    }
    else
    {
        System.out.print("");
    }
}

}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
class Customer extends Person{
private String customerNumber;
private boolean recieveMail;
private int 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 int getcustomerDiscount()
{
    return customerDiscount;
}

//Mutators
public void setCustomerNumber(String c){
    this.customerNumber = c;
}

public void setRecieveMail(boolean r){
    this.recieveMail = r;
}
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
class Driver1 extends Customer
{
//private int customerPurchase = 0;

//Constructors
   /* public Driver1(String name, String address, String number, String customerN, boolean rm, int customerPurchase)
{
    super();
    this.customerPurchase = customerPurchase;
    //this.customerDiscount = customerDiscount;
}*/
    public Driver1(String name, String address, String number, String customerN, boolean rm, int customerPurchase) {
    //super(name, address, number, customerPurchase, customerN, rm);
    //this.customerPurchase = customerN;
    //this.customerDiscount = pc;
}

public Driver1()
{}

//Accessors
/*
public int getcustomerDiscount()
{
    return this.customerDiscount;
}
/*
@Override
public int getcustomerPurchase()
{
    return this.customerPurchase;
}


//Mutators

@Override
public void setcustomerPurchase(int c)
{
    this.customerPurchase = c;
}*/

/*
public void setcustomerDiscount(int r)
{
    this.customerPurchase = r;
    if (r >= 500)
    {
        System.out.print("5%");
    }
    else if (r >= 1000)
    {
        System.out.print("6%");
    }
    else if (r >= 1500)
    {
        System.out.print("7%");
    }
    else if (r >= 2000)
    {
        System.out.print("10%");
    }
    else
    {
        System.out.print("");
    }
}
*/
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
public class Main
{

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();

    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());
    System.out.println("Amount Purchased: "+customer.getcustomerPurchase());
    System.out.println("Percent off:  "+customer.getcustomerDiscount());

}
}

我认为这是一个合乎逻辑的问题。只需按相反顺序订购折扣公式即可。 首先抓住大数字:

if  r >= 2000  print 10%
else if  r >= 1500  print 7%
else if  r >= 1000  print 6%
else if  r >= 500   print 5%
else print nothing

我希望这能帮助您

您粘贴的代码实际上需要一些更改。假设您需要返回基于客户输入的折扣百分比,则需要执行以下更改

1) 您在
Person
类中有一个
setCustomerDiscount
,但是您在这里交易的实体是
Customer
类型,因此您需要在
Customer
类中添加
setCustomerDiscount
,而不是Person类

2) 由于要在字符串中显示百分比(根据sysout语句/也可以根据需要更改为Int),因此需要将返回类型更改为String而不是Int

3) 另一件事是if/elseif条件的顺序应该是降序的

一旦修复了它们,您就可以按预期获得输出。 以下是我所做的更改:

import java.util.Scanner;

class Person{
private String name;
private String address;
private String number;
private int 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 int 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;
}

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 TestMain
{

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());
  System.out.println("Amount Purchased: "+customer.getcustomerPurchase());
  customer.setcustomerDiscount(customerPurchase);
  System.out.println("Percent off:  "+ customer.getcustomerDiscount());


}
}

希望它有帮助……

如果
r
等于
1999
,那么
r
大于
500
。这意味着您的整个语句将有效地降级为
if(r>500){…}else{…}
,并且不会执行任何其他分支。普罗霍罗夫是对的。首先检查最大值。@blackstar在您拥有的
Person
类中
setcustomerDiscount()
但是
customerDiscount
字段在
Customer
类中。然后你就再也没有真正调用过
setcustomerDiscount()
函数了。谢谢你的帮助,重新排列后,似乎仍然输出0。我很确定它试图发送一个INT而不是一个字符串输出,只需要重新安排,我很可能会把if/else逻辑放在它自己的服务类中,并从
setCustomerDiscount()
调用它的方法以实现可扩展性。还有一点,我会仔细分析你做了什么,并进一步解决这个问题,但这让我走上了正确的道路,让它发表一份工作声明。“你真是天赐之物!!”一旦我继续努力,如果我能做到100%完美,我会发布最终结果。谢谢你,桑托什