EAN-13-Prüfziffer: Vermeiden von Eingaben mit mehr/weniger als 12 Ziffern

Haave

Top Contributor
Hallo,

ich bin ein blutiger Anfänger in Java, habe meine ersten Erfahrungen mit dem Java-Hamster-Modell gesammelt und möchte mich jetzt verstärkt an "echtem" Java versuchen.

Heute habe ich ein kleines Programm geschrieben, das bei einer EAN-13 die Prüfziffer berechnet (untenstehend der Code, kompilier- und ausführbar). Das Programm liefert das richtige Ergebnis, wenn - wie vorgesehen - eine 12-stellige Zahl eingegeben wird (wahrscheinlich kein besonders schöner Stil, das mit einem long zu machen, aber ich wusste mir nicht anders zu helfen :oops: ). Es berechnet jedoch auch einen Wert, wenn eine Zahl eingegeben wird, die kürzer oder länger als 12 Zeichen ist; eine solche Eingabe würde ich gern verhindern und eine entsprechende Meldung ausgeben lassen ("Die eingegebene Nummer ist zu kurz/lang. Bitte geben Sie eine 12-stellige Zahl ein" etc.), aber ich weiß nicht, wie man das umsetzen würde. Mir geistert etwas mit Exceptions im Kopf herum, aber vielleicht bin ich da auch völlig auf dem Holzweg…
Kann mir jemand helfen?


Java:
import java.util.Scanner;

public class EANPruefziffer {

	static long[] ziffern = new long[12];
	
	public static void main(String[] args) {
		System.out.println("Bitte geben Sie die Artikelnummer ein (in der Form 123456789012).");
		System.out.println("Die Artikelnummer besteht aus den ersten 12 Stellen des EAN-Codes ohne die Pruefziffer.");
		einlesen();
		int ergebnis = rechnung();
		ergebnis = ergebnis % 10;
		ergebnis = 10 - ergebnis;
		if(ergebnis == 10) {
			System.out.println("Die Pruefziffer fuer die eingegebene Artikelnummer lautet 0.");
		} else System.out.println("Die Pruefziffer fuer die eingegebene Artikelnummer lautet " + ergebnis + ".");
	}
	
	public static void einlesen() {
		//die Ziffern werden in umgekehrter Reihenfolge in das Array eingelesen
		Scanner s = new Scanner(System.in);
		long speicher = 0;
		speicher = s.nextLong();
		for(int i = 0; i < ziffern.length; i++) {
			ziffern[i] = speicher % 10;
			speicher /= 10;
		}
	}
	
	public static int rechnung() {
		for(int j = 0; j < ziffern.length; j += 2) {
			ziffern[j] = ziffern[j] * 3;
		}

//		Wird nicht benoetigt, steht nur der Vollstaendigkeit halber drin
//		for(int k = 1; k < ziffern.length; k += 2) {
//			ziffern[k] = ziffern[k] * 1;
//		}

		int summe = 0;
		for(int l = 0; l < ziffern.length; l++) {
			summe = summe + (int)ziffern[l];
		}
		return summe;
	}
}
 

MarderFahrer

Gesperrter Benutzer
Bevor du in Zeile 24 dein Array mit den eingegebenen Ziffern füllst, könntest du die Länge des eingegebenen Wertes prüfen. z.B könntest du den Long Wert in eine teporäre String Variable packen. Aus dieser String Variable dann mit ".length()" die Länge ermitteln.
Dann bräuchtest du nur noch eine Ausgabe machen, die entsprechend der Länge ausfallen.
<12 "Eingabe zu kurz"
>12 "Eingabe zu lang"
=12 -> Weiter im Programmablauf
 

Haave

Top Contributor
Ich habe es mal mit der von MarderFahrer vorgeschlagenen Lösung versucht (mit dem InputVerifier komme ich zugegebenermaßen nicht ganz zurecht ._.). Die Prozedur einlesen() sieht nun wie folgt aus:

Java:
	public static void einlesen() {
		//die Ziffern werden in umgekehrter Reihenfolge in das Array eingelesen
		Scanner s = new Scanner(System.in);
		long speicher = 0;
		speicher = s.nextLong();
		
		String pruefstring = new String();
		pruefstring = "" + speicher;
		if(pruefstring.length() == 12) {
			for(int i = 0; i < ziffern.length; i++) {
				ziffern[i] = speicher % 10;
				speicher /= 10;
			}
		} else {
			System.out.println("Die eingegebene Nummer hat nicht die richtige Laenge.");
			System.out.println("Bitte ueberpruefen Sie Ihre Eingabe und versuchen Sie es noch einmal.");
			einlesen();
		}
	}

Für Zahlen kleiner als 12 Stellen sowie zwischen 13 Stellen und der größtmöglichen Long-Zahl geht es nun (und im Normalgebrauch ist wohl eher nicht davon auszugehen, dass eine Zahl wie "999999999999999999999999" eingegeben wird; es geht ja eher darum, Tippfehler abzufangen). Ich kann mich ja nochmal dransetzen und schauen, wie das mit dem InputVerifier geht (und ob man ihn auch bei Nicht-GUI-Programmen benutzen kann), aber vorerst sollte die Frage geklärt sein :)

Vielen Dank für eure Hilfestellung!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
sserio Prüfziffer einer ISBN Nummer herrausfinden. Java Basics - Anfänger-Themen 14
A OOP ISBN-Prüfziffer Java Basics - Anfänger-Themen 7
F ISBN Prüfziffer Java Basics - Anfänger-Themen 2
F ISBN Prüfziffer berechnen Java Basics - Anfänger-Themen 17
D Prüfziffer Java Basics - Anfänger-Themen 27
L Redundanz mit Array vermeiden. Java Basics - Anfänger-Themen 42
A Wiederholte Ausgabe vermeiden Java Basics - Anfänger-Themen 16
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
I Input/Output 3 Werte in Datei schreiben, duplikate vermeiden Java Basics - Anfänger-Themen 4
T doppelten Code vermeiden Java Basics - Anfänger-Themen 1
S Variablen viele Instanzvariablen vermeiden Java Basics - Anfänger-Themen 14
D Wie "unchecked cast" hier vermeiden? Java Basics - Anfänger-Themen 2
D Bei eingeben von Zahlen den Zeilensprung vermeiden Java Basics - Anfänger-Themen 3
C Arrays vermeiden?? Java Basics - Anfänger-Themen 13
M Cast vermeiden Java Basics - Anfänger-Themen 11
B Wie Code-Redundanz vermeiden? Java Basics - Anfänger-Themen 2
A "Schmutziges Programmieren" vermeiden Java Basics - Anfänger-Themen 10
P Zeilnumbruch vermeiden bei einer Tabelle *hilfe* Java Basics - Anfänger-Themen 11
P Codeverdoppelung vermeiden Java Basics - Anfänger-Themen 3
E Vermeiden,dass mehrere Instanzen eines Java-Programms laufen Java Basics - Anfänger-Themen 2
E Rekursion vermeiden Java Basics - Anfänger-Themen 9
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
S Überladen von Funktionen vermeiden Java Basics - Anfänger-Themen 5
G Wie doppelte Einträge in ComboBox vermeiden ? Java Basics - Anfänger-Themen 9
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
ralli85 Programm nach einer gewissen Anzahl von Eingaben beenden Java Basics - Anfänger-Themen 15
A Ungültige Eingaben: Fehler ausgeben Java Basics - Anfänger-Themen 16
A Fehler bei der Speicherung von JOptionPane-Eingaben Java Basics - Anfänger-Themen 4
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
F Erste Schritte Mehrere nextInt() Eingaben nebeneinander ausgeben Java Basics - Anfänger-Themen 12
K Eingaben in Array ausgeben Java Basics - Anfänger-Themen 3
R Scanner-Eingaben addieren Java Basics - Anfänger-Themen 5
H Best Practice Alternative Möglichkeit, um Eingaben vorzunehmen Java Basics - Anfänger-Themen 13
R struktogramm eingaben Java Basics - Anfänger-Themen 4
D Summe von Eingaben in einer for Schleife Java Basics - Anfänger-Themen 4
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
H Input/Output Console löschen und Eingaben in Echtzeit Java Basics - Anfänger-Themen 3
M Erste Schritte Eingaben in ein Array packen Java Basics - Anfänger-Themen 5
M Maskierte Eingaben in der Konsole? Java Basics - Anfänger-Themen 3
T Input/Output Scanner Eingaben auf Console farbig darstellen, wie? Java Basics - Anfänger-Themen 13
H JTable: Eingaben mit ENTER übernehmen Java Basics - Anfänger-Themen 2
B Eingaben verwerten Java Basics - Anfänger-Themen 7
S Eingaben über die Konsole Java Basics - Anfänger-Themen 2
Obit Eingaben aus GUI auslesen Java Basics - Anfänger-Themen 10
J Regelmäßige Eingaben: Unresolved compilation problem? Java Basics - Anfänger-Themen 7
M Scanner String Eingaben ignorieren Java Basics - Anfänger-Themen 4
Antoras Durchschnitt ist nicht korrekt; Eingaben löschen Java Basics - Anfänger-Themen 7
A JTable nimmt eingaben von tastatur nicht an? Java Basics - Anfänger-Themen 2
D Klasse zum Auslesen von Eingaben Java Basics - Anfänger-Themen 2
L Gelöst: Negative Eingaben sollen verweigert werden Java Basics - Anfänger-Themen 3
M Dynamische Wertsetzung von Variablen durch Eingaben Java Basics - Anfänger-Themen 9
R Eingaben Java Basics - Anfänger-Themen 5
M Verdeckung von Eingaben Java Basics - Anfänger-Themen 3
A Was erzeugen diese Eingaben? Java Basics - Anfänger-Themen 2
G Webapplikation mit JSP und Beans - Eingaben sichern, wie? Java Basics - Anfänger-Themen 11
M Überprüfen ob die eingaben in einem JTextField eine Zahl ist Java Basics - Anfänger-Themen 5
D Nochmal zu den dummen Eingaben über Tastatur Java Basics - Anfänger-Themen 15
P Boolean Eingaben Java Basics - Anfänger-Themen 6
G Probleme mit Eingaben Java Basics - Anfänger-Themen 10
T Kann man in einer Anwendung Eingaben simulieren? Java Basics - Anfänger-Themen 8
B Probleme mit Eingaben [System.in.read())] Java Basics - Anfänger-Themen 10
A Innerhalb eines ActionEvents Eingaben tätigen Java Basics - Anfänger-Themen 23
O Überprüfung von Eingaben auf Sinnhaftigkeit Java Basics - Anfänger-Themen 7
B Tastatur eingaben abfragen und dann in Argumente zerlegen..? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben