Probleme bei einer Aufgabe

Hallo Leute,
ich habe mich endlich von @httpdigest ermutigen lassen und werde mein Problem schildern. Es geht um eine Aufgabe die so lautet :
1. Schreiben Sie ein Programm in Java mit den folgenden Methoden: (a) Methode, um die Länge der angegebenen IBAN zu überprüfen. (b) Methode, um zu überprüfen, ob die angegebene IBAN mit einem gültigen Ländercode beginnt. (c) Methode, um den Namen des Landes zurückzugeben, zu dem eine gültige IBAN gehört. (d) Methode, zur Validierung einer bestimmten IBAN. (e) Methode, um zu prüfen, ob die angegebene IBAN eine gültige deutsche IBAN ist. 2. Schreiben Sie Testmethoden (mit Java Junit) für jede Methode, die Sie implementiert haben.

Bis jetzt sieht mein Code so aus:

Code:
import java.math.BigInteger;

public class Versuch2IbanValidierung {
    public static void main (String[] args) {
     
    String IBAN ="DE68210501700012345678";
    // ergänze die BLZ
    String bankleitzahl= "21050170";
    String kontonummer= "0012345678";
    String bban=bankleitzahl + kontonummer;
    String ländererkennung="1314";
    String ländererkennungErgänzt="131400";
    double prüfungssumme1;
    double prüfungsummeModulo;
    int prüfung;
    String prüfungssumme = bban + ländererkennungErgänzt;
    // ergibt prüfsumme
    String kartennummer = "";
 
    //??double prüfungssummeModulo = (prüfungssumme1) % 97;
    int prüfungsziffer = 98-97;
     
 
    String prüfeIBAN = bankleitzahl + kontonummer + "131400";
    //String in einze Zahl konvertieren
    BigInteger prüfeIBANsumme;
        prüfeIBANsumme = new BigInteger(prüfeIBAN);
        System.out.println("Summe der Iban lautet: " + prüfeIBAN);
     
     
     
        BigInteger faktor = new BigInteger ("97");
        long  div = prüfeIBANsumme.remainder(faktor).longValue();
        long pZiffer=98-div;
     
        String IBAN1 ="";
        if (pZiffer<10) {
            IBAN = "DE0" +pZiffer+bankleitzahl+kontonummer;
        }else{
        }IBAN1 = "DE" + pZiffer+bankleitzahl+kontonummer;
 
    System.out.println(IBAN1);
    System.out.println(pZiffer);
    System.out.println("Die Prüfungssumme lautet: " + prüfungssumme);

    //System.out.println("Die Prüfziffer lautet " + prüfungsziffer);
    //prüfungsziffer lautet
 
 
    //c)
    System.out.println("IBAN  kommt aus Deutschland:" +IBAN.startsWith("DE"));
    //a)
    System.out.println("Die Länge der IBAN ist: " + IBAN.length());
    //b)
    System.out.print("IBAN beginnt mit einem gültigen Ländercode: " + IBAN.startsWith("DE"));

    }

}
wie man erkennen kann hat ist es total zusammen gewürfelt und hat eigentlich so keinen wirklichen Sinn und vor allem eine Struktur. Mein Problem ist einfach nur gewesen nicht zu wissen wie ich erst vorgehen soll, welche Deklarierungen ich mache.

//c
System.out.println("IBAN kommt aus Deutschland:" +IBAN.startsWith("DE"));
//a)
System.out.println("Die Länge der IBAN ist: " + IBAN.length());
//b)
System.out.print("IBAN beginnt mit einem gültigen Ländercode: " + IBAN.startsWith("DE"));

mit diesen Anweisungen bekomme ich zwar diese Ausgaben :
IBAN kommt aus Deutschland:true
Die Länge der IBAN ist: 22
IBAN beginnt mit einem gültigen Ländercode: true


