Neue Klassenmethode implementieren..

wiz

Mitglied
Hallo ich habe da ein Verständnisproblem.

Ich möchte gerne zu dem folgenden Programm, welches die eingegebene Nummer mit Hilfe von 2 Methoden überprüft und bestätigt ob die Nummer gültig ist oder nicht, eine weitere Klassenmethode hinzufügen.

Folgendes soll die Methode machen:

- Den String in einen Integer umwandeln. Dafür würde ich wie zuvor parsen.
- eine kleine Rechnung durchführen, wie in der Methode "checkNummer13", nur soll die Methode dann einen Int zurückliefern, damit ich diesen ausgeben kann.

So sieht das Programm aus, ganz unten befindet sich die 3. Methode, die ich versuche zu implementieren. .

Hoffe jemand kann mir da weiterhelfen.

Java:
import java.util.Scanner;

public class klassenName {
    public static void main(String[] args) {      
        // initialisieren
        Scanner sc = new Scanner(System.in);
        String a;
      
        //Eingabe
        System.out.print("Geben Sie eine Nummer ein: ");
        a = sc.nextLine();
        sc.close();
      
        // Alle Leerzeichen und Bindestriche entfernen
        a = a.replaceAll("( |-)", "");
       
        // Auf die Länge der Nummer überprüfen
        boolean istGueltig;
        if (a.length() == 10) {
            istGueltig = checkNummer10(a);
        } else if (a.length() == 13  &&
                    (a.charAt(0) == '9' &&
                        (a.charAt(1) == '7' &&
                            (a.charAt(2) == '8' || (a.charAt(2) == '9'))))) {
            istGueltig = checkNummer13(a);
        } else {
            istGueltig = false;
        }
      
        // Ausgabe, ob die Nummer richtig oder falsch ist
        if (istGueltig) {
            System.out.println(a + " ist gültig " );
        } else {
            System.out.println(a + " ist nicht gültig ");
        }
    }
   
    private static boolean checkNummer10(String a) {
        int summe = 0;
        String dStr;
        for (int i = 0; i < 10; ++i){
            dStr = a.substring(i, i + 1);
            if (i < 9 || dStr != "X") {
                summe += Integer.parseInt(dStr) * (10-i);
            } else {
                summe += 10;
            }
        }      
        return (summe % 11 == 0);      
    }
  
    private static boolean checkNummer13(String a) {      
        // Erste 12 Ziffern werden abwechselnd mit 1 und 3 multipliziert
        int summe = 0;
        int dVal;
        for (int i = 0; i < 13; i++) {
            dVal = Integer.parseInt(a.substring(i, i+1));
        if (i % 2 == 0) { // Falls eine gerade Zahl rauskommt mit 1 multiplizieren
                summe += dVal * 1;
            } else {
                summe += dVal * 3; // Sonst mit 3 multiplizieren
            }
        }      
        return (summe % 10 == 0);      
    }
  
