JAVA simpler programmfehler

Turianus

Lt. Junior Grade
Registriert
Juni 2005
Beiträge
348
Hallo zusammen,

erarbeite mir gerade Java...

Mein Programm gibt eingegebene Werte (String, Int, double) aus...
nun habe ich eine Variable "identnummer", die ursprünglich int war, als String deklariert.
dieser soll nach Eingabe geprüft werden.

mein Problem ist mir wahrscheinlich nicht ganz klar :).
Vllt sieht der Profi unter euch direkt wo meine Fehler liegen.

Ich weiss bis dato nur das Methode length() einem int index die entsprechende länge zuweist.
Diese Zuweisung soll dann auf digitale Werte geprüft werden.
Wahrscheinlich liegt da irgendwo schon ein Verständnisproblem :)

Ergebnis sollte sein, dass das Programm solange die Eingabe/Prüfung wiederholt bis die Variable aus 6 Zahlen besteht.

Wär super, wenn mich da jemand aufklären könnte..
meine Literatur und im Netz sind die mehtoden ziemlich knapp erläutert...
zB wird gesagt, das Methode isdigit() einen char index enthalten muss..
aber trotzdem spuckt der da ständig fehler aus...
daher muss mein Fehler wohl woanders liegen... :D

Hier der Quellcode:


import java.io.*;

public class Messdaten
{
String pruefer;
String messart;
String einheit;
String identnummer;
int datum;
double messwert;



public void gebeDatenEin()
{
BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
try
{
System.out.print("Pruefer :");
this.pruefer=ein.readLine();
System.out.print("Messart :");
this.messart=ein.readLine();
System.out.print("Identnummer :");
this.identnummer=ein.readLine();

for(int i=0;i<=6;i++)
{

String stringlaenge;
char wert;

stringlaenge.length();
stringlaenge.charAt(wert);
wert.isDigit(identnummer);

if(i<=5)
{
System.out.print("Geben Sie bitte eine 6-Stellige Zahl ein!");
}

}


System.out.print("Datum (TTMMJJJJ) :");
this.datum=Integer.valueOf(ein.readLine()).intValue();
System.out.print("Messwert :");
this.messwert=Double.valueOf(ein.readLine()).doubleValue();
System.out.print("Einheit :");
this.einheit=ein.readLine();
}
catch(IOException ioe)
{
System.out.println(ioe.toString());
}
}



den rest lass ich mal weg...
es lief vor der Einbindung mit der Schleife einwandfrei.

Greetz
Thx for answers!
 
AW: JAVA simpler programmfehler - suche hilfe

Um einen zB String zu prüfen (nur Zahlen, 6 Zeichen):

Code:
if (!String.matches("[0-9]{6}")) {
 system.out.print("Ungültige Länge!");
}

Lies dich mal in Regular Expression ein ;)
 
AW: JAVA simpler programmfehler - suche hilfe

Ich hab zwar von Java keinen Plan, aber wenn ich mir das so anschaue:

stringlaenge.length();
stringlaenge.charAt(wert);
wert.isDigit(identnummer);


Dann denk ich mir einfach: du rufst zwar die Funktionen auf, aber du nutzt deren Resultate nicht. Wie gesagt, ich hab von Java keine Ahnung aber ich gehe mal davon aus, das die Length()-Funktion dir die Länge des Strings als Int zurückgibt. Aber du nutzt diesen Rückgabewert nicht. Mit der Ausführung dieser Funktion ist der Wert auch schon wieder im Datennirvana, weil du ihn nicht einer Variable zugewiesen hast. Das gleiche für die CharAt()-Funktion.

IsDigit wird vmtl. einen boolisches Ergebnis haben - auch das verwendest du nicht ;)

Man könnte das so umschreiben: du gehst mit deinem Auto zwar zum TÜV zwecks HU/AU und er hat ihn auch bestanden: aber du lässt dir das nicht eintragen. Ergebnis: alles für die Katz ^^

Um das ganze jetzt wieder Codetechnisch darzulegen:
TÜV(Auto);
...ist sinnlos. TÜV bestanden, aber vergessen das Eintragen zu lassen. Kannst dann morgen gleich nochmal beim TÜV antanzen ;)

