Zahl zufällig verteilen

Status
Nicht offen für weitere Antworten.
E

egat

Gast
Hallo zusammen,

wie kann ich in Java eine Zahl z.B. 100.000 zufällig in 4 verschieden große Teile teilen?

Vielen Dank.

Mfg egat
 
S

SlaterB

Gast
wie zufällig muss es denn sein?

wenn du erst einen Random-Wert von 1-99.997 abziehst
und danach noch 3x mit dem Rest,
dann hast du vier Zahlen, im Mittel wird eine Zahl bei 50.000 liegen, + 25.000+ 2x 12.500

oder willst du lieber im mittleren Durchschnitt 4x 25.000 erhalten?

eine einfache Möglichkeit dafür: die erste Zufallszahl auf 50.000 begrenzen, die danach auch maximal 50.000,
wenn die ersten drei zusammen kleiner als 50.000 sind, dann musst du von vorne anfangen,
Nachteil oder vielleicht auch Vorteil: keine einzelnen Zahlen > 50.000 dabei
 

Marco13

Top Contributor
3xMath.random() aufrufen, damit hat man das Intervall zwischen 0 und 1 in 4 Teile geteilt. Das kann man auf 1...100000 abbilden.
 
S

SlaterB

Gast
das mit random() 0-1 gefällt mir auch besser,
aber 4x ;) ,

und deren Summe dann auf 100.000 hochrechnen, dann wirds im Mittel auch 4x 25.000 sein, aber alle Extrema sind möglich
 
E

egat

Gast
Danke für die vielen schnellen Antworten. Meine Hausaufgaben sollt ihr hier sicherlich nicht machen...

hab es jetzt so realisiert:

double limit = 100000.0;
double a,b,c,d;
double abc = 0.0;

do {
a = Math.random() * limit;
System.out.println("a = " + a);
b = Math.random() * (limit - a);
System.out.println("b = " + b);
c = Math.random() * (limit - a - b);
System.out.println("c = " + c);

abc = a + b + c;
d = limit - abc;
System.out.println("d = " + d);
} while (d < 0.0);

double gesamt = a + b + c + d;
System.out.println("Gesamt: " + gesamt);

Was sagt ihr dazu?
 
E

egat

Gast
Mir fällt gerade auf, dass die do-while-Schleife eigentlich überflüssig oder?
 

Der Müde Joe

Top Contributor
anderer Anstatz (nur zu studienzwecken ;-)
Code:
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class Test {

	private static final int MAX = 100000;

	public static void main(String[] args) {
		Random random = new Random();

		Set<Integer> vals = new TreeSet<Integer>();
		while (vals.size() < 3) {
			vals.add(random.nextInt(MAX + 1));
		}
		int start = 0;
		for (Integer i : vals) {
			Interval interval = new Interval(start, i);
			start = i + 1;
			System.out.println(interval);
		}
		Interval end = new Interval(start, MAX);
		System.out.println(end);
	}

	private static class Interval {

		private int start;
		private int end;

		public Interval(int start, int end) {
			this.start = start;
			this.end = end;
		}

		public String toString() {
			return "[" + start + "," + end + "]";
		}
	}

}
 

Schandro

Top Contributor
@egat, Hier ne elegantere und dynamischere Lösung:
Code:
		double zahl = 100000;

		for(int i=0;i<3;++i){
			double newZahl = Math.random()*zahl;
			System.out.println(newZahl);
			zahl -= newZahl;
		}
		System.out.println(zahl);
 
G

Guest

Gast
Schandro hat gesagt.:
@egat, Hier ne elegantere und dynamischere Lösung:
Code:
		double zahl = 100000;

		for(int i=0;i<3;++i){
			double newZahl = Math.random()*zahl;
			System.out.println(newZahl);
			zahl -= newZahl;
		}
		System.out.println(zahl);

Das ist wahrlich etwas professioneller :)
VIELEN DANK.
 

Marco13

Top Contributor
In bezug auf das letzte hatte ich eine Vermutung, bei der es jetzt ...Indizien gibt, dafür, dass sie wahr ist. Hab' mal "Histogramme" für die verschiedenen Ansätze gezeichnet:

Das ganz links ist das von egat bzw. Schandro: Es wird immer eine zufällige Aufteilung für das verbleibende intervall bestimmt. Man sieht, dass kleine Zahlen unverhältnismäßig viel häufiger auftreten als große - die 1 kommt EXTREM oft vor.

Das mittlere ist mein Ansatz: Das Intervall von 0 bis n wird zufällig in 4 Stücke aufgeteilt. (Ist nur gehackt, nicht aufregen). Die Verteilung ist ziemlich linear... Ob das nun "richtig" ist, weiß ich aber auch nicht :?

Das rechte ist der Alternativvorschlag von SlaterB (auch gehackt - sorry) : Es wird 4x random aufgerufen, und die 4 Einzelwerte als Teile der Summe auf das Intervall umgerechnet. Die Verteilung sieht absolut strange aus - aber mit einem deutlichen "Peak" bei 1/4 des Maximalwertes, was ja nicht unplausibel ist ???:L

