编辑(判断严厉):我的display()方法不会显示,我不知道为什么

时间:2017-11-15 17:01:56

标签: java arrays getter-setter arrayobject

我最近发布了一个关于我的display()方法的问题只显示某些对象,并且能够通过我之前收到的关于toString()方法的一些反馈来纠正这个问题。但是,我不得不将我的idNum更改为int,现在我的displayMethod()根本不会显示。我试着回顾我的步骤,不确定发生了什么。

应该包含标识号,销售额和人名的对象数组。但是,当我显示数组时,没有显示任何内容。我已经尝试了for循环,增强了for循环并尝试了一个调用get()方法的system.out.print。

我不知道它是否与我的displayDatabase()方法有关,我使用我的Scanner变量(USER_INPUT)来设置输入的数据,或者与我的构造函数有关。

我的构造函数如下所示:

=============================================== ===

 public class Salesperson 
   {
   private String salesName;
   private int salesID;
   private double annualSales; 

   public Salesperson(String salesName, int salesIDNum, double yearlySales)
   {
       this.salesName = salesName;
       salesID = salesIDNum;
       annualSales = yearlySales;
   }

   public String getSalesName()
   {
       return salesName;
   } 
   public void setSalesName(String salesName)
   {
       this.salesName = salesName;
   }
   public double getSalesID()
   {
       return salesID;
   }      
   public void setSalesID(int salesIDNum)
   {
       salesID = salesIDNum;
   }
   public double getAnnualSales()
   {
       return annualSales;
   }
   public void setAnnualSales(double yearlySales)
   {
       annualSales = yearlySales;
   }
   @Override
   public String toString()
   {
       return String.format("%s-%-10s%-10.2f", salesName,
                salesID, annualSales);
    } 

}

And my code for application looks like this:

    import java.util.Arrays;  
    import java.util.Scanner;
     public class CreateSalesperson 
     {
       private static final Scanner USER_INPUT = new Scanner(System.in);
       private static final int UPPER_SIZE_LIMIT = 20;
       private static final int LOWER_SIZE_LIMIT = 0;
       private static Salesperson[] salesStaffInDatabase = new 
      Salesperson[20];
       private static int numOfSalesPpl = 0;
       private static boolean loop = true;    
       public static void main(String[] args)
      {
       String selection;
       selection = programMenu();
       String response;

            while(loop)  
              switch(selection)
              {
                  case "A":
                      if(numOfSalesPpl == UPPER_SIZE_LIMIT)
                      {
                        System.out.print("Database has reached capacity.");
                        System.out.print(" Please delete a record before ");
                        System.out.println("adding to the database.");
                      }
                      else
                      {
                        addRecord();      
                      }
                      break;
                  case "a":
                      if(numOfSalesPpl == UPPER_SIZE_LIMIT)
                      {
                        System.out.print("Database has reached capacity.");
                        System.out.print(" Please delete a record before ");
                        System.out.println("adding to the database.");
                      }
                      else
                      {
                        addRecord();      
                      }
                      break;
                    case "C":
                      if(numOfSalesPpl == LOWER_SIZE_LIMIT)
                      {
                        System.out.print("Database is empty. ");
                        System.out.print("Please add a record."); 
                      }
                      else
                      {
                        changeRecord();      
                      }
                      break;
                    case "c":
                      if(numOfSalesPpl == LOWER_SIZE_LIMIT)
                      {
                        System.out.print("Database is empty. ");
                        System.out.print("Please add a record."); 
                      }
                      else
                      {
                        changeRecord();      
                      }
                      break;
                    case "E":
                    System.out.print("You Are Leaving Database");
                    loop = false;
                    break;
                    case "e":
                    System.out.print("You Are Leaving Database");
                    loop = false;
                    break;
                }
                }

      public static void changeRecord()
        {
            String idNum;
            String salesName;
            double salesAmount;
            String response;

            System.out.print("Enter Sales ID: ");
            idNum = USER_INPUT.nextLine();        
            if(isValidID(idNum))

            {   
            int searchResult = Arrays.binarySearch(salesStaffInDatabase, idNum);
            System.out.println(salesStaffInDatabase[searchResult]);
            }
            else
            {
                System.out.println("Invalid Sales ID");
            }
        }
     public static boolean isValidID(String idNum)
     {
     boolean isValid= false;
     for(int val = 0;val < numOfSalesPpl && !isValid; ++val)
     {
         if(salesStaffInDatabase[val].equals(idNum))
                 {
                   isValid = true;  
                 }
     }
     return isValid;
     }     
     public static void addRecord()
     {
        int idNum;
        String salesName;
        double salesAmount;
        String idNo;
        String response;

       do
       {
        System.out.print("Please enter sales ID: ");
        idNum = USER_INPUT.nextInt();
        idNo = Integer.toString(idNum);
        if(idNo.length() != 8)

           System.out.println("Sales ID must be 8 digits long: ");

       }
       while(idNo.length() < 8 || idNo.length() > 8);

        System.out.print("Name: ");
        salesName = USER_INPUT.nextLine();
        USER_INPUT.nextLine();
        System.out.print("Sales Amount: ");
        salesAmount = Double.parseDouble(USER_INPUT.nextLine());
        salesStaffInDatabase[numOfSalesPpl] = new 
     Salesperson(salesName,idNum,salesAmount);

        salesStaffInDatabase[numOfSalesPpl].setSalesName(salesName);
        salesStaffInDatabase[numOfSalesPpl].setSalesID(idNum);
        salesStaffInDatabase[numOfSalesPpl].setAnnualSales(salesAmount);



        System.out.print("Do you want to display database Y/N?: ");
        response = USER_INPUT.nextLine();
        while(response.equalsIgnoreCase("Y")||response.equalsIgnoreCase("yes"))
        {
          displayDatabase();
        }
    } 

    public static void displayDatabase()
    {

        for(int val=0;val < numOfSalesPpl; val++)
        {
              System.out.println(salesStaffInDatabase[val]);
        }

    }    
    public static String programMenu()
    {
    String selection;
     do
        {

         System.out.println("(A)dd a Record");
         System.out.println("(C)hange a Record");
         System.out.println("(E)xit Database"); 
         System.out.print("Enter selection: ");
         selection = USER_INPUT.nextLine();
        }
        while(!selection.equalsIgnoreCase("a") && 
    !selection.equalsIgnoreCase("c")
        && !selection.equalsIgnoreCase("e"));
        return selection;
    }
    }

=============================================== ==================

2 个答案:

答案 0 :(得分:0)

修改toString()课程中的Salesperson方法:

      @Override
public String toString() {
    return "Salesperson{" +
            "salesFirstName='" + salesFirstName + '\'' +
            ", salesLastName='" + salesLastName + '\'' +
            ", salesID='" + salesID + '\'' +
            ", annualSales=" + String.format("%-10.2f",  annualSales)+
            '}';
}

答案 1 :(得分:0)

在Java中,只要您想将对象显示为字符串,就必须覆盖toString()方法。 您发布的代码,销售人员的toString()方法仅返回salesIDanualSales。如果要显示其他属性,则必须将其放在toString()方法中。

如果要在输出的开头显示第一个名称,可以执行以下操作:

@Override public String toString() {
    return String.format("%s - %-10s%-10.2f", salesFirstName, salesID, annualSales);
}