2015-02-25 7 views
0

Итак, я, наконец, закончил свое задание и тестировал его, создав объекты, используя правый клик «Новая учетная запись» и т. Д., Все это прекрасно работает, и из того, что я вижу, Суперклассы и подклассы все связаны правильно, однако моя работа протестирована с использованием тестового класса HW2, который при запуске должен создать несколько учетных записей и распечатать их данные на терминале. Однако на выходе отсутствуют загружаемые материалы по сравнению с тем, что должно быть похоже, в основном я хочу знать, почему тестовый скрипт не создает объекты правильно. Я написал много кода, но я считаю, что проблема заключается только в конструкторах.Создание новых объектов с другим классом

enter image description here

enter image description here

RUNHW2

/** 
* Class to test CG0048 Homework 2 
* 
* @author (your name) 
* @version (a version number or a date) 
*/ 
public class RunHW2 
{  
    private String name, id; 
    private AccountList accounts; 
    private PersonalAccount pa1, pa2; 
    private TradeAccount ta1, ta2; 

    /** 
    * Constructor for objects of class HW2Test 
    * 
    * @param name the student's name 
    * @param id the student's id 
    */ 
    public RunHW2(String name, String id) 
    { 
     this.name = name; 
     this.id = id; 

     accounts = new AccountList();   
     runTests(); 
    } 

    /** 
    * Run the various tests 
    */ 

    public void runTests() 
    { 
     // print header 
     System.out.println("Name: " + name + "\tID: " + id + "\n"); 

     testAddPersonalAccountNoPoints(); 
     testAddPersonalAccountWithPoints(); 
     testAddTradeAccountNoPoints(); 
     testAddTradeAccountWithPoints();  

     System.out.println("Student should now print out the contents of the terminal window."); 

    } 


    /** 
    * Create 2 Personal Accounts 
    */ 

    public void testAddPersonalAccountNoPoints() 
    { 
     try 
     { 
      // personal account with no initial points 
      pa1 = new PersonalAccount ("Ann", "Archer","1000", 
              "1 Amble Way", "Amble", "AA1 1AA", 
              "1111111111111111", 'D'); 
      accounts.addAccount(pa1); 
      System.out.println(pa1);     
     } 
     catch (Exception e) 
     { 
      System.out.println("An exception was raised in " 
        + "testAddPersonalAccountNoPoints."); 
     } 
    } 

    public void testAddPersonalAccountWithPoints() 
    { 
     try 
     { 
      // personal account with additional points 
      pa2 = new PersonalAccount ("Barbara", "Bach","1001", 
              "2 Blyth Boulevard", "Blyth", "BB2 2BB", 
              "2222222222222222", 'M', 20); 
      accounts.addAccount(pa2); 
      System.out.println(pa2);    
     } 
     catch (Exception e) 
     { 
      System.out.println("An exception was raised in testAddPersonalAccountWithPoints."); 
     } 
    } 

    public void testAddTradeAccountNoPoints() 
    { 
     try 
     { 
      // trade account with no initial points 
      ta1 = new TradeAccount ("Colin", "Cowdry","1002", 
           "3 Consett Crescent", "Consett", "CC3 3CC", 
           "Cowdry Construction", 
           "33 Chopwell Close", "Chopwell", "CD3 3CD", 
           "GB333333"); 

      accounts.addAccount(ta1);      
      System.out.println(ta1);    
     } 
     catch (Exception e) 
     { 
      System.out.println("An exception was raised in testAddTradeAccountNoPoints."); 
     } 
    } 

    public void testAddTradeAccountWithPoints() 
    { 
     try 
     { 
      // trade account with initial points 
      ta2 = new TradeAccount ("Dave", "Dee","1004", 
           "4 Durham Dwellings", "Durham", "DD4 4DD", 
           "Dee Design", 
           "44 Darlington Drive", "Darlington", "DE4 4DE", 
           "GB444444", 40); 
      accounts.addAccount(ta2);     
      System.out.println(ta2);    
     } 
     catch (Exception e) 
     { 
      System.out.println("An exception was raised in testAddTradeAccounts."); 
     } 
    } 
} // end class 

