在另一个类中实现两个arraylists

时间:2014-05-05 11:34:17

标签: java arraylist

我现在BankLogic完全疯了。我想要创建客户和储蓄帐户的三个类CustomerSavingsAccountBankLogic。 我有两种方法可行,addCustomer()(我将客户添加到arraylist Customer)和addSavingsAccount()(我将储蓄帐户添加到具有特定pNr的客户)。我的问题是我不知道如何从两个必须联系在一起的arraylists中打印出东西。我该怎么做?

如果我只有info = customer.toString(),此方法就可以了。如何向accountId获得正确的pNr?我知道我无法从SavingsAccount获取它,它会生成一个新号码。但我该怎么办?

BankLogic类

import java.util.ArrayList;
import java.util.Scanner;

public class BankLogic
{
private double amount;
private double balance;
private ArrayList<Customer> customerlist;
private ArrayList<SavingsAccount> accounts;

Scanner in = new Scanner(System.in);

public BankLogic()
{
    customerlist = new ArrayList<Customer>();
    accounts = new ArrayList<SavingsAccount>();
}
public String infoBank()
{
    String customers = customerlist.toString();
    return customers.substring(1, customers.length() - 1);
}
public boolean addCustomer(String name, long pNr)
{
boolean add = true;

    for(int i = 0; i < customerlist.size(); i++)
    {
        if (customerlist.get(i).getPCode() == pNr)
        {
            add = false;
        }
    }

    if(add)
    {
        customerlist.add(new Customer(name, pNr));
        add = true;
    }

    return add;

}
public String infoCustomer(long pNr){

    String info = "";
    for (Customer customer : customerlist)
    {
        if (customer.getPCode() == pNr)
        {
                info = customer.toString() + "\tKontonr: " + findAccount(pNr); 
        }
     } 
    return info;
}
public String findAccount(long pNr){

    for(SavingsAccount account : accounts)
    {
      if (account.getPCode() == pNr)
       {
         return "account found";
       }
    }
 return "Nothing found";
}
public boolean changeCustomerName(String name, long pNr){

boolean result = false;

    for(int i = 0; i < customerlist.size(); i++)
    {
        if (customerlist.get(i).getPCode() == pNr)
        {
            Customer customer = customerlist.get(i);
            customer.setName(name);
            customerlist.set(i, customer);
            result = true;
        }
    }

    return result;
}
public String removeCustomer(long pNr){

    for (int i = 0; i < customerlist.size(); i++)
    {
        Customer customer = customerlist.get(i);
        if (customer.getPCode() == pNr)
        {
            customer = customerlist.remove(i);
        }
        else
            i++;
    }
    return "Removeinfo: ";

}
public int addSavingsAccount(long pNr){
    /*
    for(int i = 0; i < customerlist.size(); i++)
    {
        accounts.add(new SavingsAccount());
    }
    return SavingsAccount.getAccountId();
    */


    int add = 0;

    for(int i = 0; i < customerlist.size(); i++)
    {
        if (customerlist.get(i).getPCode() == pNr)
        {
            accounts.add(new SavingsAccount());
        }
        else
        {
            return -1;
        }
    }

    return add;

}
public String infoAccount(long pNr, int accountId)
{
    String info = "";
    for(Customer customer : customerlist)
    {
        if(pNr == customer.getPCode())
        {
            for(SavingsAccount account : accounts)
            {
                if(accountId == account.getAccountId())
                {
                    info = "Personnummer: " + pNr + "\nKontonummer: " + accountId
                    + "\nSaldo: " + amount + "\nRänta: " + SavingsAccount.RATE;
                }
            }
        } 
    }
    return info; 
}
public boolean deposit(long pNr, int accountId, double amount)
{   
    for(Customer customer : customerlist)
    {
        for (SavingsAccount account : accounts)
            {
                if(accountId == account.getAccountId() && pNr == customer.getPCode())
                {
                     balance += amount;
                     return true;
                }
            }
    }
    return false;
}


public boolean withdraw(long pNr, int accountId, double amount){

    for(Customer customer : customerlist)
    {
        if(pNr == customer.getPCode())
        {
            for(SavingsAccount account : accounts)
            {
                if(accountId == account.getAccountId())
                {
                    balance -= amount;
                    return true;
                }
            }
            return false;
        }
    }
    return false;
}


//stänger ett konto och returnerar saldo och ränta
public String closeAccount(long pNr, int accountId){

            if(customerlist.size() > accountId)
            {
                balance = SavingsAccount.getBalance();
                customerlist.remove(accountId);
            }

            return  "Saldo: " + balance + "\nRänta: " + SavingsAccount.getIntRate();
} 

}

