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
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 halte es schon für sinnvoll zu erfahren, wenn das Konto leer ist. ;-)
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);
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");
}
}
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..
[c]10000 <= kontonr & kontonr <= 99999[/c] -> [c]10000 >= kontonr && kontonr <= 99999[/c]!?
Lässt niemand mehr seine Programme zum testen laufen :bahnhof: ?
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
Das ist mir auch bewusst Es geht auch nicht hauptsächlich um die [c]&[/c] sondern um das [c]<=[/c] -> [c]>=[/c] - vergleich den Code nochmals :bae:Kommt im endeffekt aufs selbe raus, nur dass bei der ersten Variante beide Fälle geprüft werden [...]
Mit einem klitzekleinen Unterschied... Probier mal kürzere KontonummernKommt im endeffekt aufs selbe raus, [...]
10000 >= kontonr && kontonr <= 99999
Mir gings da nich um irgendwelche Längen von Kontonummern sondern um den Unterschied vonMit einem klitzekleinen Unterschied... Probier mal kürzere Kontonummern
&
&&
In Deinem Code ist ein Fehler. Da ist ein Operant falsch herum. In Deinem Code sind auch kürzere Kontonummern zulässig. (Weil auf kleiner gleich 10000 geprüft wird, es müsste größer gleich sein)Ok, das verstehe ich jetzt nicht... Ich meine operanden haben da keine Nebeneffekte...
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;
}
// ...
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;
}
Java:if (saldo + erlaubterUeberzug < betrag) { return false; }
saldo + erlaubterUeberzug <= betrag
Evtl. kann man noch sowas machen wiedamit man auch auf den letzten Cent seines Geldes zugriff hat.Code:saldo + erlaubterUeberzug <= betrag
Auch über das doppelte False gestolpert...Oh man, ich sollte mich echt nochmal hinlegen
Hast natürlich recht.
In Deinem Code ist ein Fehler. Da ist ein Operant falsch herum. In Deinem Code sind auch kürzere Kontonummern zulässig. (Weil auf kleiner gleich 10000 geprüft wird, es müsste größer gleich sein)
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