    private static String checkNummer13(String a){
        int summe = 0;
        int dVal;

        klassenName.a = Integer.parseInt(a.substring(i, i+1));
      
        int summe = 0;
        int dVal;
        for (int i = 0; i < 13; i++) {
            dVal = Integer.parseInt(a.substring(i, i+1));
        if (i % 2 == 0) { // Falls eine gerade Zahl rauskommt mit 1 multiplizieren
                summe += dVal * 1;
            } else {
                summe += dVal * 3; // Sonst mit 3 multiplizieren
            }
        }      
        return (summe);
}
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Problem 1: Laut Rückgabetyp willst du einen String zurückgeben, die Methode gibt aber ein int zurück.
Problem 2: Du hast 2 Methoden mit der gleichen Signatur, der Compiler weiß daher nicht welche der beiden er denn nun aufrufen soll.
Zur Signatur einer Methode gehört der Name sowie die Parameter. Der Rückgabetyp ist nicht teil der Signatur!

Auch sehe ich nicht den Sinn hinter deiner 2.Methode check13. Die Methode schaut genauso aus wie die andere, einzig eine zusätzliche Zeile wurde hinzugefügt.
Vielleicht solltest du genauer beschreiben was die einzelnen Methoden machen sollen und was dein Ziel ist.
 

wiz

Mitglied
Hallo, ja Problem 1 und 2 sind mir bewusst. Ich komme nicht drauf wie ich die umgehen kann.

Die 2. und 3. Methode sind gleich weil die 2. Methode einen Wahrheitswert zurückliefert. Die 3. Methode soll die selbe Rechnung machen aber hier soll das was dort gerechnet wird ausgegeben werden.

Ich hoffe mein Ziel ist klar. Mir fällt jetzt nur ein eine komplett neue Methode zu erstellen, weil ich nicht drauf komme wie ich die 2. Methode überladen kann, wegen dem selben Parameter. Aber in der neuen Methode kann ich nicht auf die String-Variable "a" zugreifen um diese in in int zu verwandeln. Fehler "cannot be resolved or is not a field
 

Joose

Top Contributor
Dann benenne eine der Methoden um! Die Methode sollte schon anhand des Namen beschreiben was sie macht. Bei "checkNummer13" ist es mir klar(er) das ich ein boolean zurück bekomme.
Aber bei "checkNummer13" ist es eigentlich komisch wenn man ein "int" zurück bekommt, vor allem wenn die Methode etwas berechnen sollt. Daher wäre "calculateNummer13" die bessere Wahl.

Und damit du doppelten Code vermeidest sollte "checkNummer13" einfach die "calculateNummer13" aufrufen. ;)
Java:
private static boolean checkNummer13(String a) {
   // Erste 12 Ziffern werden abwechselnd mit 1 und 3 multipliziert
   int summe = calculateNummer13(a);
   return summe % 10 == 0;
}

private static int calculateNummer13(String a) {
   int summe = 0;
   int dVal;
   for (int i = 0; i < 13; i++) {
     dVal = Integer.parseInt(a.substring(i, i+1));
     if (i % 2 == 0) { // Falls eine gerade Zahl rauskommt mit 1 multiplizieren
       summe += dVal * 1;
     } else {
       summe += dVal * 3; // Sonst mit 3 multiplizieren
     }
   }
   return summe;
}

public static void printNummer13(String a) {
   System.out.println("Result Nummer13: " + calculateNummer13);
}

... soll die selbe Rechnung machen ....
Wenn etwas das selbe machen soll zeigt das schon das man doppelten Code erzeugen wird.
Diesen sollte man aber vermeiden und entsprechenden Code in eine eigene Methode auslagern.

... hier soll das was dort gerechnet wird ausgegeben werden.
Eine Methode sollte auch immer nur eine Tätigkeit zuständig sein, entweder berechnen ODER ausgeben.

... weil ich nicht drauf komme wie ich die 2. Methode überladen kann, wegen dem selben Parameter.
Eine Methode kann man auch nur überladen indem man die Parameter ändert ;)

Aber in der neuen Methode kann ich nicht auf die String-Variable "a" zugreifen um diese in in int zu verwandeln. Fehler "cannot be resolved or is not a field
Logisch, die Klasse hat keine statische Variable "a" auf welche du zugreifen könntest.
In der main-Methode hast du eine Variable "a" diese ist aber eben nur lokal in der main-Methode verfügbar, nicht in der ganzen Klasse. (Hierzu ein Link: http://www.java-made-easy.com/variable-scope.html)
 
Zuletzt bearbeitet:

wiz

Mitglied
ok super vielen Dank! Eine Frage noch.

Ich möchte der 3. Methode noch eine while-Schleife hinzufügen. Diese soll die Zahl bis zur nächsten 10er Stelle ausgeben.

Ein Beispiel:
In der 3. Methode kommt am Ende die Zahl 135 raus. Nun soll er mit der while-Schleife herausfinden, wieviel bis zur nächsten 10er Stelle fehlt. In diesem Fall wäre es die 5.

Folgenden Code habe ich probiert, aber leider gibt er nichts aus. Nichtmal den vorgegeben Text:...." ist (nicht) gültig".

PS: + klassenName.calculateNummer13(a)); Habe ich erstmal so gelöst um zu sehen ob alles soweit klappt. Wird dann am Ende schön gemacht.


Java:
import java.util.Scanner;

