Median berechnen, Benutzereingabe Problem!

felix6494

Mitglied
Hi ich habe ein kleines Problem für dass ich bis jz per google noch keine Lösung gefunden habe.

Vorher mal mein code nachher mein Problem/Wunschlösung

Java:
import java.util.*;

public class median {

public	static void main(String[] args) {
	
	
	
		Scanner sc = new Scanner (System.in);
		int eingabe  = sc.nextInt();
		int[] werteingabe = {eingabe};
		
		System.out.println(werteingabe.length);
		System.out.println (Arrays.toString(werteingabe));
		System.out.println("Nun werden wir unseren Array sortieren");
		Arrays.sort(werteingabe);
		System.out.println (Arrays.toString(werteingabe));
		System.out.println("Nun berechnen wir den Median");
		int middle = werteingabe.length/2;  // subscript of middle element
	    
	       System.out.println ((werteingabe[middle-1] + werteingabe[middle]) / 2.0);
	    }
			
			
		}

Wie man seht geht es darum den Median von Zahlen berrechnen zu lassen, aber irgendwie funktioniert das mit der Benutzereingabe nicht so wie ich mir das vorgestellt habe =/. Wie kann ich den Array per Benutzereingabe füllen lassen? denn ansonsten gibt er mir 1 2 3 nur als eine Zahl aus und nicht als 3 wie ich das gerne gehabt hätte.
Ich hoffeihr könnt mir dabei helfen!

mfg felix
 
probiers doch mal mit einer Schleife (einfach so in Browser getippt):

Java:
private static Scanner sc = new Scanner (System.in);
//.....
    int[] werteingabe = new int[readInt("Geben Sie die Anzahl der Zahlen an >")];
    for (int i = 0; i < werteingabe.length; i++) {
        werteingabe[i] = readInt("Geben Sie die " + (i + 1) + "(s)te Zahl ein >");
    }
//.....

private static int readInt(String prompt) {
    System.out.print(prompt);
    return sc.nextInt();
}
 
Ich hätte mir das so vorgestellt das der benutzer in der Kommandozeile irgendwelche werte eintippen kann, das hat ja dann mit einer Schleife nichts zu tun oder?
 
Und die Musterlösung wäre dann noch, dass du eine ArrayList<Integer> benutzt und man unendlich viele Zahlen eingeben kann und jedes mal dahinter den sich ergebenen Median sieht.