Fahrzeugschein = TÜV(Auto);

...so ist brav, jetzt der steht das Ergebnis der TÜV-Untersuchung nämlich im Schein ;)

oder, um von der Abstrakten Welt mal ein wenig herunterzukommen, siehe den Beitrag unter mir ^^
 
Zuletzt bearbeitet:
AW: JAVA simpler programmfehler - suche hilfe

also ich hab nicht 100% verstanden, was die schleife nun genau können soll, aber folgendes:

stringlaenge.lenght(); // die zeile bringt dir nichts. die methode .lenght() gibt nen int wert (natürliche zahl) zurück, der dir aber verloren geht, weil du ihn in keiner variablen abspeicherst.
int bla = stringlaenge.lenght(); //hier wäre bla gleich der länge eines strings

stringlaenge.charAt(wert); //kann nicht funktionieren und bringt dir ähnlich wenig wie die zeile davor. charAt(int index) gibt nen char zurück, der in nem wort an der stelle index steht.
der übergabewert in der mehtode muss also ein int sein, du übergibts ein char.
wert = stringlaenge.charAt(i); //würde in wert also den entsprechenden char an der stelle i speichern, wobei bei 0 angefangen wird zu zählen.

e: zu langsam xD

e2: hast du dir schonmal die java api angeschaut?
http://java.sun.com/j2se/1.5.0/docs/api/
 
Zuletzt bearbeitet:
AW: JAVA simpler programmfehler - suche hilfe

Hallo,

Also die beste Lösung ist sicher die mit den Regular Expressions.
Wenn es die nicht sein sollen, kannst du es ja damit versuchen:

boolean correct = false
while(!correct) {
try {
this.identnummer=ein.readLine();
if(identnummer.length() != 6) {
System.out.println("Eingabe nicht korrekt!");
correct = false;
} else {
int number = Integer.parseInt(this.identnummer);
correct = true;
}
} catch (NumberFormatException e) {
System.out.println("Eingabe nicht korrekt!");
correct = false;
}
 
Zuletzt bearbeitet:
AW: JAVA simpler programmfehler - suche hilfe

Dank euch erstmal !
Danke Tom für den QC aber ich muss den rummel ja verstehen ;) also muss ich es irgendwie selber hinbekommen...
und da nehm ich erstmal vorlieb mit einfachsten befehlen...
das mit dem TÜV hat auf jedenfall geklingelt :D
meine schleife sieht nun etwas akzeptabler aus...

for(int i=0;i<=6;i++)
{

int stringlaenge;
char wert;
boolean pruefen=true;

stringlaenge=identnummer.length();
wert=identnummer.charAt(stringlaenge);
pruefen=wert.isDigit(identnummer);

if(i<=5)
{
System.out.print("Geben Sie bitte eine 6-Stellige Zahl ein!");
}

}


allerdings komm ich jetz mit der Methode isDigit() nicht zurecht...

also Literatur sagt:

Die Methode testet, ob ein Zeichen ein numerischer Wert ist. Das ist in den folgenden Bereichen gegeben.
» Parameter
character - Das zu bestimmende Zeichen.
» Rückgabe
true -Das Zeichen ist ein numerischer Wert.
false -Das Zeichen ist kein numerischer Wert.

irgendwie brauch ich das in TÜV-Sprache @ Andrew ;)
 
Zuletzt bearbeitet:
AW: JAVA simpler programmfehler - suche hilfe

Okay, dann mal wieder in TÜV-Sprache ^^

Polizei kommt zu dir, will wissen ob du noch TÜV hast. Also zeigst du denen den Schein, und die Prüfen darauf, ob da was drinnen steht oder ned.

pruefen=wert.isDigit(identnummer); // dass hattest du ja schon

if (Pruefen == true) { ... } // jetzt wird geprüft

für dich heisst das: wenn Pruefen wahr ist, dann ist das Zeichen eine Zahl. Ansonsten nicht.

Da eine If-Kontrollstruktur sowieso standardmäßig auf "true" prüft, kannst du auch einfach nur schreiben "if (Pruefen) { ... }".

Wenn du wissen willst, ob Pruefen false ist, sagst du entweder "if (Pruefen == false)" oder du schreibst "if (!Pruefen)".

Du könntest auch If-Else nutzen, also nach dem Prinzip "Wenn sie TÜV haben, alles okay, ansonsten gibts Haue".
 
Zuletzt bearbeitet:
AW: JAVA simpler programmfehler - suche hilfe

ok is wiedermal angekommen :)
aber irgendwie macht netbeans mir da noch terz...
QC:
for(int i=0;i<=6;i++)
{

int stringlaenge;
char wert;
boolean pruefen;

stringlaenge=identnummer.length();
wert=identnummer.charAt(stringlaenge);
pruefen=wert.isDigit(identnummer);

if(pruefen==false)
{
System.out.print("Geben Sie bitte eine 6-Stellige Zahl ein!");
}

}


Müsste doch eigentlich jetz laufen oder nicht ?
netbeans behauptet aber:
"char cannot be dereferenced"

hiesse "pruefen" müsste nen char sein ? - wenn ja gehts trotzdem nicht..
 
AW: JAVA simpler programmfehler - suche hilfe

An welcher Stelle bemängelt er das denn? Wie gesagt, ich kann kein Java. Nur Delphi und ein wenig C++ (was hier ja sehr hilfreich ist).

Aber wir werden schon eine Lösung finden, wenn dir die Regular Expressions misfallen ^^


/edit: ah ich glaub ich sehs:

stringlaenge=identnummer.length();
wert=identnummer.charAt(stringlaenge);
pruefen=wert.isDigit(identnummer);

Da glaub ich ist der Fehler. Probiers mal mit einer einfachen 0 als Parameter. Zur Erklärung. Du haust dir in die Variable Stringlaenge die Länge von Identnummer (welches ein String ist) rein. Soweit okay. Nacher gibst du über die CharAt-Funktion das letzte Zeichen des Strings in die Variable Wert. Und nun, das ist eben der Fehler, willst du in Pruefen schreiben, ob das Zeichen in Wert eine Zahl ist, gibst ihn aber als Parameter den String an - und nicht das Zeichen, auf welches er prüfen soll. Da in einem Char in der Regel nur ein Zeichen steht (wäre schlecht wenn es nicht so wäre ^^), kannst du hier einfach eine 0 reinschreiben. Also zumindest gehe ich davon aus, denn wie gesagt... Java hab ich ned drauf ;) Ich geh einfach davon aus, das die Funktionen das alles so machen, wie ich es aus anderen Sprachen gewohnt bin ^^

..diesmal leider ohne TÜV, sorry ... vlt. fällt mir noch was ein ^^

/edit2: okay, vlt. so: du willst mal wieder zum TÜV, und sagst denen du hörst was seltsames beim fahren und glaubst es seien die Räder. TÜV "fragt", welche Räder er denn checken soll. Als auswahl hättest du ja in der Regel 4 Stück (in unserem Fall ists ja glücklicherweise nur eins), sagst dem TÜV-Arbeiter aber, er solle das "Auto" checken. Das war keine Antwort auf seine Frage -> Fehler...

man man man.... komm ich mir dumm vor ^^
 
Zuletzt bearbeitet:
AW: JAVA simpler programmfehler - suche hilfe

ja mit den regular expressions bekomm ich es hin... :)
aber ich will das problem verstehen ;)
netbeans bemängelt eigentlich nur noch die zeile mit der isDigit Methode
mit "char cannot be dereferenced"
 
Zuletzt bearbeitet:
AW: JAVA simpler programmfehler - suche hilfe

Siehe oben, mein Edit ^^
 
AW: JAVA simpler programmfehler - suche hilfe

hehe wiedermal grandios geschrieben :)

stringlaenge=identnummer.length();
wert=identnummer.charAt(stringlaenge);
pruefen=identnummer.isDigit(wert);

dann müsste das ja so sein ?
läuft aber nicht :D
 
AW: JAVA simpler programmfehler - suche hilfe

Nein, nicht ganz. Einfach nur 0.

pruefen=wert.isDigit(0);

So etwa. Zumindest würde ich es so probieren. Denn ich gehe davon aus, dass die Funktion den Index des Zeichens haben will, welches es prüfen soll.

Also:

Zeichen#: 0123456
String--- -: TESTEN!

wert.isDigit(0) würde dann das (erste) T prüfen, ein wert.isDigit(5) das N.


Wenn wir mit den Variablen mal aufräumen und eine kleine Verschachtelung nutzen, könnten wir das auch so ausdrücken:
pruefen=identnummer.isDigit(identnummer.length());
Im Grunde ist das einfach nur der Code dazu, dass immer das letzte Zeichen in identnummer geprüft wird. Sobald ein neues Zeichen an Identnummer angehängt wird und der Code wieder durchläuft, wird auf das neue Zeichen geprüft.

Damit könntest du die folgenden Zeilen (die ja eigentlich nur dem Verständnis dienen), programmtechnisch entfernen:

stringlaenge=identnummer.length();
wert=identnummer.charAt(stringlaenge);
pruefen=wert.isDigit(0);
 
Zuletzt bearbeitet:
AW: JAVA simpler programmfehler - suche hilfe

sry hab ich vergessen... nein das macht der nicht.
glaub das kann auch nicht...
ich hab doch

stringlaenge=identnummer.length();
wert=identnummer.charAt(stringlaenge);
pruefen=identnummer.isDigit(wert);

da hat doch der wert die länge des Strings... also zb 5
und ich will dann bei wert also die 5. stelle prüfen....
irgendwas is hier faul :)
 
AW: JAVA simpler programmfehler - suche hilfe

Ne, die 5 stehen in der Stringlänge. In Wert steht dann das Zeichen (zb. ein A, U, eine 4 oder sonstwas), welches an der jeweiligen Position im String steht. Und Nun prüfst du mit identnummer.isDigit(Wert) ob das Zeichen an der Stelle Wert eine Zahl ist oder nicht. Und was ist denn in dem String "Test" das Zeichen an der Stelle "t"? Das geht nicht, da müsste wieder die Stringlänge rein ( pruefen=identnummer.isDigit(stringlaenge);) - oder du guckst mal, obs mit meiner oben genannten Verschachtelung funzt.
 
AW: JAVA simpler programmfehler - suche hilfe

naja, denke, so geht das mit isDigit() nicht, schließlich wird der übergebene char getestet, ob es sich um ein "digit" handelt. Hier ein Bsp.:

System.out.println( Character.isDigit( '0' ) ); // true
System.out.println( Character.isDigit( '-' ) ); // false
System.out.println( Character.isLetter( 'ß' ) ); // true
System.out.println( Character.isLetter( '0' ) ); // false
System.out.println( Character.isWhitespace( ' ' ) ); // true
System.out.println( Character.isWhitespace( '-' ) ); // false


Es gibt sicher geschicktere Lösungen als eine Schleife, die jedes Zeichen der Eingabe überprüfung, ob es sich dabei um ein digit handelt oder nicht:
Character.isDigit(eingabe.charAt(position))


Aber wäre es in deinem Fall nicht einfacher, mittels Integer.parseInt den Eingabestring in eine Zahl umzuwandeln?
 
AW: JAVA simpler programmfehler - suche hilfe

Okay, dann kann man einen Teil meiner Aussagen "stornieren".

Aber auch mal ein wenig am Rande... im Grunde ist die komplette Programmstruktur ungeeignet, um die gestellte Aufgabe zu erledigen....

oder anders: TÜV abgelaufen ^^
 
AW: JAVA simpler programmfehler - suche hilfe

ah,

pruefen=Character.isDigit(wert);


könnte man noch ausprobieren.^^
 
AW: JAVA simpler programmfehler - suche hilfe

@CoolHandLuke: ich glaub, du musst das erst TÜV-alike formulieren damits hier weiter geht :lol:
 
AW: JAVA simpler programmfehler - suche hilfe

das mit dem Charakter muss ich erstmal "verarbeiten" ;)
 
Zurück
Oben