Wenn mir mal langweilig ist (ja, NOCH langweiliger, als eben, als ich das geschrieben habe :wink: ) werde ich mir vielleicht mal (für mich selbst) überlegen, wie es "richtig" aussehen müßte. Linear finde ich eigentlich nicht verkehrt, aber begründen kann' ich's nicht, und ich weiß, dass man sich bei solchem Wahrscheinlichkeitskram mit Dingen wie "Intuition" und "Bauchgefühl" ganz übel auf die Fresse legen kann :autsch: (Ich sag' nur http://de.wikipedia.org/wiki/Geburtstagsparadoxon :meld: )

Oder ... sind irgendwelche Stochastik-Freaks hier? Vielleicht kann Andrey ja was dazu sagen? :wink:

Code:
import java.util.*;
import javax.swing.*;
import java.awt.*;


class RandomTest
{
    private static final int NUMBER = 300; // ALSO USED AS FRAME SIZE!!!
    private static final int RUNS = 50000;

    public static void main(String args[])
    {
        show(test(new RandomComputer0()), 0);
        show(test(new RandomComputer1()), 1);
        show(test(new RandomComputer2()), 2);
    }

    private static void show(int a[], int n)
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new Histogram(a));
        f.setBounds(n*NUMBER,0,NUMBER,NUMBER);
        f.setVisible(true);
    }

    static class Histogram extends JPanel
    {
        private int min = Integer.MAX_VALUE;
        private int max = -1;
        private int a[];

        public Histogram(int a[])
        {
            this.a = a;
            for (int i=0; i<a.length; i++)
            {
                min = Math.min(min, a[i]);
                max = Math.max(max, a[i]);
            }
        }

        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);

            float sx = (float)getWidth()/a.length;
            float sy = (float)getHeight() / (max-min);

            for (int i=0; i<a.length; i++)
            {
                int x = (int)(i * sx);
                int y = (int)(a[i] * sy);
                g.drawLine(x,getHeight(),x,getHeight()-y);
            }
        }
    }

    private static int[] test(RandomComputer rc)
    {
        int counter[] = new int[NUMBER];
        for (int i=0; i<RUNS; i++)
        {
            int result[] = rc.getThem();
            //System.out.println(Arrays.toString(result));
            for (int j=0; j<result.length; j++)
            {
                counter[result[j]]++;
            }
            if (sum(result) != NUMBER)
            {
                System.out.println("Sum is "+sum(result)+": "+Arrays.toString(result));
            }

        }
        return counter;
    }

    private static int sum(int a[])
    {
        int sum = 0;
        for (int i=0; i<a.length; i++)
        {
            sum += a[i];
        }
        return sum;
    }



    interface RandomComputer
    {
        int[] getThem();
    }

    static class RandomComputer0 implements RandomComputer
    {
        public int[] getThem()
        {
            int zahl = NUMBER;
            int result[] = new int[4];
            for(int i=0;i<3;++i)
            {
                int newZahl = (int)(Math.random()*zahl);
                result[i] = newZahl;
                zahl -= newZahl;
            }
            result[3] = zahl;
            return result;
        }
    }

    static class RandomComputer1 implements RandomComputer
    {
        float temp[] = new float[3];

        public int[] getThem()
        {
            int result[] = new int[4];
            temp[0] = (float)Math.random();
            temp[1] = (float)Math.random();
            temp[2] = (float)Math.random();
            Arrays.sort(temp);
            result[0] = (int)(NUMBER * Math.abs(temp[0]-0));
            result[1] = (int)(NUMBER * Math.abs(temp[1]-temp[0]));
            result[2] = (int)(NUMBER * Math.abs(temp[2]-temp[1]));
            result[3] = (int)(NUMBER * Math.abs(      1-temp[2]));
            result[3] += (NUMBER - result[0] - result[1] - result[2] - result[3]);
            return result;
        }
    }

    static class RandomComputer2 implements RandomComputer
    {
        public int[] getThem()
        {
            float r0 = (float)Math.random();
            float r1 = (float)Math.random();
            float r2 = (float)Math.random();
            float r3 = (float)Math.random();
            float sum = r0 + r1 + r2 + r3;
            int result[] = new int[4];
            result[0] = (int)(NUMBER * (r0/sum));
            result[1] = (int)(NUMBER * (r1/sum));
            result[2] = (int)(NUMBER * (r2/sum));
            result[3] = (int)(NUMBER * (r3/sum));
            result[3] += (NUMBER - result[0] - result[1] - result[2] - result[3]);
            return result;
        }
    }


}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
B 49-bit-zahl mit genau 6 Einsen bauen? Java Basics - Anfänger-Themen 21
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
M zahl raten Java Basics - Anfänger-Themen 1
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
I Zahl aufrunden (Zeit) Java Basics - Anfänger-Themen 43
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
R Fortlaufende Zahl Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
HelpInneed Zahl. Java Basics - Anfänger-Themen 2
R Perfekte Zahl Java Basics - Anfänger-Themen 8
D Mittlerste Zahl Java Basics - Anfänger-Themen 17
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

Ähnliche Java Themen

Neue Themen


Oben