public class klassenName {
    public static void main(String[] args) {    
        // initialisieren
        Scanner sc = new Scanner(System.in);
        String a;
   
        //Eingabe
        System.out.print("Geben Sie eine Nummer ein: ");
        a = sc.nextLine();
        sc.close();
   
        // Alle Leerzeichen und Bindestriche entfernen
        a = a.replaceAll("( |-)", "");
     
        // Auf die Länge der Nummer überprüfen
        boolean istGueltig;
        if (a.length() == 10) {
            istGueltig = checkNummer10(a);
        } else if (a.length() == 13  || (a.length() == 12 &&
                    (a.charAt(0) == '9' &&
                        (a.charAt(1) == '7' &&
                            (a.charAt(2) == '8' || (a.charAt(2) == '9'))))) {
            istGueltig = checkNummer13(a);
        } else {
            istGueltig = false;
        }
   
        // Ausgabe, ob die Nummer richtig oder falsch ist
        if (istGueltig) {
            System.out.println(a + " ist gültig " + klassenName.calculateNummer13(a)); 
        } else {
            System.out.println(a + " ist nicht gültig " +  klassenName.calculateNummer13(a));
        }
    }
 
    private static boolean checkNummer10(String a) {
        int summe = 0;
        String dStr;
        for (int i = 0; i < 10; ++i){
            dStr = a.substring(i, i + 1);
            if (i < 9 || dStr != "X") {
                summe += Integer.parseInt(dStr) * (10-i);
            } else {
                summe += 10;
            }
        }    
        return (summe % 11 == 0);    
    }
    private static boolean checkNummer13(String a) {    
        // Erste 12 Ziffern werden abwechselnd mit 1 und 3 multipliziert
        int summe = 0;
        int dVal;
        for (int i = 0; i < 13; i++) {
            dVal = Integer.parseInt(a.substring(i, i+1));
        if (i % 2 == 0) { // Falls eine gerade Zahl rauskommt mit 1 multiplizieren
                summe += dVal * 1;
            } else {
                summe += dVal * 3; // Sonst mit 3 multiplizieren
            }
        }    
        return (summe % 10 == 0);    
    }
    private static String checkNummer13(String a){
        int summe = 0;
        int dVal;

        klassenName.a = Integer.parseInt(a.substring(i, i+1));
        int ziffer = 0;
        int summe = 0;
        int dVal;
        for (int i = 0; i < 13; i++) {
            dVal = Integer.parseInt(a.substring(i, i+1));
        if (i % 2 == 0) { // Falls eine gerade Zahl rauskommt mit 1 multiplizieren
                summe += dVal * 1;
            } else {
                summe += dVal * 3; // Sonst mit 3 multiplizieren
            }
        }    
       while( summe % 10!= 0) {
                ziffer++;
           }
           return  ziffer;

public static void printNummer13(String a) {
           System.out.println("Result Nummer13: " + klassenName.calculateNummer13(a));
}



Eine andere Möglichkeit könnte so gehen:
Code:
10 - summe.charAt(2);

Aber das setzt voraus, dass immer nur 3 Stellige Zahlen rauskommen. Gibt es hier so was wie

Code:
10 - summe.charAt(max-1);
Also die letzte Zahl genommen wird
 

Joose

Top Contributor
Ich möchte der 3. Methode noch eine while-Schleife hinzufügen. Diese soll die Zahl bis zur nächsten 10er Stelle ausgeben.

Ein Beispiel:
In der 3. Methode kommt am Ende die Zahl 135 raus. Nun soll er mit der while-Schleife herausfinden, wieviel bis zur nächsten 10er Stelle fehlt. In diesem Fall wäre es die 5.

Folgenden Code habe ich probiert, aber leider gibt er nichts aus. Nichtmal den vorgegeben Text:...." ist (nicht) gültig".

Java:
       while( summe % 10!= 0) {
                ziffer++;
           }
           return  ziffer;

Sicher das du den richtigen Code gepostet hast? Dein Code enthält wieder 2 Methoden mit der gleichen Signatur.

Das Problem das es nicht funktioniert und du auch keine Ausgabe bekommst ist: du hast dir eine klassische Endlosschleife gebaut ;)
Überleg doch mal: Du prüfst ob "summe" durch 10 geteilt einen Rest hast. Wenn das zutrifft dann erhöhst du Ziffer, danach prüfst du wieder dasselbe .... logische Schlussfolgerung?

Tipp: Du musst die Summe von "summe" und ______ überprüfen.


Eine andere Möglichkeit könnte so gehen:
Code:
10 - summe.charAt(2);

Aber das setzt voraus, dass immer nur 3 Stellige Zahlen rauskommen. Gibt es hier so was wie

Code:
10 - summe.charAt(max-1);
Also die letzte Zahl genommen wird
Würde ebenfalls funktionieren, wäre auch logischer, aber vielleicht komplizierter umzusetzen.
Den oberen Ansatz mit der Schleife finde ich in Ordnung.
 

wiz

Mitglied
Hallo, danke für die Hilfe. Hätte drauf kommen können, dass es eine Endlosschleife ist.

Bei der 3. Methode hab ich was falsches kopiert, sorry. Es tut.

Die while schleife habe ich jetzt so gemacht.

Java:
while( summe % 10 != 0) {
                summe = summe +1;
                ziffer = ziffer +1;
           }
           return ziffer ;

Scheint jetzt zu funktionieren.

Danke für deine Hilfe!

Edit: Eine Frage möchte ich noch hinterherwerfen. Dieses Programm ist ja nun nicht wirklich Objektorientiert. Wie sinnvoll ist es jetzt, dies Objektorientiert zu machen, mit Konstruktor und Objekten, mit Access Modifier usw. ?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
A eine neue normale String-Array von einer String-Array, die in for schleife ist, schaffen Java Basics - Anfänger-Themen 3
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
J Neue Werte in ein Array hinzugeben Java Basics - Anfänger-Themen 8
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
B Objekt an neue Stage übergeben? Java Basics - Anfänger-Themen 9
L Neue Klasse für TableView? Java Basics - Anfänger-Themen 17
tsom Erste Schritte itext Text als Block auf neue Seite Java Basics - Anfänger-Themen 0
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
S drawString() neue Zeile Java Basics - Anfänger-Themen 4
H Aus wav-datei lesen und in neue wav-datei speichern Java Basics - Anfänger-Themen 10
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
Hijo2006 Neue externe Klasse einbinden Java Basics - Anfänger-Themen 13
U neue Methoden in JSP??? Java Basics - Anfänger-Themen 1
L0MiN Erste Schritte Neue Punkte zu einer Map hinzufügen und dauerhaft speichern? Java Basics - Anfänger-Themen 4
N wie schreibt man die neue for schleife? Java Basics - Anfänger-Themen 3
D Wie erstelle ich eine neue Hauptklasse mit eclipse? Java Basics - Anfänger-Themen 3
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
B Neue Bibliothek hinzufügen Java Basics - Anfänger-Themen 2
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2
D Neue Array übernimmt Werte des alten nicht Java Basics - Anfänger-Themen 5
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
M Neue Objekte mit Hilfe von String Variable erschaffen Java Basics - Anfänger-Themen 2
I Neue Klassenbibliothek erstellen Java Basics - Anfänger-Themen 8
K Iteration - Alte und neue For Schleife Java Basics - Anfänger-Themen 17
M Klassen Eine Klasse abrufen ohne eine neue Instanze auf zu rufen? Java Basics - Anfänger-Themen 8
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
S neue Methode schreiben Java Basics - Anfänger-Themen 14
E Variable neue Random Zahl zuweisen, wenn Button geklickt Java Basics - Anfänger-Themen 5
J Werte ins neue Fenster übertragen Java Basics - Anfänger-Themen 6
G Ausgabe nach 5 Zeichen in neue Zeile schreiben??? Java Basics - Anfänger-Themen 12
A Werte per Zufall aus einer Datei ziehen und in eine neue Datei schreiben Java Basics - Anfänger-Themen 9
F Variablen Übergabe von eingelesenen Variablen in neue Klasse Java Basics - Anfänger-Themen 15
U neue Java-Datei öffnen Java Basics - Anfänger-Themen 10
S Itext und eine neue Zeile einfügen Java Basics - Anfänger-Themen 2
Corben Input/Output FileOutputStream - neue Zeile mit write(10) Java Basics - Anfänger-Themen 6
K in Konstruktor neue Objekte einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
S Datenströne - Text in eine Datei einlesen, umwandeln und in eine neue Datei schreiben Java Basics - Anfänger-Themen 6
F Neue Klasse mag nicht - nullPointerException Java Basics - Anfänger-Themen 6
L String suchen und ersetzten, ohne neue Datei Java Basics - Anfänger-Themen 4
X FileHandler: neue Datei erzeugen Java Basics - Anfänger-Themen 2
U Java neue Variable für jeden Schleifendurchgang Java Basics - Anfänger-Themen 11
K Neue Menge aus zwei Mengen konstruieren Java Basics - Anfänger-Themen 3
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
Hindi93 Neue Libs - wohin damit? Java Basics - Anfänger-Themen 7
G JUnit ist das neue main() Java Basics - Anfänger-Themen 16
M neue Zufallszahl in Schleife Java Basics - Anfänger-Themen 2
M java neue datei erstellen Java Basics - Anfänger-Themen 6
V Scanner Einlese aus Datei in neue Datei? Java Basics - Anfänger-Themen 8
Haubitze_Broese neue Klasse? Java Basics - Anfänger-Themen 6
F Neue Panelgröße nach Fenster maximieren Java Basics - Anfänger-Themen 5
S FileWriter - in neue Zeile schreiben!? Java Basics - Anfänger-Themen 19
P OOP Automatisch neue Objekte erstellen Java Basics - Anfänger-Themen 14
L Neue Zeile JTable Java Basics - Anfänger-Themen 13
B Eine neue Klasse in anderen Projekten nutzen Java Basics - Anfänger-Themen 5
W neue Variablen in Schleife anlegen Java Basics - Anfänger-Themen 13
S GridBagLayout neue Objekte hinzufügen Java Basics - Anfänger-Themen 3
M Action als neue Klasse Java Basics - Anfänger-Themen 2
B Teile einer Image in neue Image kopieren Java Basics - Anfänger-Themen 4
E Neue zeile in string Java Basics - Anfänger-Themen 3
L Mit Array neue Objekte erzeugen Java Basics - Anfänger-Themen 3
R Zeichnung entfernen und neue Zeichnen lassen Java Basics - Anfänger-Themen 20
R Neue GUI öffnen und die Alte schließen Java Basics - Anfänger-Themen 6
J ArrayList<Point> in eine neue ArrayList<Point> kopieren Java Basics - Anfänger-Themen 8
D Wie neue Instanz einer Klasse erstellen, von der ich nur eine andere Instanz kenne? Java Basics - Anfänger-Themen 13
S Stilfrage: Neue Klasse wenn es in einer Klasse zu viele Methoden gibt? Java Basics - Anfänger-Themen 14
G neue Instanz von ArrayList Java Basics - Anfänger-Themen 5
Zed Übergang von Kalenderwochen ins neue Jahr Java Basics - Anfänger-Themen 19
W JTextfield in neue Zeile einfügen Java Basics - Anfänger-Themen 5
JFeel-x Kann man in Eclipse neue Shortcuts erstellen? Java Basics - Anfänger-Themen 17
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
S Auf neue Dateien überprüfen Java Basics - Anfänger-Themen 2
Q java.util.loggging neue datei erstellen Java Basics - Anfänger-Themen 3
M Neue Pakete implementieren Java Basics - Anfänger-Themen 5
D neue Datei inkl. Ordner erstellen - in einem Rutsch? Java Basics - Anfänger-Themen 7
H ist eine "neue Session" für Mail möglich? Java Basics - Anfänger-Themen 3
G FileWriter -> neue Zeile Java Basics - Anfänger-Themen 13
S PrepareStatement, jede neue Zeile INT-Wert Java Basics - Anfänger-Themen 5
K Eine Neue Methode Schreiben . Java Basics - Anfänger-Themen 15
L ftp öffnen über neue DOS-Box Java Basics - Anfänger-Themen 8
A Neue Objekte zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
M Neue Zeile? Java Basics - Anfänger-Themen 8
M JTable - DefaultTableModel - neue Row per Button-Klick Java Basics - Anfänger-Themen 2
S neue Aufgabe Java Basics - Anfänger-Themen 4
U Werte in neue Klasse speichern Java Basics - Anfänger-Themen 23
M Mit Java eine neue DB anlegen über XAMPP? Ist das möglich ? Java Basics - Anfänger-Themen 4
G Neue Look and Feels Java Basics - Anfänger-Themen 6
K Neue Werte für gleiche Array-Indexe Java Basics - Anfänger-Themen 16
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5
S Datei auslesen und neue schreiben (keine Textdatei) Java Basics - Anfänger-Themen 2
U Neue Zeile im JLabel Java Basics - Anfänger-Themen 4
C Liste von Strings umkehren und als neue Liste zurückgeben? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben