Fines didácticos únicamente. Estoy practicando ArrayLists[] y tengo esta simple "app bancaria" que hace cosas como agregar una sucursal, agregar clientes, transacciones a un cliente, etc.
Una de sus funciones me está dando NullPointerException al intentar agregar un cliente y su correspondiente depósito inicial a una sucursal.
He modificado el metodo newClientAndTransaction varias veces, encarando el problema de varias maneras pero sigo sin encontrar cual es el error, u objeto inexistente.
Cual es el problema? Cómo puedo identificar este tipo de errores? Tengo entendido que es "común" en Java tener un NPE. Saludos.
[Main]
import java.util.Scanner;
public class Main {
public static Scanner scanner = new Scanner(System.in);
private static Bank banco = new Bank("Banco Central");
public static void main(String[] args) {
banco.addBranch("prueba");
newClientAndTransaction();
}
public static void newClientAndTransaction() {
System.out.println("Enter branch to open account in\n");
String branchName = scanner.nextLine();
banco.findBranch(branchName); //busca si en alguna posicion int de la lista de sucursales hay una con el nombre pasado
//si lo encuentra pasa a usar el objeto Branch de la posicion donde encontró ese nombre para agregarle un cliente
if (banco.findBranch(branchName) >= 0) {
Branch sucursalDeRadicacion = banco.queryBranchObjectInArray(branchName);
System.out.println("Branch " + branchName + " exists. It is branch #" + banco.findBranch(branchName));
System.out.println("Please type new client name\n");
String newClientName = scanner.nextLine();
System.out.println("Enter initial deposit");
double initialDeposit = scanner.nextInt();
Branch.agregarCliente(sucursalDeRadicacion, newClientName, initialDeposit);
} else {
System.out.println("Can't add client because branch " + branchName + " was not found");
}
}
}
[Branch]
import java.util.ArrayList;
public class Branch {
private String branchName;
private static ArrayList<Client> clients;
public Branch(String name) {
this.branchName = name;
this.clients = new ArrayList<Client>();
System.out.println("Sucursal " + name + " creada.");
}
public static void agregarCliente(Branch branchName, String name, double initialTransaction) {
branchName.clients.add(new Client(name, initialTransaction));
System.out.println("Cliente " + name + " agregado a esta sucursal. Transaccion inicial: " + initialTransaction);
}
public String getName() {
return this.branchName;
}
}
[Bank]
import java.util.ArrayList;
public class Bank {
private String name;
private ArrayList<Branch> branches;
//CONSTRUCTOR
public Bank(String name) {
this.name = name;
this.branches = new ArrayList<Branch>();
}
public void addBranch(String branchName) {
Branch newBranch = new Branch(branchName);
branches.add(newBranch);
}
public int findBranch(String branchNameToSearch) {
int numOfBranches = this.branches.size();
String queryToLowerCase = branchNameToSearch.toLowerCase(); //pasa a lower case para evitar problemas
for (int i = 0; i < numOfBranches; i++) {
String branchNameToLower = branches.get(i).getName().toLowerCase();
boolean exists = queryToLowerCase.equals(branchNameToLower);
if (exists) {
return i;
}
}
return -1;
}
public Branch queryBranchObjectInArray(String name) {
int ArrayPositionOfNameSearched = findBranch(name);
if (ArrayPositionOfNameSearched >= 0) {
return this.branches.get(ArrayPositionOfNameSearched);
}
return null;
}
}
[Client]
import java.util.ArrayList;
public class Client {
private String clientName;
private ArrayList<Double> transactions; // = new ArrayList<Double>()
//CONSTRUCTOR
public Client(String clientName, double initialTransactions) {
this.clientName = clientName;
this.transactions.add(initialTransactions);
}
}