Forum: PC-Programmierung Java - Größer-als mit merkwürdigem Ergebnis


von Wühlhase (Gast)


Lesenswert?

Folgender Code:
1
if (Data.length > Settingconstants.MAX_DATA_SPI_MSG) {
2
  throw new ProtocolException("Data exceeds sizelimit.");
3
}

Data.length ist ein byte-Array und exakt so lang wie es die Beschränkung 
Settingconstants.MAX_DATA_SPI_MSG noch erlaubt (die Grenze liegt 
übrigens bei 2055). Die Exception dürfte also nicht kommen.

In drei von vier Fällen kommt sie auch nicht-im vierten allerdings 
schon. Und ich verstehe nicht, warum. (Wie gesagt, die 
Vergleichsparameter sind in allen vier Fällen identisch.)

Es handelt sich um mehrere jUnit-Tests, im Wesentlichen alle nur 
voneinander abkopiert. Das Einzige, was sich von Fall zu Fall ändert ist 
eine Enumeration, die die erlaubte Länge des Byte-Arrays nicht 
überschreitet. Der Debugger bestätigt mir bei einem Haltepunkt in der 
if-Abfrage auch daß beide Parameter so sind wie sie sein sollen.

Settingconstants.MAX_DATA_SPI_MSG ist vom Typ short, mit einem Cast nach 
int klappt es allerdings auch nicht.

Hat jemand eine Idee was da schief geht?

von Wühlhase (Gast)


Lesenswert?

Verzeihung, das hier:

Wühlhase schrieb:
> Es handelt sich um mehrere jUnit-Tests, im Wesentlichen alle nur
> voneinander abkopiert. Das Einzige, was sich von Fall zu Fall ändert ist
> eine Enumeration, die die erlaubte Länge des Byte-Arrays nicht
> überschreitet.

sollge eigentlich lauten:

Es handelt sich um mehrere jUnit-Tests, im Wesentlichen alle nur
voneinander abkopiert. Das Einzige, was sich von Fall zu Fall ändert ist
eine Enumeration, die die erlaubte Länge des Byte-Arrays nicht
verändert.

von Oliver S. (oliverso)


Lesenswert?

Fehler in Zeile 42.

Oliver

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Hallo,

Wühlhase schrieb:
> Folgender Code:
>
>
1
> if (Data.length > Settingconstants.MAX_DATA_SPI_MSG) {
2
>   throw new ProtocolException("Data exceeds sizelimit.");
3
> }
4
>
>
> Data.length ist ein byte-Array

das glaube ich nicht.

> In drei von vier Fällen kommt sie auch nicht-im vierten allerdings
> schon. Und ich verstehe nicht, warum. (Wie gesagt, die
> Vergleichsparameter sind in allen vier Fällen identisch.)

warum gibst Du bei der Exception nicht einfach die Werte von Data.length 
und Settingconstants.MAX_DATA_SPI_MSG mit aus? Dann würdest Du vermutl. 
sehen, dass der > Operator einwandfrei funktioniert und du woanders 
einen Fehler hast.

Wäre es C++ würde ich auf einen Schreibzugriff außerhalb der 
array-Grenzen tippen, ob sowas in Java auch geht, weiß ich aber nicht.

vlg
 TImm

von Der Andere (Gast)


Lesenswert?

Timm R. schrieb:
> ob sowas in Java auch geht, weiß ich aber nicht.

Nein er würde eine "Array index out of bounds" Exception erhalten.

Wühlhase schrieb:
> 2055

Seltsame Größe, klingt falsch.
Eher 2048.

Und klingt als würde mal wieder Anzahl-Werte und Offset verwechselt.
Beispiel: 0-2047 sind 2048 Werte.

von Wühlhase (Gast)


Lesenswert?

Danke fürs Kopfzerbrechen-es läuft nun (und es lag natürlich nicht an 
dem Vergleich). Auf den hab ich mich gestürzt weil die Meldung vom 
Debugger darauf schließen ließ.

Es lag an der Methode, die die Enumeration in einen brauchbaren Wert 
übersetzen soll für die ich noch keinen Test geschrieben habe. In dieser 
hab ich schlicht einen Case vergessen...

Mal eine andere Frage: Benutzt irgendwer hier die 
Rubber-Duck-Debugging-Methode?

von yesitsme (Gast)


Lesenswert?

Wühlhase schrieb:
> Mal eine andere Frage: Benutzt irgendwer hier die
> Rubber-Duck-Debugging-Methode?

Sicher... und sei es nur unfreiwillig als Rubber-Duck ;-)

von Oliver S. (oliverso)


Lesenswert?

Wühlhase schrieb:
> Benutzt irgendwer hier die
> Rubber-Duck-Debugging-Methode?

Erfahrungsgemäß sieht man seine eigene Fehler auch bei mehrfachem 
Hinsehen nicht, und die blöde Ente sieht die auch nicht.

Oliver

von Wühlhase (Gast)


Lesenswert?

Nein, man sieht sie nicht.
Aber man bekommt sie oft mit, wenn man sein Problem aus einer anderen 
Perspektive sieht.
Eine solch andere Perspektive nimmt man z.B. zwangsläufig ein, wenn man 
jmd. sein Problem erklärt, dabei ist es völlig wurscht mit wem oder was 
man redet da es auf dessen Rat weniger ankommt. (Dieser Thread hier war 
z.B. ein solcher Fall, was allerdings keineswegs böse gemeint ist.)

Da ich keinen Einzelplatz hab (und ich schätze, das haben die wenigsten 
hier) würde mich mal interessieren wie das andere machen. Schnattert ihr 
eure Kollegen voll oder geht ihr aufs Klo? Ich persönlich find beides 
nicht so richtig optimal.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.