Ошибочная печать только одного объекта в массиве - PullRequest
0 голосов
/ 06 мая 2018

Инструкции по назначению настаивают на том, чтобы я использовал массивы, а не массивы или любые другие возможные варианты. Кроме того, любые назначенные параметры существуют именно потому, что именно об этом просил мой профессор в своих инструкциях

В принципе, я успешно печатаю нужное количество объектов, формат записей и т. Д., Но я постоянно получаю содержимое только одного объекта. Я пытался возиться с переназначениями статического и нестатического, но это, кажется, только создает больше проблем. TestEmployee4 зависит от текстового файла, но проблема определенно не связана с моим поиском текста, поэтому он по сути не имеет значения. TestEmployee4 также зависит от ранее использованного класса ScottEmployee2 (поэтому он полон комментариев).

Моя единственная цель - заставить эту программу работать правильно - на данный момент меня не беспокоит обилие сомнительного количества кода, представленного в этом проекте. Я не могу консультироваться со своим профессором до понедельника.

Это содержимое TestEmployee4:

import java.util.*;
import java.io.*;
import java.util.Scanner;

public class TestEmployee4
{

  public static void main(String[] args) throws FileNotFoundException

 {
 ScottEmployee2[] employees = createEmployeeArrayFromFile();
 createEmployeeArrayFromFile();
 printEmployeeArray(employees); 
}


public static ScottEmployee2[] createEmployeeArrayFromFile() throwsFileNotFoundException
 {
    File file = new File("employees.txt"); 
Scanner inputFile = new Scanner( new File("employees.txt") );

ScottEmployee2[] employees = new ScottEmployee2[10];

int index = 0;


while (inputFile.hasNextLine() && index < employees.length) // && index < employees.length

{  
      String dummyNumber = inputFile.nextLine();
      int theNumber = Integer.parseInt(dummyNumber);
      String theName = inputFile.nextLine();
      String theDepartment = inputFile.nextLine();
      String thePosition = inputFile.nextLine();
      String dummySalary = inputFile.nextLine();
      double theSalary = Double.parseDouble(dummySalary);
      String dummyRank = inputFile.nextLine();
      int theRank = Integer.parseInt(dummyRank);


      employees[index] = new ScottEmployee2(theNumber, theName, theDepartment, thePosition, theSalary, theRank);
      index++;
}
return employees;
}


public static void printEmployeeArray(ScottEmployee2[]employees)
{
for(ScottEmployee2 i : employees){   
ScottEmployee2.displayEmployee();

}


}

}

И это содержимое ScottEmployee2:

public class ScottEmployee2

{
  private static int number; 
  private static String name; 
  private static String department; 
  private static String position; 
  private static double salary; 
  private static int rank; 
  private static double percentage; 
  private static double modSalary;


 public ScottEmployee2(int theNumber, String theName, String theDepartment,String thePosition, double theSalary, int theRank) 
 {
  number = theNumber; 
  name = theName;
  department = theDepartment;
  position = thePosition;
 salary = theSalary;
 rank = theRank;

}

   public ScottEmployee2(int theNumber, String theName) 
{
  number = theNumber; 
 name = theName;
 department = null;
 position = null;
 salary = 0;
 rank = 0;
 percentage = 0;
  modSalary = 0;
 }
  /**
   * Sets the salary.
   * @param theSalary Holds the value of salary.
   */

   public void setSalary(double theSalary) 
   {
    salary = theSalary; 
   }

   /**
    * Created to provide the accessor and mutator methods for each field value
    * as instructed to meet the requirements of the project.
    * @return salary, a double value
    */

    public double getSalary()
    {
    return salary;
    }


   /**
   * Created to provide the accessor and mutator methods for each field value
   * as instructed to meet the requirements of the project. setNumber is the mutator.
   * @param theNumber Stores an integer, the value of a number.
   */

   public void setNumber(int theNumber) 
   {
   number = theNumber;
   }

  /**
   * Created to provide the accessor and mutator methods for each field value
   * as instructed to meet the requirements of the project. getNumber is the accessor.
   * @return number, an integer.
   */

   public int getNumber()
   {
   return number; 
   }

/**
* Created to provide the accessor and mutator methods for each field value
* as instructed to meet the requirements of the project. setName is the mutator.
* @param theName Stores a String, a name.
*/

 public static void setName(String theName) 
 {
 name = theName;
 }

/**
* Created to provide the accessor and mutator methods for each field value
* as instructed to meet the requirements of the project. getName is the accessor because
* it gets a value from a class field but does not modify it.
* @return name, a String, the employee's name.
*/

public static String getName()
{
return name; 
}

/**
* Created to provide the accessor and mutator methods for each field value
* as instructed to meet the requirements of the project. theDepartment is the mutator because
* it stores or changes a value in a field.
* @param theDepartment Stores a String, the department that the employee works in.
*/

public void setDepartment(String theDepartment) 
{
department = theDepartment ; 
}

/**
* Created to provide the accessor and mutator methods for each field value
* as instructed to meet the requirements of the project. getDepartment is the accessor because
* it gets a value from a class field but does not modify it.
* @return department, a String, the employee's department.
*/

public String getDepartment()
{
 return department; 
}

/**
* Created to provide the accessor and mutator methods for each field value
* as instructed to meet the requirements of the project. thePosition is the mutator because
* it stores or changes a value in a field.
* @param thePosition Stores a String, the position that the employee holds.
*/

 public void setPosition(String thePosition) 
 {
 position = thePosition ; 
 }

/**
* Created to provide the accessor and mutator methods for each field value
* as instructed to meet the requirements of the project. getPosition is the accessor because
* it gets a value from a class field but does not modify it.
* @return position, a String, the position that the employee holds.
*/

 public String getPosition()
 {
 return position; 
 }

 /**
  * Created to provide the accessor and mutator methods for each field value
* as instructed to meet the requirements of the project. theDepartment is the mutator because
* it stores or changes a value in a field.
* @param theRank Stores an integer, the employee's rank.
*/

 public void setRank(int theRank) 
 {
  rank = theRank; 
 }

/** 
*Accessor method.
*@return rank, an integer, the employee's rank.
*/

 public int getRank()
 {
  return rank; 
 }

  /**
  * Mutator method.
   * @param percent, stores a double, the percentage
  * to be applied to the current salary.
  * Contains an if statement, to filter out results
  * that are out of bounds -- less than 1% or greater than 25% 
  */

  public void applyRaise(double percent) 
   {
   percentage = percent;

   if (percentage < 1 || percentage > 25)
   {
  System.out.println("NO RAISE APPLIED");
  percentage = 0;
   }
   modSalary = salary;
    salary = modSalary + (salary * (percentage * 0.01));            
    }

  /** 
   * Accessor method.
   * @return percentage, the percent to be applied to salary 
   * to give the raise. 
   */

  public double theRaise()
  {
   return percentage; 
 }

/** 
* Prints a formatted salary. Per instructions, this method does
* not define any parameters or return any values.
*/

 public void printSalary() 
 {
  System.out.printf("$%,.2f\n", salary);
 }


  /** 
 * Method that returns a boolean value of true if employee rank is greater
 * than five. Otherwise, it returns false.
   */

   public static boolean checkBonus()
  {
   {
   if (rank > 5)
   {
   return true;
  }
 else 
   {
  return false;
 }}
 }  

/** 
* Method to print employee's information to standard output. The employee    number is formatted to
* nine digits and salary is formatted as currency. This method calls checkBonus() for a value of 
* true or false. If true, an additional statement is printed. Otherwise, no bonus statement is printed.
*/

  public static void displayEmployee()
  {
 System.out.println("Name: " + name);
 System.out.printf("Employee Number: %09d", number);
 System.out.println("\nDepartment: " + department + "\nPosition: " + position); 
 System.out.printf("Salary: $%,.2f", salary); 
 System.out.println("\nRank: " + rank);
 if (checkBonus() == true)
 {
   System.out.println("Bonus: $1,000");

  }
 else
 {
 // do nothing  
 }



}
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Когда вы выполняете цикл for / каждый цикл, у вас есть

ScottEmployee2.displayEmployee();

Однако вы назначаете переменную i для объекта ScottEmployee2. Попробуйте вместо:

i.displayEmployee();

Также несколько (надеюсь, полезных) замечаний о вашем коде.

В одном из ваших методов у вас есть что-то вроде:

if(//something) {
   //Do something
}
else {
//do nothing
}

Однако вам не нужно оператор else для каждого оператора if. Вы можете просто сделать:

if(//something) {
  //do something
}

И оставь остальную часть. Также это только для соглашений, но обычно в скобках, как в коде выше, где у вас есть открывающая скобка в той же строке оператора if. В целом, очень простая ошибка.

0 голосов
/ 06 мая 2018

Итак, есть несколько вещей, которые я хотел бы обсудить с вами, и некоторые из них выходят за рамки ответа на эту конкретную проблему, с которой вы столкнулись.

Для начала давайте разберемся с проблемой. Всякий раз, когда вы собираетесь распечатать массив сотрудников, вы делаете следующий код:

public static void printEmployeeArray(ScottEmployee2[]employees)
{
    for(ScottEmployee2 i : employees){   
        ScottEmployee2.displayEmployee();

    }
}

Есть несколько проблем с этим кодом. Во-первых, у вас нет места между ScottEmployee2 [] и сотрудниками. Затем вы вызываете displayEmployee () для класса ScottEMployee2, а не для объекта, который есть в вашем цикле for. Вот что вы должны сделать:

public static void printEmployeeArray(ScottEmployee2[]employees)
{
    for(ScottEmployee2 i : employees){   
        i.displayEmployee();

    }

Теперь, выходя за рамки этого быстрого исправления, я хочу поговорить с вами о некоторых ваших соглашениях по коду. Во-первых, этот цикл while должен быть выполнен для цикла for следующим образом:

for (i = 0; i < employees.length i ++){
  if(!inputFile.hasNextLine()){
      break;
  }
  String dummyNumber = inputFile.nextLine();
  int theNumber = Integer.parseInt(dummyNumber);
  String theName = inputFile.nextLine();
  String theDepartment = inputFile.nextLine();
  String thePosition = inputFile.nextLine();
  String dummySalary = inputFile.nextLine();
  double theSalary = Double.parseDouble(dummySalary);
  String dummyRank = inputFile.nextLine();
  int theRank = Integer.parseInt(dummyRank);


  employees[index] = new ScottEmployee2(theNumber, theName, theDepartment, thePosition, theSalary, theRank);
  index++;
}

Это просто потому, что это более стилистически уместно. Во-вторых, в вашем классе ScottEmployee у вас есть несколько статических методов, когда их не должно быть. То есть:

  • displayEmployee ();
  • checkBonus ();
  • SetName (); // Вы не хотите, чтобы все сотрудники имели одинаковое имя, верно?
  • GetName ();

Кроме того, почти все ваши поля в этом классе не должны быть статическими, поскольку им не нужно оставаться согласованными при каждом создании экземпляра класса. Это означает, что ваши поля должны выглядеть следующим образом:

private static int number; 
private int rank;
private String name,department,position; 
private double salary,percentage,modSalary;

Использование статического должно быть только в том случае, если у вас должна быть полевая работа во всех экземплярах класса. Наличие статического числа означает, что все, что вы установили при создании нового ScottEmployee2, будет тем же, что и для следующего, которое вы делаете, если вы его не измените.

Я искренне надеюсь, что все это поможет вам в ваших приключениях в области кодирования! Пелас, дай мне знать, могу ли я тебе чем-нибудь помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...