Duvida arraylist- mudar valores

2 respostas
F

ola pessoal

eu estou com uma duvida em como é que posso fazer o levantamente e deposito de contas.

Eu tenho o seguinte
um script que procura se a conta existe e retorna se existe ou nao. Agora eu queria que se ela existisse, que o user escreve-se tipo 3000? e ela levantasse. Só que eu estou tendo problemas com os estaticos e os getts and setters

o codigo é este

package sistema;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class Bank {

	static List <Account> lista = new ArrayList<Account>();

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		showAll();
		deposit1();
	}


	public static void deposit1() {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);    
		System.out.println("Digite o nome da conta:");    
		String find = sc.nextLine();

		Account<?> ac = findByName(find);
		
		if(ac == null) {
			System.out.println("Account does not exist");
		} else {
			System.out.println("Found account! " + ac);
			Scanner sc1 = new Scanner(System.in);    
			System.out.println("Digite a quantia a levantar:"); 
			Double scan = sc1.nextDouble();
			Account.withdraw(scan);

		}
	}

	private static Account<?> findByName(String name) {
		// TODO Auto-generated method stub
		for(Account<?> ac :lista) {
			if(ac.getAccountName().equals(name)) {
				return ac;
			}
		}
		return null;
	}




	public static void showAll() {
		// TODO Auto-generated method stub

		CurrentAccount conta1 = new CurrentAccount("Alberto Carlos", 1052);
		CurrentAccount conta2 = new CurrentAccount("Pedro Fonseca", 30);
		CurrentAccount conta3 = new CurrentAccount("Ricardo Vitor", 1534);
		CurrentAccount conta4 = new CurrentAccount("João Lopes", 3135);

		AccountLongTerm conta11 = new AccountLongTerm("Jacinto Alves", 54502);
		AccountLongTerm conta12 = new AccountLongTerm("Ana Anabela", 30);
		AccountLongTerm conta13 = new AccountLongTerm("Carlos Brás", 1234);
		AccountLongTerm conta14 = new AccountLongTerm("José Fonseca", 545);

		AccountP conta21 = new AccountP("Manuel Jose", 2200);
		AccountP conta22 = new AccountP("Carla Costa", 3050);
		AccountP conta23 = new AccountP("Francisco José", 12214);
		AccountP conta24 = new AccountP("Alberto Teixeira", 31415);


		Bank Bank1 = new Bank (); 

		Bank1.addAccount(conta1);
		Bank1.addAccount(conta2);
		Bank1.addAccount(conta3);
		Bank1.addAccount(conta4);		
		Bank1.addAccount(conta11);
		Bank1.addAccount(conta12);
		Bank1.addAccount(conta13);
		Bank1.addAccount(conta14);
		Bank1.addAccount(conta21);
		Bank1.addAccount(conta22);
		Bank1.addAccount(conta23);
		Bank1.addAccount(conta24);

		Collections.sort(Bank1.lista);

		System.out.printf("Bank Accounts:" + "%n");
		Iterator<Account> itr = Bank1.lista.iterator();
		while (itr.hasNext()) {
			Account<?>  element = itr.next();
			System.out.printf(element + " " + "%n");
		}
		System.out.println();



	}



	public void addAccount(Account<?> conta) {
		lista.add (conta);

	};

}

e a minha conta por exemplo currentAccount é

package sistema;



class CurrentAccount extends Account<Object> {

	public CurrentAccount(String accountN, double bal) {
		super(accountN, bal);
		// TODO Auto-generated constructor stub
		rate = 0.01;
		resultLong();
	}

	public String toString() {
		return "Conta à ordem: " + getAccountName() + ", saldo " + balanceMoney.format(getBalance())  + "?" +  ", Juros: " + decimals.format(resultLong) + "?";

	}

	@Override
	public void deposit(double amount) {
		// TODO Auto-generated method stub

	}

	@Override
	public double withdraw(double amount) {
		// TODO Auto-generated method stub
		if (getBalance()-amount <0){
			System.out.println("You don' have suficient founds!");
		}
		else {
			setBalance(getBalance()-amount);
		}

		return getBalance();
	}

}

sendo que na superclass tenho

package sistema;

import java.text.DecimalFormat;

abstract class Account<T> implements java.lang.Comparable<T> {

	private String accountName;
	private double balance;
	protected double resultLong;
	protected double rate;

	public Account (String accountN, double bal) {
		// TODO Auto-generated constructor stub
		setAccountName(accountN);
		setBalance(bal);
	}

	public int compareTo(Object o) {
		// TODO Auto-generated method stub

		if (this.getBalance() > ((Account<?>) o).getBalance()) {
			return -1;
		}
		if (this.getBalance() < ((Account<?>) o).getBalance()) {
			return 1;
		}
		return 0;
	}


