Pregunta

I'm going totally nuts on my BankLogic now. Three classes, Customer, SavingsAccount and BankLogic where I want to create customers and savings accounts. I have two methods that works fine, addCustomer() (where I add customers to arraylist Customer) and addSavingsAccount() (where I add savings accounts to customers with certain pNr). My problem is that I don't know how to print stuff out from two arraylists that somehow have to be linked together. How do I do that?

This method is Ok if I only have info = customer.toString(). How do I get the right accountId to the pNr? I know I can't fetch it from SavingsAccount, it will generate a new number. But how do I do?

BankLogic class

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 class

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;
}
}

Customer class:

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; 
}
}
¿Fue útil?

Solución

Your SavingsAccount class needs an accountId as an instance variable that gets assigned by the constructor. Change your current static accountId to something like nextAccountId. You probably don't want balance to be static either since each account needs its own value.

    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;
      }
    }

Otros consejos

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;
}
}

loop through the results

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";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top