aber denke trotzdem das da etwas falsch ist. Die Struktur stimmt nicht, die Datentypen machen vielleicht keinen Sinn. Und komme einfach nicht mehr voran. Ich will es lernen wirklich, ich will wissen wie ich vorgehen soll. Was genau ich brauche um diese Methoden zu schreiben. Vielleicht ist da jemand der mir helfen kann.
LG
 
Zuletzt bearbeitet:
Moin,

zuerst mal zwei Anmerkungen vorweg, da es Deinem Prof. (o.ä.) sauer aufstossen könnte:
* es heißt weder "IBAN-Nr" noch "Iban-Nummer" sondern nur IBAN !! Das 'N' steht doch für 'Nummer' ...
* und die IBAN kommt nicht "von Deutschland". Besser "ist aus Deutschland" oder noch besser "ist eine deutsche IBAN"

Dann zeigt zeigst Du zwar die Länge einer IBAN an, prüfst aber nicht, ob sie korrekt ist (DE=22, DK=18, BEL=16 als Beispiel)

Die Ermittlung der Prüfsumme verstehe ich bei Dir gar nicht!
BTW: Die Prüfsumme sind die ersten Ziffern hinter dem Ländercode!!

(e) Methode, um zu prüfen, ob die angegebene IBAN eine gültige deutsche IBAN ist.
hier wäre zu prüfen, ob die IBAN mit 'DE' beginnt und ob sie die korrekte Länge ('22') hat !!

VG Klaus
 
  • Like
Reactions: Bjm
Ich bin auch sehr neu auf dem Gebiet, aber versuch mal Anmerkungen, Methoden, Klassen etc in Englisch zu schreiben. Wenn du dir das angewöhnst wird es später leichter. (Bitte korrigieren, falls ich falschliege).
 
  • Like
Reactions: Bjm
Moin,

zuerst mal zwei Anmerkungen vorweg, da es Deinem Prof. (o.ä.) sauer aufstossen könnte:
* es heißt weder "IBAN-Nr" noch "Iban-Nummer" sondern nur IBAN !! Das 'N' steht doch für 'Nummer' ...
* und die IBAN kommt nicht "von Deutschland". Besser "ist aus Deutschland" oder noch besser "ist eine deutsche IBAN"

Dann zeigt zeigst Du zwar die Länge einer IBAN an, prüfst aber nicht, ob sie korrekt ist (DE=22, DK=18, BEL=16 als Beispiel)

Die Ermittlung der Prüfsumme verstehe ich bei Dir gar nicht!
BTW: Die Prüfsumme sind die ersten Ziffern hinter dem Ländercode!!


hier wäre zu prüfen, ob die IBAN mit 'DE' beginnt und ob sie die korrekte Länge ('22') hat !!

VG Klaus
Und wie kann ich vorgehen? also wie überprüfe ich beides zusammmen also ob die IBAN mit "DE" beginnt und ob sie die korrekte länge hat.. das genau bringt mich ja zur Verzweiflung ich weiß einfach nicht wie ich vorgehen soll
 
Und wie kann ich vorgehen? also wie überprüfe ich beides zusammmen also ob die IBAN mit "DE" beginnt und ob sie die korrekte länge hat.. das genau bringt mich ja zur Verzweiflung ich weiß einfach nicht wie ich vorgehen soll
in deinem Quellcode hast du schon die beiden Prüfungen aufgerufen, under a) und c)

am besten du deklarierst eine eigene Methode, übergibst als Parameter die IBAN, rufst innerhalb der Methode die Prüfungen auf, aber statt sie mit println auszugeben, speicherst du sie als boolean und gibst den Boolean zurück

Code:
public boolean isGermanIBAN(String IBAN){
 boolean isGerman = false;
 //pruefe, als gaebe es keinen Morgen
 
 return isGerman;
}

System.out.println("IBAN ist deutsch: "+ isGermanIBAN(DE2565464646464));
 
  • Like