SavingsAccount类

public class SavingsAccount
{
private static double balance;
private static String accounttype = "Sparkonto";
private static int accountId = 1001;
public static final double RATE = 2.0;
private long pNr;

//----------------------------------------------------------------------
// Beskrivning: hämtar kundens personnummer
// Inparametrar: 
// Returvärde: long returnerar personnummer
//----------------------------------------------------------------------
public long getPCode(){
   return pNr;
}
//----------------------------------------------------------------------
// Beskrivning: hämtar saldo
// Inparametrar: 
// Returvärde: double returnerar saldo
//----------------------------------------------------------------------
public static double getBalance(){
    return balance;
}

//----------------------------------------------------------------------
// Beskrivning: hämtar kontotyp
// Inparametrar: 
// Returvärde: String returnerar kontotyp
//----------------------------------------------------------------------
public static String getAccountType(){
    return accounttype;
}

//----------------------------------------------------------------------
// Beskrivning: hämtar kontonummer
// Inparametrar: 
// Returvärde: int returnerar kontonummer
//----------------------------------------------------------------------
public static int getAccountId(){
    return accountId++;
}

//----------------------------------------------------------------------
// Beskrivning: hämtar ränta
// Inparametrar: 
// Returvärde: double returnerar räntesatsen
//----------------------------------------------------------------------
public static double getIntRate(){
    return RATE;
}
//----------------------------------------------------------------------
// Beskrivning: beräknar ränta per år
// Inparametrar: 
// Returvärde: double returnerar saldot inkl. årsräntan i kronor
//----------------------------------------------------------------------
public static double calculateIntRate(){
    return balance += (balance * RATE) / 100;
}

//----------------------------------------------------------------------
// Beskrivning: utför transaktioner; insättning / uttag, och lämnar 
// meddelande om kontot understiger 0
// (Här fick jag hjälp från en föreläsning från Chalmers.
// http://www.cse.chalmers.se/edu/year/2009/course/TDA143/Lectures/F5.pdf)
// Inparametrar: double amount
// Returvärde: double returnerar nytt saldo om det finns täckning på konto
//----------------------------------------------------------------------
public double transaction(double amount){

    if(amount < 0 && balance + amount < 0)
        return -0;
    else
        return balance += amount;
}

//----------------------------------------------------------------------
// Beskrivning: variablerna blir utskrivbara
// Inparametrar: 
// Returvärde: String returnerar kontonummer, kontotyp, saldo och ränta
//----------------------------------------------------------------------
public String toString(){
    String infoAccount = "Kontonr: " + accountId + "\nKontotyp: " + accounttype +
    "\nSaldo: " + balance + "\tRäntesats: " + RATE;
    return infoAccount;
}
}

客户类:

public class Customer
{
private String name;
private long pNr;

//----------------------------------------------------------------------
// Beskrivning: konstruktor
//----------------------------------------------------------------------
public Customer(String cName, long pCode)
{
    name = cName;
    pNr = pCode;
}

//----------------------------------------------------------------------
// Beskrivning: hämtar kundens namn
// Inparametrar: 
// Returvärde: String returnerar namn
//----------------------------------------------------------------------
public String getName(){
    return name;
}

//----------------------------------------------------------------------
// Beskrivning: hämtar kundens personnummer
// Inparametrar: 
// Returvärde: long returnerar personnummer
//----------------------------------------------------------------------
public long getPCode(){
    return pNr;
}

//----------------------------------------------------------------------
// Beskrivning: ändrar en kunds namn
// Inparametrar: String newName - nytt namn genereras
// Returvärde: String returnerar kundens nya namn
//----------------------------------------------------------------------
public void setName(String newName){
    name = newName;
}


//----------------------------------------------------------------------
// Beskrivning: skriver ut all info om kunden
// Inparametrar: 
// Returvärde: String returnerar personnummer och namn
//----------------------------------------------------------------------
public String toString(){
    return "\nPersonnummer: " + pNr + "\tNamn: " + name; 
}
}

