Klasy i polimorfizm

0

Mam do zrobienia następujące zadanie. Zrobiłem wszystko po za metodą aktualizuj()
oraz metodą rekord. Poniżej przesyłam treść zadania i swój kod. Bardzo proszę o prześledzenie kodu i poprawienie ewentualnych błędów

public class Bank {

public static void main(String[] args)
{
    Osoba klient1 = new Osoba("jan"), klient2 = new Osoba("anna");
    Osoba[] klienci = new Osoba[] {klient1, klient2, new Osoba("maria")};
    
    for (Osoba o : klienci)
        System.out.print(o + "  ");
    System.out.println("\n");
    
    Rachunek konto1 = new Rachunek(klient1);
    Rachunek konto2 = new Konto(klient2, 2);    // oprocentowanie: 2%
    Rachunek[] konta = {konto1,
                        konto2,
                        new KontoVIP(klienci[2], 5, -100)};    // oprocentowanie: 5%, limit debetu: -100
    
    konto1.wplata(500);
    konto2.wplata(900);
    konto2.wyplata(300);
    konto1.przelew(konto2, 200);
    
    for (Rachunek k : konta)
        System.out.println(k);
    
    System.out.println();
    
    konta[2].wyplata(101);
    konto2.przelew(konta[2], 801);
    
    System.out.println();
    
    konto2.przelew(konta[2], 700);
    
    konta[2].przelew(konto1, 801);
    System.out.println();
    
    konta[2].przelew(konto1, 800);
     
    for (Rachunek k : konta)
        System.out.println(k);
    
    System.out.println();
    
    for (Rachunek k : konta)
        k.aktualizuj();

    System.out.println();
    
            // własna metoda rekord(...) z klasy Bank do napisania!
    System.out.println("Konto z największym stanem - " + rekord(konta));
}

}

wyprowadził na konsolę poniższe wyniki:

jan anna maria

Konto nr 1: jan, stan 300.0
Konto nr 2: anna, stan 800.0, oprocentowanie 2.0
Konto nr 3: maria, stan 0.0, oprocentowanie 5.0, limit debetu -100.0

Konto nr 3: maria, stan 0.0, oprocentowanie 5.0, limit debetu -100.0 - nie dozwolona operacja: wypłata!
Konto nr 2: anna, stan 800.0, oprocentowanie 2.0 - nie dozwolona operacja: przelew!

Konto nr 3: maria, stan 700.0, oprocentowanie 5.0, limit debetu -100.0 - nie dozwolona operacja: przelew!

Konto nr 1: jan, stan 1100.0
Konto nr 2: anna, stan 100.0, oprocentowanie 2.0
Konto nr 3: maria, stan -100.0, oprocentowanie 5.0, limit debetu -100.0

Konto nr 1: jan, stan 1100.0
Konto nr 2: anna, stan 102.0
Konto nr 3: maria, stan -100.0 - ilość prób przekroczenia debetu 2!

Konto z największym stanem - Konto nr 1: jan, stan 1100.0

Test

public class Zadanie3 {
	

		 
	    public static void main(String[] args)
	    {
	        Osoba klient1 = new Osoba("jan"), klient2 = new Osoba("anna");
	        Osoba[] klienci = new Osoba[] {klient1, klient2, new Osoba("maria")};
	        
	        for (Osoba o : klienci)
	            System.out.print(o + "  ");
	        System.out.println("\n");
	        
	        Rachunek konto1 = new Rachunek(klient1);
	        Rachunek konto2 = new Konto(klient2, 2);    // oprocentowanie: 2%
	        Rachunek[] konta = {konto1,
	                            konto2,
	                            new KontoVIP(klienci[2], 5, -100)};    // oprocentowanie: 5%, limit debetu: -100
	        
	        konto1.wplata(500);
	        konto2.wplata(900);
	        konto2.wyplata(300);
	        konto1.przelew(konto2, 200);
	        
	        for (Rachunek k : konta)
	            System.out.println(k);
	        
	        System.out.println();
	        
	        konta[2].wyplata(101);
	        konto2.przelew(konta[2], 801);
	        
	        System.out.println();
	        
	        konto2.przelew(konta[2], 700);
	        
	        konta[2].przelew(konto1, 801);
	        System.out.println();
	        
	        konta[2].przelew(konto1, 800);
	         
	        for (Rachunek k : konta)
	            System.out.println(k);
	    
	       
	        
	        System.out.println();
        
        for (Rachunek k : konta)
            k.aktualizuj();
   
        System.out.println();
	   
	        
	        
	                // własna metoda rekord(...) z klasy Bank do napisania!
	       // System.out.println("Konto z największym stanem - " + rekord(konta));
	    
	    
	    }
	}


 