	DecimalFormat balanceMoney = new DecimalFormat( " 0" ); 
	DecimalFormat decimals = new DecimalFormat( " 0.00 " );  

	public double resultLong() {
		return resultLong = balance*rate;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}


	public double getBalance() {
		return balance;
	}


	public void setAccountName(String accountName) {
		this.accountName = accountName;
	}


	public String getAccountName() {
		return accountName;
	}

	public abstract void deposit(double amount);
	public abstract double withdraw (double amount);

}

pessoa agradecia mesmo muito a vossa ajuda

2 Respostas

ViniGodoy

O que seria uma conta levantar-se? E o usuário digitaria 3000? aonde? E porque ele não poderia digitar 3000? se a conta não existisse?

E outra dica: Não use statics sem saber o que está fazendo. E você claramente não sabe.

F

ola

penso que nao faria sentido dar a hipotese de levantar dinheiro se a a respectiva conta nao existe

eu fiz um menu com switch e dou a hipotese de primeiro procurar pelo nome e se ela existe aí, deixa o user fazer deposito ou levantar atraves de scanner

EDIT: corrigido e a funcionar mas com dois warnings

package sistema;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class Bank {

	static List <Account> lista = new ArrayList<Account>();

	public void stop() {
		// TODO Auto-generated method stub
		System.exit(1);
	}

	 public void deposit1() {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);    
		System.out.println("Your name account:");    
		String find = sc.nextLine();

		Account<?> ac = findByName(find);

		if(ac == null) {
			System.out.println("Account does not exist");
		} else {
			System.out.println("Found account! " + ac);
			Scanner sc1 = new Scanner(System.in);    
			System.out.println("What value do you want to deposit: "); 
			Double scan = sc1.nextDouble();
			ac.deposit(scan);
		}
	}

	public void withdraw1() {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);    
		System.out.println("Your name account: ");    
		String find = sc.nextLine();

		Account<?> ac = findByName(find);

		if(ac == null) {
			System.out.println("Account does not exist");
		} else {
			System.out.println("Found account! " + ac);
			Scanner sc1 = new Scanner(System.in);    
			System.out.println("What value do you want to withdraw: "); 
			Double scan = sc1.nextDouble();
			ac.withdraw(scan);

		}
	}

	private Account<?> findByName(String name) {
		// TODO Auto-generated method stub
		for(Account<?> ac :lista) {
			if(ac.getAccountName().equals(name)) {
				return ac;
			}
		}
		return null;
	}


	public void showAll()  {
		// TODO Auto-generated method stub

		CurrentAccount account1 = new CurrentAccount("Alberto Carlos", 1052);
		CurrentAccount account2 = new CurrentAccount("Pedro Fonseca", 30);
		CurrentAccount account3 = new CurrentAccount("Ricardo Vitor", 1534);
		CurrentAccount account4 = new CurrentAccount("João Lopes", 3135);

		AccountLongTerm account11 = new AccountLongTerm("Jacinto Alves", 54502);
		AccountLongTerm account12 = new AccountLongTerm("Ana Anabela", 30);
		AccountLongTerm account13 = new AccountLongTerm("Carlos Brás", 1234);
		AccountLongTerm account14 = new AccountLongTerm("José Fonseca", 545);

		AccountP account21 = new AccountP("Manuel Jose", 2200);
		AccountP account22 = new AccountP("Carla Costa", 3050);
		AccountP account23 = new AccountP("Francisco José", 12214);
		AccountP account24 = new AccountP("Alberto Teixeira", 31415);

		Bank Bank1 = new Bank (); 

		Bank1.addAccount(account1);
		Bank1.addAccount(account2);
		Bank1.addAccount(account3);
		Bank1.addAccount(account4);		
		Bank1.addAccount(account11);
		Bank1.addAccount(account12);
		Bank1.addAccount(account13);
		Bank1.addAccount(account14);
		Bank1.addAccount(account21);
		Bank1.addAccount(account22);
		Bank1.addAccount(account23);
		Bank1.addAccount(account24);

		Collections.sort(Bank1.lista);

		System.out.printf("Bank Accounts:" + "%n");
		Iterator<Account> itr = Bank1.lista.iterator();
		while (itr.hasNext()) {
			Account<?>  element = itr.next();
			System.out.printf(element + " " + "%n");
		}
		System.out.println();
	}

	public void addAccount(Account<?> account) {
		lista.add (account);
	};
}

estou ainda é com uns warnings, voce saber como resolve-los? ja googlei mas nao me ajudou muito

Account is a raw type. References to generic type Account should be parameterized

Type safety: Unchecked invocation sort(List) of the generic method sort(List) of type Collections

obrigado

Criado 12 de dezembro de 2010
Ultima resposta 13 de dez. de 2010
Respostas 2
Participantes 2