Boolean, Girokonto-Programm

Alsou

Aktives Mitglied
Hallo, könnte mir vlt jemand sagen, wieso ich da rückgabetyp boolean (bei methode auszahlen) brauche... ich checkes leider nicht... Wozu brauche return true...Danke
 
Zuletzt bearbeitet von einem Moderator:
Klasse:Konten
if(perKtoNr==giro.getKontonr()){
giro.auszahlen(betrag);
eingabeOK=true;


Klasse:Girokonto
public boolean auszahlen(int betrag){
saldo-=betrag;
return true;
}
 
Hallo, könnte mir vlt jemand sagen, wieso ich da rückgabetyp boolean (bei methode auszahlen) brauche... ich checkes leider nicht... Wozu brauche return true...Danke

Sinnvoll wäre z.B. false zurückzuliefern, wenn mehr ausgezahlt werden soll,
als vorhanden ist. Da aber unabhängig vom Erfolg der Methode immer true
zurückgeliefert wird, hat der return-Wert hier keine Aussagekraft.


VG ROlf
 
Ok, vielen Dank... Diese Methode wird auch nur einmal aufgerufen... verstehe irgendwie nicht, wieso man das überhaupt reingebaut hat... wenn man das gar nicht braucht...^^ man könnte auch stattdessen einfach void nehmen..denke ich..
 
Zuletzt bearbeitet:
da sich die methode auch wie eine void-methode einsetzen lässt, ist es schon sinnvoll so, auch im hinblick auf erweiterbarkeit.
 
Zuletzt bearbeitet:
Ok, vielen Dank... Diese Methode wird auch nur einmal aufgerufen... verstehe irgendwie nicht, wieso man das überhaupt reingebaut hat... wenn man das gar nicht braucht...^^ man könnte auch stattdessen einfach void nehmen..denke ich..

Ich habe nicht geschrieben, dass ein Rückgabewert hier keine Sinn macht,
sondern nur, dass der momentan zurückgegebene noch keine Aussagekraft hat.
Ich halte es schon für sinnvoll zu erfahren, wenn das Konto leer ist. ;-)
 
Ich halte es schon für sinnvoll zu erfahren, wenn das Konto leer ist. ;-)

was du aber nich durch wiederholtes probieren und jeweils unterschiedlichen beträgen mit dieser methode in erfahrung bringen möchtest😀

bsp.:

Java:
int b = Integer.MAX_VALUE;
while (!g.auszahlen(b))
   b--;
System.out.println(b);
 
was du aber nich durch wiederholtes probieren und jeweils unterschiedlichen beträgen mit dieser methode in erfahrung bringen möchtest😀

bsp.:

Java:
int b = Integer.MAX_VALUE;
while (!g.auszahlen(b))
   b--;
System.out.println(b);

Stimmt, dafür würde ich, ähnlich wie bei der Bank meines Vertrauens, einfach die Methode
getKontostand() in Anspruch nehmen, die bis dahin hoffentlich implementiert ist. ;-P
 
Hier kommt ganze Klasse:
Java:
public class Girokonto {
	private int kontonr;
	private int saldo;
	
	public Girokonto(){
		setKontonr(99999);
		setSaldo(0);
	}
	
	public Girokonto(int ktonr, int s){
		setKontonr(ktonr);
		setSaldo(s);
	}
	
	public int getKontonr(){
		return kontonr;
		
	}
	
	
	public boolean setKontonr(int kontonr){
		if(10000<=kontonr & kontonr<=99999){
			this.kontonr=kontonr;
			return true;
		}
		
		else{
			return false;
		}
		
	}
	
	public int getSaldo(){
		return saldo;
	}
	
	public boolean setSaldo(int saldo){
		this.saldo=saldo;
		return true;
	}
	
	public String toString(){
		String erg="Girokonto\n";
		erg+="Kontonummer: " + kontonr + "Saldo : " + saldo;
		
		return erg;
	}
	public boolean auszahlen(int betrag){
		saldo-=betrag;
		return true;
	}
	public void einzahlen(int betrag){
		saldo+=betrag;
	}
	

}