Reactions: Bjm
Ich bin auch sehr neu auf dem Gebiet, aber versuch mal Anmerkungen, Methoden, Klassen etc in Englisch zu schreiben. Wenn du dir das angewöhnst wird es später leichter. (Bitte korrigieren, falls ich falschliege).
ich korrigiere

Es gibt zwar die Konvention, dass der Quellcode in englisch sein sollte, aber das ist im Endeffekt jedem selber überlassen. Wenn man in einem internationalen Team arbeitet, ist es angebracht.
Ich arbeite viel mit deutschen Fachbegriffen, die ich auf keinen Fall ins englische übersetzen will, da ich dann länger übersetzen würde, als programmieren. Mein Nachfolger würde es bestimmt auch nicht verstehen.
 
Hangel dich doch einfach mal an der Aufgabe entlang. Du sollst ein Programm mit mehreren Methoden schreiben dann schreib auch mehrere Methoden, z.B. für a) die Methode public int getIBANLength(String iban) und für b) public boolean ibanHasValidCountryCode(String iban).
 
  • Like
Reactions: Bjm
und werde mein Problem schildern. Es geht um eine Aufgabe die so lautet :
Na also, geht doch :)

Oft sind die Aufgaben so gestellt, dass Du Dich vom Aufgabentext leiten lassen kannst.

Schreiben Sie ein Programm in Java mit den folgenden Methoden
Relevante Info: Methoden! Du sollst Dein Programm also in Methoden aufteilen.

(a) Methode, um die Länge der angegebenen IBAN zu überprüfen.
Heißt: Du sollst eine Methode schreiben, die eine IBAN (String) als Parameter erhält und zurückgibt, ob die Länge passt oder nicht (= boolean), also
Java:
public boolean istLaengeKorrekt(String iban) {
    // gib true zurück, falls Länge in Ordnung, false sonst.
}
Die Teilaufgaben b), d) und e) sind genauso aufgebaut, daher unterscheiden sich die Methodensignaturen nur im Namen. Teilaufgabe c) soll dagegen einen Namen (=String) zurückgeben.

Es bietet sich gerade am Anfang an, nicht gleich alles auf einmal machen zu wollen. Wenn Du neu in Java bist, verzichte erst einmal darauf und versuche, einfach mal Algorithmen (also ohne Java) zu formulieren. Die Übersetzung nach Java bekommen wir dann auch noch hin ;) Ach ja: Du darfst natürlich die Algorithmen in anderen Algorithmen verwenden.
 
Vielen lieben Dank für deine Antwort und Mühe :)) ich setzte mich nochmal ran und versuche es zu lösen
 
Na also, geht doch :)

Oft sind die Aufgaben so gestellt, dass Du Dich vom Aufgabentext leiten lassen kannst.


Relevante Info: Methoden! Du sollst Dein Programm also in Methoden aufteilen.


Heißt: Du sollst eine Methode schreiben, die eine IBAN (String) als Parameter erhält und zurückgibt, ob die Länge passt oder nicht (= boolean), also
Java:
public boolean istLaengeKorrekt(String iban) {
    // gib true zurück, falls Länge in Ordnung, false sonst.
}
Die Teilaufgaben b), d) und e) sind genauso aufgebaut, daher unterscheiden sich die Methodensignaturen nur im Namen. Teilaufgabe c) soll dagegen einen Namen (=String) zurückgeben.

Es bietet sich gerade am Anfang an, nicht gleich alles auf einmal machen zu wollen. Wenn Du neu in Java bist, verzichte erst einmal darauf und versuche, einfach mal Algorithmen (also ohne Java) zu formulieren. Die Übersetzung nach Java bekommen wir dann auch noch hin ;) Ach ja: Du darfst natürlich die Algorithmen in anderen Algorithmen verwenden.
Hey ich würde dich nochmals kurz was fragen wollen.
Ich habe jetzt soweit so einen Code bekomme aber keine Ausgabe woran liegt das? Außerdem kann ich System.out.println nicht verwenden es wird rot unterstrichen.
public static void main (String[] args) {

}