СЧЕТ

public class Account 
{ 
    private String accountNumber; 
    private Address address; 
    private Name name; 
    private int pointsHeld; 

    /** 
    * Constructor for objects of class Account. 
    * The number of pointsHeld should be set to zero. 
    * 
    * @param firstName The Account Holder's first name 
    * @param lastName The Account Holder's last name 
    * @param accNumber The Account Holder's account number 
    * @param street the account holder's street 
    * @param town the account holder's town 
    * @param postcode the account holder's postcode 
    */ 
    public Account (String fName, String lName, String accNumber, 
    String street, String town, String postcode) 
    { 
     name = new Name(fName, lName); 
     accountNumber = accNumber; 
     pointsHeld = 0;  
     address = new Address(street, town, postcode); 
    } 

    /** 
    * Constructor for objects of class Account. 
    * The number of pointsHeld should should be set to 
    * the supplied value. 
    * 
    * @param fName The Account Holder's first name 
    * @param lName The Account Holder's last name 
    * @param acctNumber The account number 
    * @param thePoints the pointsHeld awarded when account is initialised 
    * @param street the account holder's street 
    * @param town the account holder's town 
    * @param postcode the account holder's postcode 
    */ 
    public Account(String fName, String lName, String acctNumber, int points, 
    String street, String town, String postcode) 
    { 
     name = new Name(fName, lName); 
     accountNumber = acctNumber; 
     pointsHeld = points;  
     address = new Address(street, town, postcode); 
    } 

    // accessors 

    /** 
    * Increase the number of points held by a given number 
    * and output a message to the console window giving 
    * the revised number of points held. 
    * 
    * @param number of points to add to total 
    */ 
    public void addPoints(int points) 
    { 
     pointsHeld = pointsHeld + points; 
     System.out.println("Points now held: " + pointsHeld);   
    } 

    public boolean equals (Object o) 
    { 
     if (o == null) 
      return false; 

     if (!this.getClass().equals(o.getClass())) 
      return false; 

     else 

      return true; 

    } 

    /** 
    * Get the Account Holder's account Number 
    * 
    * @return the Account Holder's account number 
    */ 
    public String getAccountNumber() 
    { 
     return accountNumber; 
    } 

    /** 
    * Return the account holder's address 
    * 
    * @return the account holder's address 
    */ 
    public String getAddress() 
    { 
     return address.toString(); 
    } 

    /** 
    * Get the Account Holder's first name 
    * 
    * @return the Account Holder's first name 
    */ 
    public String getFirstName() 
    { 
     return name.getFirst(); 
    } 

    /** 
    * Get the Account Holder's last name 
    * 
    * @return the Account Holder's last name 
    */ 
    public String getLastName() 
    { 
     return name.getLast(); 
    } 

    /** 
    * Get the number of points held 
    * 
    * @return the number of points held 
    */ 
    public int getNoOfPoints() 
    { 
     return pointsHeld; 
    } 

    /** 
    * Print out the Account Holder's details to the console window 
    * 
    */ 
    public void printAccountDetails() 
    { 
     System.out.println ("Personal Account:" + accountNumber + " " + name.getFirst() + " " + 
     name.getLast()); 

     System.out.println (address.toString()); 

     System.out.println ("Points Held:" + pointsHeld); 


    }  

    /** 
    * Remove pointsHeld by a given number and output a 
    * message to the console window giving the revised number 
    * of points held as long as the number of points would 
    * not fall below zero 
    * - otherwise output message to console window instead. 
    * 
    * @param number of pointsHeld to remove total. 
    * 
    */ 
    public void removePoints (int points) 
    { 
     if ((pointsHeld - points) >=0) 
     { 
      pointsHeld = pointsHeld - points; 
      System.out.println("Points now held: " + pointsHeld);   
     } 
     else 
     { 
      System.out.println("Transaction refused: " 
       + "Insufficient points available."); 
     } 
    } 