public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		boolean eingabeOK=false;
		int[] vorhandeneKtoNr=new int [2];
		int ktonr=0;
		int s=0;
		System.out.println(" Eingabe eines Girokontos ");
		Girokonto giro= new Girokonto();
		while(!eingabeOK){
			ktonr=IOTools.readInt("Geben Sie die Kontonummer ein (5-stellig): ");
			eingabeOK=giro.setKontonr(ktonr);
		
			
			
		}
		vorhandeneKtoNr[0]=ktonr;
		
		eingabeOK=false;
		
		while(!eingabeOK){
			s=IOTools.readInt(" Geben Sie den Anfangssaldo ein: ");
			eingabeOK=giro.setSaldo(s);
		}
		System.out.println("Eingabe eines Sparkontos ");
		Sparkonto spar=new Sparkonto();
	 eingabeOK=false;
	 while(!eingabeOK){
		 ktonr=IOTools.readInt(" Geben Sie die Kontonummer ein (5-stellig) : ");
		 eingabeOK=spar.setKontonr(ktonr);
		 if(ktonr==vorhandeneKtoNr[0]){
			 System.out.println(" Kontonummer schon vorhanden.");
			 eingabeOK=false;
		 }
	 }
	 
	 vorhandeneKtoNr[1]=ktonr;
	 
	 eingabeOK=false;
	 while(!eingabeOK){
		 s=IOTools.readInt(" Geben Sie den nicht negativen Anfangssaldo ein:");
		 eingabeOK=spar.setSaldo(s);
	 }
	 System.out.println(" Eingabe eines Kreditkartenkontos");
	 Kreditkartenkonto kredit =new Kreditkartenkonto();
	 eingabeOK=false;
	 while(!eingabeOK){
		 ktonr=IOTools.readInt(" Geben Sie die Kontonummer ein (5-stellig) :");
		 eingabeOK=kredit.setKontonr(ktonr);
		 if(ktonr==vorhandeneKtoNr[0]| ktonr==vorhandeneKtoNr[1]){
			 System.out.println(" Kontonummer schon vorhanden.");
			 eingabeOK=false;
		 }
	 }
	 eingabeOK=false;
	 while(!eingabeOK){
		 s=IOTools.readInt(" Geben Sie den Anfangssaldo ein: ");
		 eingabeOK=kredit.setSaldo(s);
	 }
	 
	 eingabeOK=false;
	 while(!eingabeOK){
		 int perKtoNr=IOTools.readInt(" PerKonto-Nummer: ");
		 int anKtoNr=IOTools.readInt(" AnKonto-Nummer: ");
		 int betrag=IOTools.readInt(" Zu überweisender Betrag: ");
		 

		 
		 if(anKtoNr !=giro.getKontonr()& anKtoNr !=spar.getKontonr() & anKtoNr!=kredit.getKontonr() ){
			 System.out.println(" Ankonto -Nummer nicht vorhanden ");
			 continue;
		 }
		 
		 if(perKtoNr==giro.getKontonr()){
			 giro.auszahlen(betrag);
			 eingabeOK=true;
		 }
		 if(perKtoNr==spar.getKontonr()){
			 spar.auszahlen(betrag);
			 if(!eingabeOK){
				 System.out.println("Das Sparkonto gerät ins Minus");
				 continue;
			 }
			 
			 
		 }
		 
		 if(perKtoNr==kredit.getKontonr()){
			 kredit.auszahlen(betrag);
			 eingabeOK=true;
		 }
		 
		 if(anKtoNr==kredit.getKontonr()){
			 kredit.einzahlen(betrag);
			 eingabeOK=true;
		 }
		 if(!eingabeOK){
			 System.out.println(" Ein Konto mit der anKontonummer ist nicht vorhanden ");
			 continue;
		 }
		 
		 
	 }
	 System.out.println(giro);
	 System.out.println(spar);
	 System.out.println(kredit);
	 System.out.println("Programm beendet");

	}

}

Und jetzt ?? Vielen Dank...
 
Zuletzt bearbeitet:
Ok, vielen Dank... Diese Methode wird auch nur einmal aufgerufen... verstehe irgendwie nicht, wieso man das überhaupt reingebaut hat... wenn man das gar nicht braucht...^^ man könnte auch stattdessen einfach void nehmen..denke ich..

Man macht des öfteren Methoden, welche eigentlich nichts ([c]void[/c]) zurückgeben würden, aber man implementiert den Rückgabetypen [c]boolean[/c] und gibt erst Mal immer nur [c]true[/c] zurück. Vielleicht ändert sich die Implementation, der Umfang wird grösser, so dass ein "gelingen" der Methode nicht mehr gegeben ist. Anstatt eine Exception zu werfen, wird dann einfach [c]false[/c] zurückgegeben.
 