Oder man säubert bei jeder neuen Eingabe die Konsole(um alte Ausgaben zu löschen), gibt jede vorher eingegebene Zahl aus und dann sowas wie "Median: 30.543". Wenn du halt die Konsole vorher "sauber" machst, wenn du ne Zahl eintippst, ändert sich nur der Median und es wird nicht "nochmal" geschrieben (eigentlich schon, aber das sieht der User nicht, da er nicht sieht, wie alles gelöscht und neu geschrieben wird 😉

Gruß, Thomas
 
Du kannst es auch genauso lassen, wie du es jetzt hast.
Wenn die Benutzereingabe z.B. "10 15 6 7 99 123" ist, dann kannst du mittels
Java:
String stringZahlen = werteingabe.split(" ");
Ein String array erzeugen.

Java:
		// Mach ein Array aus der Eingabe
		String[] stringZahlen = werteingabe.split(" ");
		// Erstelle ein leeres int array 
		int[] zahlen = new int[stringZahlen.length]; 
		
		// Gehe über jeden String und parse ihn zum int
		for (int index = 0; index < stringZahlen.length; index++ )
		{
		  // Exceptionhandling fehlt hier noch :)
		  zahlen [index] = Integer.parseInt(stringZahlen[index]);
		}
		
		Arrays.sort(zahlen); // Sortiere das Array
		
		// In der Mitte findet sich nun der Median
		// Ich bin mir nicht sicher, wie es bei geraden Anzahlen von Eingabezahlen aussieht.
		// Ist der Median immer die Mitte abgerundet, oder aufgerundet?
		System.out.println("Der Median ist " + zahlen[zahlen.length/2] );
 
Also mal vorne weg ich bin ja wirklich Programmieranfänger und plage mich jz schon circa 1 stunde um da eine funktionistüchtige schleife einzubauen und irgendwie wirft mir eclipse immer wieder fehlereldungen zurück :😡

Java:
	public static void main(String[] args) {

		Scanner sc = new Scanner (System.in);
		String eingabe  = sc.next();
		
		// Eingabe in einen Array speichern
		int[] werteingabe = new int[3];
	   
		for (int i = 0; i < 3; i++) {
	        werteingabe[i] = ?? ("Geben Sie die " + (i + 1) + "(s)te Zahl ein >");
	    }
		}

ich hab jz nochmal neu begonnen und mir sind da ein paar sachen offen. in der for schleife, was muss ich da für = ?? annehmen? Wird das dann mit dieser Schleife überhaupt in den Array so mit ";" einsortiert? es hapert bei mir einfach immer an den gottverdammten schleifen ???:L wut

ich hoffe ihr könnt mir nochmal helfen
 
nur mal schnell geschrieben, ohne auf Schönheit zu achten...
Java:
import java.util.Arrays;
import java.util.Scanner;

public class Median {
	public static int MAXANZAHL = 3;
	public static void main(String[] args) {
		 
        Scanner sc = new Scanner (System.in);
        // Eingabe in einen Array speichern
        int[] werteingabe = new int[MAXANZAHL];
       
        for (int i = 0; i < MAXANZAHL; i++) {
        	System.out.print("Geben Sie die " + (i + 1) + "(s)te Zahl ein >");
        	int eingabe  = sc.nextInt();
            werteingabe[i] = eingabe; 
        }
        System.out.println("Median: " + median(werteingabe));
    }

	private static double median(int[] werteingabe) {
		Arrays.sort(werteingabe); 		
		if (werteingabe.length % 2 == 1){
			return werteingabe[werteingabe.length / 2 ];
		} else {
			return 0.5 * (werteingabe[(werteingabe.length / 2 - 1 )] + werteingabe[(werteingabe.length/2)]); 
		}
	}
}
 
Java:
return 0.5 * (werteingabe[(werteingabe.length / 2 - 1 )] + werteingabe[(werteingabe.length/2)]);
Meh? Ich meinte mich zu erinnern, dass der Median bei einer Liste von geordneten zahlen die Mitte ist, nicht aber das arithmetische Mittel. Demnach wäre diese Zeile kein Median.
 
Die erste Abfrage schaut noch, ob die Länge eine ungerade Zahl ist, wenn ja, nimmt er den mittleren Wert. Was für mich aber grad kein Sinn ergibt.
Der Median von 1, 2, 6, 7, 8 ist doch nicht "6", oder? Er müsste iwo zwischen 6 und 7 liegen. Er berechnet aber auch nicht den Mittelwert hier, was mich verwirrt.
Wüsst mal gerne, wie man überhaupt den Median berechnet, konnte grad nur bei wiki verstehen, was er genau ausdrückt, aber die Formel da verwirren meine vom Tag belastete Denk-CPU 😀

Okay, vll verstehe ich den Median auch nicht richtig. Kann mir einer ein gutes Beispiel dafür nennen, falls das nicht zu viel verlangt ist 🙂

Geht es vll beim Median doch nur darum, dass die Zahlen darunter genauso viele, wie die darüber sind? Dann hätte er nämlich die richtige Rechnung.
 
Zuletzt bearbeitet:
Der Median von 1 , 2 , 3 , 4 , 5 ist 3.
Problem ist, wenn die Anzahl der Zahlen gerade ist. Dann muss man sich entscheiden, wie man den Median definiert.
Entweder floor(anzahl/2) oder ceil(anzahl/2). Java bietet ja automatisch floor an, daher wäre das praktischer.
 
Der Median einer sortierten Stichprobe ist einfach der Wert der in der Mitte steht. Bei ungerader Anzahl an Werten ist es exakt der Wert in der Mitte, bei gerader Anzahl an Werten ist es der Mittelwert der beiden mittleren Werte.

Der Median von 1, 2, 6, 7, 8 ist doch nicht "6", oder?
Doch.
 

Zurück
Oben