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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wühlhase (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Folgender Code:
if (Data.length > Settingconstants.MAX_DATA_SPI_MSG) {
  throw new ProtocolException("Data exceeds sizelimit.");
}

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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht lesenswert
Fehler in Zeile 42.

Oliver

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


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Wühlhase schrieb:
> Folgender Code:
>
>
> if (Data.length > Settingconstants.MAX_DATA_SPI_MSG) {
>   throw new ProtocolException("Data exceeds sizelimit.");
> }
> 
>
> 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)


Bewertung
-3 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.