Benutze bitte in GROßEM ROTEN TEXT ANGEGEBENEN JAVA-Tags!

Und das hier scheint ein Fehler zu sein:
[c]if(10000<=kontonr & kontonr<=99999){[/c]
 
[c]10000 <= kontonr & kontonr <= 99999[/c] -> [c]10000 >= kontonr && kontonr <= 99999[/c]!?
Lässt niemand mehr seine Programme zum testen laufen :bahnhof: ?
 
[c]10000 <= kontonr & kontonr <= 99999[/c] -> [c]10000 >= kontonr && kontonr <= 99999[/c]!?
Lässt niemand mehr seine Programme zum testen laufen :bahnhof: ?

Kommt im endeffekt aufs selbe raus, nur dass bei der ersten Variante beide Fälle geprüft werden, auch wenn die erste Prüfung schon false ergibt, siehe hier:

Java:
    public static void main ( String [] args ) {
    	boolean b1 = 1000 < getKontoNr(1) && getKontoNr(2) < 10000;
    	boolean b2 = 1000 < getKontoNr(3) & getKontoNr(4) < 10000;
    }
    
    private static int getKontoNr(int val) {
    	System.out.println("called " + val);
    	return 5;
    }
called 1
called 3
called 4
 
Ok, sry 😛

Java:
10000 >= kontonr && kontonr <= 99999
Der Vergleich ergibt true wenn kontonr <= 10000 ist, da war die erste Version schon richtiger 😉

EDIT:
Mit einem klitzekleinen Unterschied... Probier mal kürzere Kontonummern 🙂
Mir gings da nich um irgendwelche Längen von Kontonummern sondern um den Unterschied von
Code:
&
zu
Code:
&&
 
Ok, das verstehe ich jetzt nicht... Ich meine operanden haben da keine Nebeneffekte... In diesem Fall ist es egal, ob man & oder && benutzt.
 
Zuletzt bearbeitet:
Um zum Thema boolean zurückzukommen: natürlich muss man den Saldo überprüfen. Ebenfalls sollte man keine negativen Nummern zulassen. Ich würde sowas machen:
Java:
private int saldo;

public boolean auszahlen(int betrag) {
    if (betrag < 1) {
        throw new IllegalArgumentException("betrag darf nicht < 1 sein");
    }
    if (saldo < betrag) {
        return false;
    }
    saldo -= betrag;
    return true;
}

public void einzahlen(int betrag) {
    if (betrag < 1) {
        throw new IllegalArgumentException("betrag darf nicht < 1 sein");
    }
    saldo += betrag;
}
Wenn man das Konto noch über einen gewissen Betrag überziehen darf, kann man das natürlich auch ganz einfach einbauen:
Java:
// ...

private int erlaubterUeberzug;

public boolean auszahlen(int betrag) {
    if (betrag < 1) {
        throw new IllegalArgumentException("betrag darf nicht < 1 sein");
    }
    if (saldo + erlaubterUeberzug < betrag) {
        return false;
    }
    saldo -= betrag;
    return true;
}
 
Warum sollte das nicht korrekt sein?
Evtl. kann man noch sowas machen wie
Code:
saldo + erlaubterUeberzug <= betrag
damit man auch auf den letzten Cent seines Geldes zugriff hat.
 
Es kann auch sein, dass ich einen Fehler mache.
Code:
saldo + überziehbar < betrag => result
1000  + 200         < 600       false
 
Ja, wenn du 1000 aufm Konto hast, zusätzlich noch 200 überziehen darfst, dann sollte die Bank dir doch erlauben 600 abzuheben oder nicht? 😉
Also muss die if abfrage hier doch false liefern.
 
Evtl. kann man noch sowas machen wie
Code:
saldo + erlaubterUeberzug <= betrag
damit man auch auf den letzten Cent seines Geldes zugriff hat.

Nein, eben nicht 🙂 Dann würde es [c]false[/c] zurückgeben, wenn der [c]betrag[/c] genau so gross wie beide Variablen ist. Also hast du dann genau das Gegenteil erreicht 😀
 

Neue Themen


Zurück
Oben