2 个答案:

答案 0 :(得分:0)

您的SavingsAccount类需要一个accountId作为由构造函数分配的实例变量。将您当前的静态accountId更改为nextAccountId。您可能不希望余额保持静态,因为每个帐户都需要自己的价值。

    public class SavingsAccount()
    {
      private static int nextAccountId = 1001;
      private int accountId;
      private double balance = 0.0;

      private int getNextAccountId()
      {
          return nextAccountId++;
      }

      public SavingsAccount()
      {
        accountId = getNextAccountId();
      }

      public int getAccountId()
      {
          return accountId();
      }

      public double getBalance()
      {
          return balance;
      }
    }

答案 1 :(得分:0)

SavingsAccount

public class SavingsAccount
{
  private static double balance;
  private static String accounttype = "Sparkonto";
  private static int accountId = 1001;
  public static final double RATE = 2.0;
  private long pNr;
//----------------------------------------------------------------------
// Beskrivning: hämtar kundens personnummer
// Inparametrar: 
// Returvärde: long returnerar personnummer
//----------------------------------------------------------------------
public long getPCode(){
   return pNr;
}



//----------------------------------------------------------------------
// Beskrivning: hämtar saldo
// Inparametrar: 
// Returvärde: double returnerar saldo
//----------------------------------------------------------------------
public static double getBalance(){
    return balance;
}

//----------------------------------------------------------------------
// Beskrivning: hämtar kontotyp
// Inparametrar: 
// Returvärde: String returnerar kontotyp
//----------------------------------------------------------------------
    public static String getAccountType(){
    return accounttype;
}

//----------------------------------------------------------------------
// Beskrivning: hämtar kontonummer
// Inparametrar: 
// Returvärde: int returnerar kontonummer
//----------------------------------------------------------------------
public static int getAccountId(){
    return accountId++;
}

//----------------------------------------------------------------------
// Beskrivning: hämtar ränta
// Inparametrar: 
// Returvärde: double returnerar räntesatsen
//----------------------------------------------------------------------
public static double getIntRate(){
    return RATE;
}
//----------------------------------------------------------------------
// Beskrivning: beräknar ränta per år
// Inparametrar: 
// Returvärde: double returnerar saldot inkl. årsräntan i kronor
//----------------------------------------------------------------------
public static double calculateIntRate(){
    return balance += (balance * RATE) / 100;
}

//----------------------------------------------------------------------
// Beskrivning: utför transaktioner; insättning / uttag, och lämnar 
// meddelande om kontot understiger 0
// (Här fick jag hjälp från en föreläsning från Chalmers.
// http://www.cse.chalmers.se/edu/year/2009/course/TDA143/Lectures/F5.pdf)
// Inparametrar: double amount
// Returvärde: double returnerar nytt saldo om det finns täckning på konto
//----------------------------------------------------------------------
public double transaction(double amount){

    if(amount < 0 && balance + amount < 0)
        return -0;
    else
        return balance += amount;
}

//----------------------------------------------------------------------
// Beskrivning: variablerna blir utskrivbara
// Inparametrar: 
// Returvärde: String returnerar kontonummer, kontotyp, saldo och ränta
//----------------------------------------------------------------------
public String toString(){
    String infoAccount = "Kontonr: " + accountId + "\nKontotyp: " + accounttype +
    "\nSaldo: " + balance + "\tRäntesats: " + RATE;
    return infoAccount;
}
}

循环结果

public String infoCustomer(long pNr){

    String info = "";
    for (Customer customer : customerlist)
    {
        if (customer.getPCode() == pNr)
        {
                info = customer.toString() + "\tKontonr: " + findAccount(pNr); 
        }
     } 
    return info;
}

public String findAccount(long pNr){

    for(SavingsAccount account in accounts)
    {
      if (account.getPCode() == pNr)
       {
         return "account found";
       }
    }
 return "Nothing found";
}