PDA

View Full Version : [Frage] Runde 2 -- und ich ver2fel auch


=?!
19-10-2007, 15:22
Schönen Nachmittag zusammen!

Angabe: Entwerfe ein Programm, welches 3 verschiedene Zahlen einliest, und von diesen 3 Zahlen den Median ausgibt.

Ich will diese Aufgabe ohne arrays lösen, weil wir das bis jez noch nicht gemacht haben.

Habs seit gestern auf viele verschiedene Arten probiert, aba ich kriegs einfach nicht auf die Reihe :(

Am einfachsten in meinen Augen wäre

if ((a < b < c) ^ (c < b < a)) {System.out.println("Median = " +b);}
else if ((b < a < c) ^ (c < a < b)) {System.out.println("Median = " +a);}
else if ((a < c < b) ^ (b < c < a)) {System.out.println("Median = " +c);}so etwas in die Richtung, aba so funktionierts mal jedenfalls nicht.

Alle anderen Methoden die ich ausprobiert hab, sind ungleich länger, und es haut einfach nicht so hin, wie es gefragt ist.

Entweder es gibt mir dann alle 3 Zahlen als Median aus oda sonstige Fehler.

Bitte um Hilfe, muss das Programm bis 18:00 abgeben :rolleyes:

max_rayman
19-10-2007, 15:43
^ ist bitweises EXOR.
|| ist logisches OR.

Java Operators (http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html)

Verständlicher und auch wieder verwendbar wäre es wenn du die Zahlen in einen Collection (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collection.html) packst, diese sortierst und dann das mittlere Element ausgibst.
Dann könntst du auch bei einer geraden Anzahl von Zahlen den Median berechnen und bist ausserdem nicht von den Anzahl der Eingaben abhängig.

MyAcc
19-10-2007, 15:45
die abfrage (a < b < c) liefert in java keinen gueltigen wert (der aber von der if-Abfrage verlangt wird): Du musst diese Abfrage "aufteilen": also in:
(a < b) && (b < c)
dieser Ausdruck entspricht der Semantik, wie du es haben wolltest.

max_rayman
19-10-2007, 15:57
die abfrage (a < b < c) liefert in java keinen gueltigen wert (der aber von der if-Abfrage verlangt wird): Du musst diese Abfrage "aufteilen": also in:
(a < b) && (b < c)
dieser Ausdruck entspricht der Semantik, wie du es haben wolltest.

Wusste ich auch nicht :D.

Also so geht:



int a=1;
int b=2;
int c=3;

if (((a<b) && (b<c)) || ((c<b) && (b<a))) {
System.out.println("Median: " + b);
}

kira
19-10-2007, 16:00
Mich wundert eigentlich, dass die (a < b < c) Ausdrücke keinen Syntax-Error oder zumindest ein Warning generiert haben..

max_rayman
19-10-2007, 16:06
Im Eclipse zeigt ers als Fehler ohne Lösung an.

=?!
19-10-2007, 16:07
Danke für eure Antworten, probier mal schnell aus, und poste dann falls es gefutzt hat, oder nicht..

lg, Bertl

=?!
19-10-2007, 16:24
Nochmals DANKE für eure Hilfe, mit dem Aufspalten hat es auf Anhieb funktioniert!!!

Kann jetzt endlich abgeben! War ja mit meinem Ansatz im Prinzip schon fertig (vom Denken her), nur dachte ich, dass es auch (a < b < c) funktioniert, wär ja einfacher!

Schönes Wochenende euch allen, mfg, Bertl :wave:

Neverlasting
20-10-2007, 03:26
Mich wundert eigentlich, dass die (a < b < c) Ausdrücke keinen Syntax-Error oder zumindest ein Warning generiert haben..
Naja, vielleicht wird zuerst a < b ausgewertet, was sagen wir true liefert und dann true < c, wo true möglicherweise zu 1 umgewandelt wird... Bin mir aber nicht sicher ;)