Mittlerste Zahl

vStrelok

Mitglied
Hey Leute,

ich versuche das Programmieren zu erlernen und komme bei dieser Aufgabe nicht weiter:

public static int mittlerste(int a, int b, int c) {
// Liefert die der Groesse nach mittlerste der drei Zahlen a, b und c.
// Sie duerfen davon ausgehen, dass die drei Zahlen unterschiedlich sind.
//
// Beispiel:
// ---------
// a: 1, b: 2, c: 4 -> Rueckgabewert: 2
// a: 4, b: 8, c: -5 -> Rueckgabewert: 4
// a: 7, b: 0, c: 3 -> Rueckgabewert: 3
//
// Tipp:
// -----
// Verwenden Sie verschachtelte Fallunterscheidungen.

int x = 1;
if ( a < b && a > c ) {
x = a; }
else if ( b < a && b > c) {
x = b;
if ( c < b && c > a) {
x = c;
}}




return x; // Bitte ersetzen Sie diese Zeile durch Ihre Loesung.

}

public static void main(String[] args) {

System.out.println(mittlerste(1,2,4));

}
}

Auf der Konsole wird mir 1 angezeigt

Lg
 

kneitzel

Top Contributor
Du prüfst ja auch nicht alle Fälle. Nehmen wir z.B.
a < b && a > c
Das ist nur ein Fall für a als mittlere Zahl:
c<a<b

Was ist aber mit
c>a>b?
Den Fall betrachtest du nicht mit dem Effekt, dass einfach 1 zurück gegeben wird.. das ist Verhalten, das so nicht ok ist! Warum wird x am Anfang direkt auf 1 gesetzt? Das führt zu falschen Ergebnissen, die unverständlich sind.
 

vStrelok

Mitglied
Du prüfst ja auch nicht alle Fälle. Nehmen wir z.B.
a < b && a > c
Das ist nur ein Fall für a als mittlere Zahl:
c<a<b

Was ist aber mit
c>a>b?
Den Fall betrachtest du nicht mit dem Effekt, dass einfach 1 zurück gegeben wird.. das ist Verhalten, das so nicht ok ist! Warum wird x am Anfang direkt auf 1 gesetzt? Das führt zu falschen Ergebnissen, die unverständlich sind.
Wie könnte ich denn die Bedingung c<a<b hinzufügen?
Für int x; folgt die Fehlermeldung: The local variable x may not have been initialized
 

kneitzel

Top Contributor
Wie könnte ich denn die Bedingung c<a<b hinzufügen?
Was für Möglichkeiten siehst Du denn?

Du hast ja schon eine Prüfung von 3 Möglichkeiten. Das könnte man doch genau so erweitern.

Und du könntest das auch rein logisch formulieren - wann wäre denn a das Ergebnis? Wenn Du die Bedingung dafür formulieren kannst, dann kannst Du es mit einem if machen und beide Bedingungen zu prüfen.

Und bezüglich der Vorgabe eines Wertes bei x:
Wenn Du a, b und c hast, dann wird es immer einen Mittleren Wert geben. Wenn Du also geprüft hast: Ist es a? ist es b? Und beides traf nicht zu: Dann musst Du c nicht mehr prüfen, denn wenn a und b es nicht waren, dann war es c.

Das ist also das gleiche Schema wie bei:
Java:
if (bedingung) {
    // mache etwas
} else if (!bedingung) {
    // mache etwas anderes
}
Das letzte if ist Quatsch, denn da kommt er ja nur hin, wenn bedingung falsch war. Daher: Prüfung wegnehmen.

Und habt ihr die Vorgabe, dass es nur am Ende ein Return geben darf? Ich würde da halt in der Regel Code aufbauen ohne lokale Variable um dann Pseudocode zu haben:
if (ist es a?) return a;
if (ist es b?) return b;
return c;

Wenn Ihr die oben genannte Vorgabe habt, dann muss es natürlich mit der lokalen Variable und den ganzen else sein.

Und wo ich gerade so viel schreibe: Denk auch einmal darüber nach, was passiert, wenn zwei Werte gleich sind.
 

EinNickname9

Bekanntes Mitglied
Es gibt da mehrere Wege:
- Sortieren
- if-else
- oder:
Java:
public class Mittlere {
    public static int mittlerste(int a, int b, int c) {
        int d = Math.min(Math.min(Math.max(a, b), Math.max(b, c)), Math.min(Math.max(a, c), Math.max(b, c)));
        return d;
    }

    public static void main(String[] args) {
        System.out.println(mittlerste(1, 2, 4));
        System.out.println(mittlerste(4, 8, -5));
        System.out.println(mittlerste(7, 0, 3));
    }
}
 

mihe7

Top Contributor
Off topic:
// Liefert die der Groesse nach mittlerste der drei Zahlen a, b und c.
// Sie duerfen davon ausgehen, dass die drei Zahlen unterschiedlich sind.
//
War der Fragesteller besoffen, hab ich was verpasst oder seit wann gibt es eine "mittlerste" Zahl? Na gut, mancher Lehrer kennt auch eine größere und eine kleinere Hälfte der Klasse.
 

EinNickname9

Bekanntes Mitglied
@mihe7 hat absolut recht. Es gibt nur die "mittlere" Zahl... Meine IDE hatte das auch erkannt aber ich wollte keine Signaturen verfälschen:
Java:
public class Mittlere {
    public static int mittlere(int a, int b, int c) {
        return Math.min(Math.min(Math.max(a, b), Math.max(b, c)), Math.min(Math.max(a, c), Math.max(b, c)));
    }

    public static void main(String[] args) {
        System.out.println(mittlere(4, 8, -5));
        System.out.println(mittlere(4, -5, 8));
        System.out.println(mittlere(-5, 4, 8));
        System.out.println(mittlere(-5, 8, 4));
        System.out.println(mittlere(8, 4, -5));
        System.out.println(mittlere(8, -5, 4));
    }
}

Edit: Math.max(b, c) kannst du natürlich outlinen.
 

vStrelok

Mitglied
So sieht es nun bei mir aus:

public static int mittlerste(int a, int b, int c) {

int mitte;
if (a > b) {
if (b > c) {
mitte = b;
}
else if (c > a) {
mitte = a;
}
else { mitte = c;
}
}
else {
if (b < c) {
mitte = b;
}
else if(c < a ) {
mitte= a;
}
else {
mitte=c;
}



return mitte;

}}

Leider kriege ich die Fehlermeldung: This method must return a result of type int.
Und habt ihr die Vorgabe, dass es nur am Ende ein Return geben darf?
Ja.
Und wo ich gerade so viel schreibe: Denk auch einmal darüber nach, was passiert, wenn zwei Werte gleich sind.
In der Aufgabenstellung steht, dass die drei Zahlen unterschiedlich sind.

Vielen Dank für die Hilfe!!!
 

mihe7

Top Contributor
Bitte Code-Tags benutzen (im Editor auf </> klicken).

Java:
public static int mittlerste(int a, int b, int c) {

    int mitte;
    if (a > b) {
        if (b > c) {
            mitte = b;
        }
        else if (c > a) {
            mitte = a;
        }
        else {
            mitte = c;
        }
    }
    else {
        if (b < c) {
            mitte = b;
        }
        else if(c < a ) {
            mitte= a;
        }
        else {
            mitte=c;
        }
        return mitte;
    }
}
Dann sieht man auch gleich, dass Dein return innerhalb des else-Zweigs und nicht danach kommt.
 

kneitzel

Top Contributor
Leider kriege ich die Fehlermeldung: This method must return a result of type int.
Ich hoffe, Du siehst den Code in einer IDE vernünftig formatiert. Das return mitte; muss ganz am Ende der Methode sein. Das scheint aber bei Dir nicht der Fall zu sein. Das return mitte; steht innerhalb des else Zweigs.

Der Aufbau ist auch so nicht wirklich verständlich. Du solltest darauf achten, dass Code leserlich ist!
Verständlich wäre z.B. wenn Du erst abprüfst, ob a in der Mitte ist. Was wäre die Bedingung dafür? Kannst Du das verbal ausdrücken?
 

vStrelok

Mitglied
Der Aufbau ist auch so nicht wirklich verständlich. Du solltest darauf achten, dass Code leserlich ist!
Verständlich wäre z.B. wenn Du erst abprüfst, ob a in der Mitte ist. Was wäre die Bedingung dafür? Kannst Du das verbal ausdrücken?
if ( a < b && a > c || c > a && a > b ), d.h: Wenn a kleiner b ist und a größer c, oder wenn c größer a ist und a größer b. Ich finde diese Schreibweise viel besser, jedoch weiß ich nicht was ich falsche mache, wenn ich es mit dieser Schreibweise versuche:

Java:
public static int mittlerste(int a, int b, int c) {
        
        int mitte;
        if ( a < b && a > c || c > a && a > b ) {
        mitte =  a; }
         if ( b < a && b > c || c > b && b > a) {
            mitte = b;
            if ( a < c && c > b || b > c && c> a){
                mitte = c;
            }
         }
        
              
        
        return mitte;
}

Fehlermeldung: The local variable mitte may not have been initialized
 

kneitzel

Top Contributor
Ok, das ist doch ein Anfang. Nun noch den Punkt, dass du es es so schreibst, dass du es mit else Zweigen schreibst und die letzte Option nicht mehr prüfen musst.
 

vStrelok

Mitglied
Nun noch den Punkt, dass du es es so schreibst, dass du es mit else Zweigen schreibst und die letzte Option nicht mehr prüfen musst.
Können Sie mir sagen, was ich falsch mache?
Fehlermeldung: Syntax error on token "else", delete this token


Java:
public static int mittlerste(int a, int b, int c) {
        
        int mitte;
        if ( a < b && a > c || c > a && a > b ) {
        mitte =  a; }
        
        else if ( b < a && b > c || c > b && b > a) {
            mitte = b;
            
            else {
                mitte = c;
            }
        }
        
              
        
        return mitte;
        
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Grösste Zahl in einer Folge herausfinden. (ULAM) Java Basics - Anfänger-Themen 9
Poppigescorn Häufigkeit einer zahl zählen Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
J Verdoppeln einer Zahl (in dem Fall Münzen) Java Basics - Anfänger-Themen 4
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
K Wie kontrolliere ich ob ich die Zahl in meinem Array schon hab? Java Basics - Anfänger-Themen 9
T Zahl in Array ersetzen Java Basics - Anfänger-Themen 2
Abraham42 Prozentsatz einer Zahl mehrmals Java Basics - Anfänger-Themen 2
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
Kingamadeus2000 Anzahl der Ziffern der kürzesten Zahl aus einem zurückliefern Java Basics - Anfänger-Themen 1
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
S Zahl eingeben Java Basics - Anfänger-Themen 8
A Java . punkt neben einer Zahl. Java Basics - Anfänger-Themen 1
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
J Die größte Zahl anzeigen Java Basics - Anfänger-Themen 19
V Array auf eine Zahl durchsuchen Java Basics - Anfänger-Themen 15
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
L Erhöhung der Zahl Java Basics - Anfänger-Themen 3
F Negative Zahl erzwingen Java Basics - Anfänger-Themen 3
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
T Eulersche Zahl e Java Basics - Anfänger-Themen 5
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G Programm schreiben: Zahl (n) eingeben, 1+1/n+2/n+3/n+....+n/n Java Basics - Anfänger-Themen 8
B Eine ganze Zahl zerlegen. Java Basics - Anfänger-Themen 4
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
H Harshad-Zahl (Nivenzahl) und Palindrom überprüfen Java Basics - Anfänger-Themen 2
I Wie viele 1 an Bits hat die Zahl x? Java Basics - Anfänger-Themen 5
A Gewürfelte Zahl ausgeben Java Basics - Anfänger-Themen 10
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
O Markoff-Zahl Java Basics - Anfänger-Themen 22
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
L 10-Stellige Zahl hochzählen lassen Java Basics - Anfänger-Themen 1
H String und Zahl Java Basics - Anfänger-Themen 10
R Zahl 1 bis 100 erraten Java Basics - Anfänger-Themen 12
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
H Würfelspiel, stop bei gleicher Zahl Java Basics - Anfänger-Themen 4
B Array - die Häufigkeit der Zahl zählen Java Basics - Anfänger-Themen 9
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
I Eulersche Zahl Java Basics - Anfänger-Themen 6
F Produkt d. Ziffern einer Zahl..?! Java Basics - Anfänger-Themen 5
J Die Zahl herausfinden die durch 2 - 30 Teilbar ist... Java Basics - Anfänger-Themen 17
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
A Rechnen mit Text und Zahl Java Basics - Anfänger-Themen 4
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
C Erste Ziffer einer Zahl Java Basics - Anfänger-Themen 46
M Zeilenumbruch ab der 10. Zahl Java Basics - Anfänger-Themen 11
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30
R Input/Output zahl aus showInputDialog() Java Basics - Anfänger-Themen 25
D Die Zahl in der Mitte finden Java Basics - Anfänger-Themen 20
S Rekursives Zählen einer Zahl Java Basics - Anfänger-Themen 8
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
K alle Vorkommen einer bestimmten Ziffer in einer Zahl zählen Java Basics - Anfänger-Themen 2
kilopack15 Größte zahl eines Arrays finden Java Basics - Anfänger-Themen 1
P Zahl genauer als 20 nachkommastellen Java Basics - Anfänger-Themen 4
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3
F Erste Schritte Random Zahl auswählen Java Basics - Anfänger-Themen 7
GreenTeaYT Variable speichert nicht die korrekte Zahl ein Java Basics - Anfänger-Themen 12
T Algortihmus: Kürzeste Folge zu einer Zahl Java Basics - Anfänger-Themen 40
Y Zahl im String hochzählen Java Basics - Anfänger-Themen 13
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
K Hochzählen einer "Zahl" Java Basics - Anfänger-Themen 4
S zahl hoch und runter zählen per button Java Basics - Anfänger-Themen 25
L Eine Zahl in Binärdarstellung ausgeben Java Basics - Anfänger-Themen 10
P Methoden Arrays.AsList kleinste Zahl ausgeben Rekursiv Java Basics - Anfänger-Themen 9
T Bitte um Hilfe bei Aufgabe: Long zahl = Long.parseLong(args [0]); Java Basics - Anfänger-Themen 3
K Methoden Approximation der eulerschen Zahl Java Basics - Anfänger-Themen 17
W Wie kann man folgenden Code abändern, dass er den Score mit Zahl anzeigt? Java Basics - Anfänger-Themen 3
E String bestehend aus Ziffern in Zahl verwandeln Java Basics - Anfänger-Themen 3
J Überprüfen ob String eine Zahl ist Java Basics - Anfänger-Themen 2
D Input/Output Buchstaben als bestimmte Zahl erkennen Java Basics - Anfänger-Themen 4
F Zeiteinheit auf ganze Zahl runder runden Java Basics - Anfänger-Themen 4
E Zahl umdrehen? Java Basics - Anfänger-Themen 21
D Java doppelte Zahl/Zeichen in einem String entfernen Java Basics - Anfänger-Themen 6
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Programm zum Einlesen einer Zahl und Ausgabe der Wurzel Java Basics - Anfänger-Themen 13
I kleinste Ziffer einer Zahl ausgeben Java Basics - Anfänger-Themen 3
W String Array in Int umwandeln um auf Zahl zu überprüfen Java Basics - Anfänger-Themen 4
N InsertionSort sortiert erste Zahl im Array nicht mit? Java Basics - Anfänger-Themen 6
S Zahl an bestimmter Stelle splitten Java Basics - Anfänger-Themen 6
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
E Eulersche Zahl berechnen, Endlosschleife Java Basics - Anfänger-Themen 2
B Teile eines Strings in Zahl umwandel und damit weiterrechnen? Java Basics - Anfänger-Themen 3
B Summe aller Zahlen von 1 bis zu dieser Zahl (ohne while oder for schleife) Java Basics - Anfänger-Themen 4
I Höchste Zahl berechnen die eine Eingabe ohne Rest teilt und eine Primzahl ist Java Basics - Anfänger-Themen 2
K Von einem Double wert nur die Zahl vor dem Komma verwenden Java Basics - Anfänger-Themen 9

Ähnliche Java Themen


Oben