Klasa osoba

public class Osoba {

	protected String imie;
	public Osoba(String imie) {
		this.imie = imie;
	}
	public Osoba(){
		
	}
	@Override
	public String toString() {
		return imie;
	}
	

}

Klasa rachunek

public class Rachunek {
	protected Osoba wlasciciel;
	protected int stan;
	static int numerek;
	public int num;
	
	public Rachunek(Osoba klient) {
		wlasciciel = klient;
		stan=0;
		num=++numerek;
	}
	
	public void wplata(int i) {
		this.stan +=i;
		
		
	}
	public void wyplata(int i) {
		if(stan<i)
			System.out.println(toString()+ " - nie dozwolona operacja: wypłata!");
		else
		stan -=i;
		
	}
	
	
	
	@Override
	public String toString() {
		return "Konto numer: " + num+ " " + wlasciciel + " stan = "  +stan;
	}

	public void przelew(Rachunek konto2, int ile) {
		if(stan<ile)
			System.out.println(toString()+ " - nie dozwolona operacja: przelew!");
		else
		{
		konto2.stan += ile;
		stan -= ile;
		}
		
	}

	
	
}

Klasa konto

public class Konto extends Rachunek {
	protected double procent;
	static int numer;
	public int nr;

	public Konto(Osoba klient) {
		super(klient);
		nr = ++numer;	
			
	}

	public Konto(Osoba klient2, int i) {
		super(klient2);
		procent = i;
		nr = ++numer;
	}
	public void getNumber(){
		System.out.print(nr);
	}

	@Override
	public String toString() {
		return "Konto numer: "+ super.num + " " + super.wlasciciel + " stan = "  +stan + " Oprocentowanie " + procent;
	}
	@Override
	public void aktualizuj()
	{
		super.stan *= procent;
		
	}

}

Klasa konto VIP

public class KontoVIP extends Konto {

	private int debet;
	public KontoVIP(Osoba osoba, int i, int j) {
		super(osoba);
		super.procent = i;
		debet = j;
		super.nr = ++super.numer;
		
	}
	@Override
	public String toString() {
		return "Konto numer: "+ super.num + " " + super.wlasciciel 
				+ " stan = "  +stan + " Oprocentowanie " + procent + " limit debetu "
				+ debet;
	}
	@Override
	public void wyplata(int i) {
		if((stan-debet)<i)
			System.out.println(toString()+ " - nie dozwolona operacja: wypłata!");
		else
		stan -=i;
	}
	@Override
	public void przelew(Rachunek konto2, int ile) {
		if((stan-debet)<ile)
			System.out.println(toString()+ " - nie dozwolona operacja: przelew!");
		else
		{
		konto2.stan += ile;
		stan -= ile;
		}
	}
	@Override
	public void aktualizuj()
	{
		super.stan *= super.procent;
	}
	

}
0

Ale jakie jest pytanie?

0

Nie potrafię stworzyć metody aktualizuj() która nalicza odsetki na koncie. Zrobiłem tak
public void aktualizuj() {
stan = (stan * ((procent / 100)+1));

	} 

Ale to wcale nie zmienia stanu konta. Nie wiem gdzie może być błąd.

0

A jaki jest naprawdę kod? Tego, który zamieściłeś na forum nie można skompilować.

0

stan powinien być typu float lub double ( wynik przecież nie będzie z przecinkiem)

twoja metoda powinna wyglądać tak

public void aktualizuj() {
                        stan = (stan * ((float)procent /100+1));
                        
                } 

Jestem początkujący ale myślę, że mam racje...

1 użytkowników online, w tym zalogowanych: 0, gości: 1