Zum Inhalt springen

Probleme mit richtiger Rechnung/Schleifendurchlauf?


JustinCredible

Empfohlene Beiträge

Hallo Leute,

ich habe ein Programm geschrieben, dass mir eine beliebige Anzahl von ISBN auf ihre Gültigkeit überprüfen soll. Leider funktionieren ein paar Kleinigkeiten noch nicht so richtig...Und zwar:

1. Bsp:

java IsbnTester 9783486582314 3170192868 9783170192867 9783486582314
Dabei wird nur die erste ISBN für gültig erklärt, der Rest für ungültig! Und das, obwohl ich die erste (gültige) ISBN zum Test noch mal an vierter Stelle habe testen lassen. Wenn man die anderen ISBN einzeln überprüft, berechnet er mir auch, dass sie gültig sind (was auch auf jeden Fall so ist). Kann mir jemand sagen, woran das liegen könnte? 2. Ich wollte noch einbauen, dass eine Fehlermeldung ausgespuckt wird, wenn man in eine ISBN irgendwelche Buchstaben (aus Versehen) eintippt (z.B. 473kjl8n10): siehe die drei auskommentierten if-Bedingungen bei ISBN 13-stellig. Irgendwie funktioniert aber keines der drei so 100%ig...also noch mal: Jede ISBN soll auf [a-zA-Z] überprüft werden und dann soll eine Fehlermeldung ausgespuckt werden. Ich bin für jede Hilfe dankbar! Grüße
public class IsbnTester {


	public static void main(String[] args) {


		int i = args.length;    //Anzahl der eingegebenen ISBN

		int stringstelle = 0;   //Index fuer args

                int[] z = new int[13];  //Array fuer Ziffern 1 bis 10 bzw. 13

                int pruefsumme = 0;//Pruefsumme

		int pruefzahl = 0;  //Pruefzahl

                int einser = 0; //Zahlen, die mit 1 multipliziert werden

                int dreier = 0; //Zahlen, die mit 3 multipliziert werden


		for (int zaehler = 1; zaehler <= i; zaehler++) {


			String isbn = (args[stringstelle]);


                        if (isbn.length() == 10) {


				for (int n = 0; n < 10; n++) {


                                	if (n < 9)

						z[n] = (int)(isbn.charAt(n) - 48);

                                	else {

                                    		if (isbn.endsWith("X") | isbn.charAt(n) == 'x')

                                        		z[n] = 10;

                                    		else

                               	        		z[n] = (int)(isbn.charAt(n) - 48);                                 

                                	}


                                	if (n < 9)

                                    		pruefsumme += (z[n] * (10 - n));


                            	}                          


				if (isbn.charAt(9) == '0')

					pruefzahl = pruefsumme % 11;                           

                        	else

                        		pruefzahl = 11 - (pruefsumme % 11);                                             


                        	if (pruefzahl == z[9])

                                	System.out.println("Die ISBN "+isbn+" ist gueltig!");

                        	else

                                	System.out.println("Die ISBN "+isbn+" ist leider ungueltig!");


                        }


                        else if (isbn.length() == 13 && (isbn.startsWith("978") | isbn.startsWith("979"))) {


                                /*if (isbn.contains(['[a-z]*')) {

                                        System.out.println("Die ISBN "+isbn+" ist leider ungueltig! Bitte nur Ziffern 0-9 verwenden!");

                                        return;

                                }


                                int index = isbn.indexOf('m');


                                if (index != -1) {

                                        System.out.println("Die ISBN "+isbn+" ist leider ungueltig! Bitte nur Ziffern 0-9 verwenden!");

                                        return;

                                }


                                if (isbn.matches("\\p{Alpha}+")) {

                                    System.out.println("Die ISBN "+isbn+" ist leider ungueltig! Bitte nur Ziffern 0-9 verwenden!");

                                    break;

                                }*/


                        	for (int n = 0; n < 13; n++) {


					z[n] = (int)(isbn.charAt(n) - 48);


                                	int feld = n % 2;


                                	if (feld == 0 && n < 12)

                                    		einser += z[n];

                                	else if (feld != 0 && n < 12)

                                    		dreier += (z[n] * 3);


                            	}


                                pruefsumme = dreier + einser;


                                if (isbn.charAt(12) == '0')

                                        pruefzahl = pruefsumme % 10;

                                else

                                        pruefzahl = 10 - (pruefsumme % 10);


                                if (pruefzahl == z[12])

                                        System.out.println("Die ISBN "+isbn+" ist gueltig!");

                                else

                                        System.out.println("Die ISBN "+isbn+" ist leider ungueltig!");


                        }                  


                        else

                        	System.out.println("Ungueltige Eingabe fuer ISBN "+isbn+"! Ueberpruefen Sie:\n"+""+

                                        "1. ISBN 10- oder 13-stellig? \n2. Falls 13-stellig: Ersten drei Ziffern = 978 "+

                                        "oder 979? \n3. Eingabe ohne Bindestriche?");


			++stringstelle;


		}


		if (args.length == 0)

                	System.out.println("Ungueltige Eingabe! Ueberpruefen Sie:\n1. ISBN 10- oder 13-stellig?"+""+

                                "\n2. Falls 13-stellig: Ersten drei Ziffern = 978 oder 979?\n3. Eingabe ohne Bindestriche?");


	}


}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe jetzt nur einmal flüchtig drüber geschaut, aber als erstes fällt mir auf, dass du einige Variablen bei der Prüfung der nächsten ISBN nicht wieder auf ihren Startstand zurück setzt.

Vor allem deine Variablen "einser" und "dreier" rechnen bei der 2. Prüfungen mit den Werten der 1. Prüfung weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Stimmt, das war es...das gleiche galt auch für pruefsumme und -zahl, habe die jetzt einfach in die erste for-Schleife gesetzt.

Vielen Dank! :)

Kann mir jetzt noch einer sagen, wie ich überprüfen kann, ob ein String zB Buchstaben [a-zA-Z] enthält? Bei mir hat es bis jetzt irgendwie nur mit einzelnen Buchstaben geklappt...aber nicht von a-z :?:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...