    // mutators  

    /** 
    * Change the account holder's address 
    * 
    * @param street the street 
    * @param town the town 
    * @postcode the postcode 
    */ 
    public void setAddress(String street, String town, String postcode) 
    { 
     address.setFullAddress(street, town, postcode); 
    } 

    /** 
    * Change the first name 
    * 
    * @param fName the new first name 
    * 
    */ 
    public void setFirstName(String fName) 
    { 
     name.setFirst(fName); 
    } 

    /** 
    * Change the last name 
    * 
    * @param lName the new last name 
    * 
    */ 
    public void setLastName(String lName) 
    { 

     name.setLast(lName); 

    } 

    public String toString() 
    { 

     return name.toString(); 

    } 

} // end class 

PERSONALACCOUNT

/** 
* Write a description of class PersonalAccount here. 
* 
* @author (your name) 
* @version (a version number or a date) 
*/ 
public class PersonalAccount extends Account 
{ 
    // instance variables - replace the example below with your own 
    private String cardNumber; 
    private char cardType; 

    /** 
    * Constructor for objects of class PersonalAccount 
    */ 

    public PersonalAccount (String firstName, String lastName, String accountNumber, 
    String street, String town, String postcode, String cardNumber, char cardType) 
    { 

     super(firstName,lastName,accountNumber,street,town,postcode); 
     this.cardType = cardType; 
     this.cardNumber = cardNumber; 

    } 

    public PersonalAccount(String firstName, String lastName, String accountNumber, 
    String street, String town, String postcode, String cardNumber, char cardType, int points) 
    { 
     super(firstName,lastName,accountNumber,street,town,postcode); 

     this.cardType = cardType; 
     this.cardNumber = cardNumber; 
     super.addPoints(points); 

    } 


    public String getCardNumber() 
    { 

     String input = cardNumber; 

     StringBuilder result = new StringBuilder(); 
     for (int i = 0; i < input.length(); i++) { 
      if (i % 4 == 0 && i != 0) { 
       result.append(" "); 
      } 

      result.append(input.charAt(i)); 
     } 

     return result.toString(); 


    } 


     public String getCardType() 
     { 
      if (cardType == 'D') { 
       return "Debit"; 
      } 
      else if (cardType == 'M') { 
       return "Mastercard"; 
      } 
      else 
       return "Visa"; 

     } 

     public void print() 
     { 

      super.printAccountDetails(); 
      System.out.println("Card Number:"+getCardNumber() + " Card Type: " + getCardType()); 

     } 

     public String toString() 
     { 
      return super.toString(); 

     } 
    } 
+0

Я не голосовал U вниз, но я думаю, что тот, кто сделал, проголосовали вас вниз, потому что вы не специфичны о том, что вас беспокоит. Я думаю, что вы должны сузить свою проблему, чтобы другие могли помочь вам лучше. –

+0

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

ответ

1

Ваши методы toString не являются полными. Вы можете видеть, что набор тестов в основном создает экземпляр класса и печатает его. Учетная запись toString (и, возможно, PersonalAccount тоже) должна вернуть содержимое в правом окне, которое включает не просто имя.

Вместо return name.toString();, вы хотите что-то больше похоже на return name.toString() + "\n" + otherField.toString();

+0

О, поэтому набор тестов в основном использует метод toString для печати содержимого его результатов, а не для вызова printAccountDetails(); метод каждого класса? Я был совершенно смущен точно, что хотел использовать метод toString, и нам не дано никаких объяснений :( –

+0

Да, метод toString будет неявным образом вызван. – mattm

+0

Я вижу. Как вы думаете, почему причина создания публичной недействительной печати() , который содержит все форматирование и прочее для этого? Кажется, что это пустая трата. Является ли это просто более простым способом отображения данных учетной записи на недействительном вызове, если что-то случится с ней? –

Смежные вопросы