String iban = "DE123456677";

private boolean isGerman;

private boolean checkLeanderCode;

private boolean istLeangeKorrekt;




public boolean isGerman(String iban) {
boolean isGerman = false;

return isGerman = true;

}



public boolean istLaengeKorrekt(String iban) {

boolean istLaengeKorrekt;
return istLaengeKorrekt = true;


}


Ich muss dazu sagen, dass ich zum ersten mal mit diesen Methoden arbeite und mich garnicht damit auskenne:/
 
Code:
    public static void main (String[] args) {
        
    }
    String iban = "DE123456677";
    private boolean isGerman;
    private boolean checkLeanderCode;
    private boolean istLeangeKorrekt;
    
    public boolean isGerman(String iban) {
     boolean isGerman = false;
        return isGerman = true;
    }


    public boolean istLaengeKorrekt(String iban) {
    
        boolean istLaengeKorrekt;
        return istLaengeKorrekt = true;
    }
 
import java.util.*; vergessen?

PS: Daß du Codetags benutzt ist großartig, noch großartiger wäre es, wenn du die Java-Codetags benutzt. (Warum: siehe Ergebnis, wenn du es benutzt.)
 
  • Like
Reactions: Bjm
OK, zwei grundsätzliche Dinge:

1. der Programmeinstiegspunkt ist immer die main-Methode. Die ist bei Dir leer, d. h. es passiert nichts.
2. Du hast Instanzvariablen eingeführt (iban und alle, die oben mit private beginnen). Wenn Du in den Methoden die Variablen nochmal deklarierst (z. B. nochmal boolean isGerman schreibst), dann überdeckt diese lokale Variable die Instanzvariable. Die lokale Variable wird dann nur innerhalb Deiner Methode verwendet und hat keinen Einfluss auf die gleichlautende Instanzvariable.

Du müsstest erstmal ein Objekt Deiner Klasse erzeugen und dieses Objekt verwenden. Wenn Deine Klasse z. B. IbanTester heißt, dann müsstest Du in main z. B. etwas stehen haben wie
Java:
IbanTester tester = new IbanTester(); // neues IbanTester-Objekt erzeugen
System.out.println(tester.isGerman("DE1234")); // Methode isGerman des Objekts tester mit Parameter DE1234 aufrufen und das Ergebnis ausgeben.
 
  • Like
Reactions: Bjm
Ne ich weiß nicht mehr was ich machen soll, ich verstehe auch nicht ganz was du damit meinst ... Wenn es dir keine Umstände bereitet, könntest du diesen Code korrigieren weil ich es einfach nicht zum laufen bekomme. Ich weiß ich nerve aber ich hab einfach keine anderen der mir sonst helfen könnten:(


Code:
import java.util.*;
public class A1 {
    
    // A) Methode int
    
    public static void main (String[] args) {
        
        String tester = IbanTester;
        // neues IbanTester-Objekt erzeugen
    }
    String iban = "DE123456677";
    //private boolean isGerman;
    private boolean checkLeanderCode;
    //private boolean istLeangeKorrekt;
    
    static String IbanTester;
    public boolean isGerman(String iban) {
     boolean isGerman = false;
        return isGerman = true;
    }


    public boolean istLaengeKorrekt(String iban) {
    
        boolean istLaengeKorrekt;
        return istLaengeKorrekt = true;
    }
    
    
//public boolean ibanHasValidCountryCode(String iban) {
//}

public void checkLaenderCode() {
    this.checkLeanderCode=true;
}

public void getNameLand() {
}




}
 
hast du dich den schon mit den grundlegenden Dingen wie Variablenden- und Methodendeklaration beschäftigt?

Den Quellcode anstarren und rumprobieren bringt dich nicht weiter, wenn du die Grundlagen nicht kennst
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben