PDA

View Full Version : [FRAGE] - Problem mit Fehlerbehandlung


sheepchen
30-12-2004, 10:52
ich habe ein problem mit der richtigen fehlerbehandlung nach der eingabe von drei zahlen.

bei mir kommt überall die richtige fehlermeldung, bis auf, wenn man 0 eingibt. die eingabe 0 sollte aber eigentlich erlaubt sein. doch da kommt stattdessen immer die fehlermeldung "?" - obwohl ich "if (P[i]<0...)" geschrieben habe.

ich habe schon alles mögliche ausprobiert, damit 0 akzeptiert wird und damit weitergerechnet wird, aber das will einfach nicht funken.

vielleicht hätte da jemand einen vorschlag, was man da machen könnte.

hier ist einmal ein teil meines codes:


try {

for (int i=0; i<P.length; i++) {
P[i] = EprogIO.readInt();

if (P[i]<0 || P[i]>255) {
EprogIO.println("FALSCHE EINGABE");
return;
}
Rp = P[0];
Gp = P[1];
Bp = P[2];
}

} catch (EprogException e) {
EprogIO.println("?"); return;
}

Paulchen
30-12-2004, 11:49
also bei mir funktioniert das wie gewünscht
nur - was bezweckst du eigentlich damit (in jedem durchlauf der for-schleife):

Rp = P[0];
Gp = P[1];
Bp = P[2];

(es würde ja reichen, das einmal nach der schleife zu machen)

Bruno
30-12-2004, 12:24
ich hab mir mal das ganze prog durchgeschaut und es liegt nicht an diesem teil des codes sondern an dem try-catch block im nächsten schritt. ich hab dir eh schon eine pm geschickt.

sheepchen
30-12-2004, 12:24
stimmt, jetzt hab ich entdeckt, dass der fehler nicht in diesem abschnitte ist, sondern in einem anderen :tongue1: .
oh man, da sitzt man sooo lange an einem fehler und dann sucht man noch an der falschen stelle. verrückt. :hewa: :lol:

danke, wegen dem Rp, Gp, Bp - habs jetzt außerhalb der for-schleife stehen :p

sheepchen
30-12-2004, 12:50
danke bruno, hab sie gelesen gehabt und auch alles ausgebessert, was du gemeint hast.
wie schon gesagt, ich habe einfach die ganze zeit den falschen abschnitt angeschaut. :p

ich habe beschlossen, den zweiten try-catch block einfach ganz wegzulassen. den brauche ich ja, meiner meinung ja, grundsätzlich sowieso nicht.
nur dann funktioniert zwar das kompilieren, aber warum regt er sich beim ausführen des programms z.b. bei

R1 = abschnitteRG[k-1];

über das -1 auf. bei +1 sagt er aber nichts.

Paulchen
30-12-2004, 12:58
regt er sich über k-1 auf, oder wenn k=-1 ist, d. h. k-1=-2, denn das wäre mir klar, weil es kein arrayelement mit dem index -2 gibt
was kommt für ein laufzeitfehler?

Bruno
30-12-2004, 13:08
das problem ist, daß wenn einer der eingabewerte 0 ist, das k auch mal null ist. und das prog damit versucht auf die -1te stelle von abschnitteRG zuzugreifen. das löst dann natürlich eine exception aus.

da aber bei 0 eh automatisch auch beim runterskalierte rgb - farbwert der wert 0 ist, würd ich das einfach mit einer if-abfrage vorher lösen, in der du überprüfst ob das k >0 ist, wenn ja dann machst du die berechnung wie oben, und wenn nicht, dann gehst du beim jeweiligen farbwert von 0 aus. daß es nicht kleiner als 0 sein kann hast du ja weiter oben schon überprüft

den exception block solltest du auf keinen fall weglassen - der ist ja nicht das problem. der fehler tritt so oder so auf, der block fängt ihn einfach nur ab.

sheepchen
30-12-2004, 16:26
paulchen: er hat sich bei k-1 aufgerecht. aber das, was bruno sagt, ist ja richtig: 0-1 wäre -1 und das geht natürlich nicht, weil es das nicht gibt. daran habe ich gar nicht gedacht.

bruno: ich habe jetzt alles ein bisschen umgeschrieben und habe mich etwa an das gehalten, was du gemeint hast. ich kanns nicht glauben, es funktioniert tatsächlich. :thumb:

nur habe ich die if-anweisung für jeden einzelnen farbwert schreiben müssen. davor hat es leider noch nicht geklappt gehabt. ich hätte das gerne irgendwie in einem gemacht, aber da alle farbwerte unterschiedlich sind, dürfte das wohl nicht so recht gehen.

duracell
30-12-2004, 16:27
auf welche weise wird k verwendet?

sheepchen
30-12-2004, 17:30
k dient dazu, zu bestimmen, welche "schnittstelle" eines abschnittes gemeint ist.

z.b. abschnitt[0] = 0;
abschnitt[1] = 36;
abschnitt[2] = 73;
usw.

k hat am anfang den wert 0 bekommen und durch meinen code wird k jedes mal erhöht, wenn die eingegebene zahl kleiner ist, als der abschnitt (kann sozusagen als laufvariable gesehen werden). trifft das nicht mehr zu, wird k auch nicht mehr erhöht und die obere grenze wurde damit bestimmt.
danach wird die untere grenze bestimmt und das wäre dann abschnitt[k-1]. doch, wenn man zu beginn 0 eingibt, wäre theoretisch die obere grenze [0] und die untere [-1]. aber das ist ja nicht möglich.
das habe ich nicht beachtet gehabt und daher mein programm noch etwas umschreiben müssen.

duracell
30-12-2004, 19:11
funkts jetzt?

sheepchen
31-12-2004, 00:23
ja, es funkt jetzt. :D