Czesć,

Potrzebuję stworzyć program w języku java, który będzie symulatorem obsługi np. w obsługi kas w sklepie - przez rozkład normalny.
X/Y/n (X-rozkład kolejki, Y-rozkład obsługi)

Na teraz mam tylko, program z rozkładem wykładniczym, ale nie wiem jak zmienić na rozkład Gaussa? gdzie jest jakiś wzór?

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Random;


public class UrzadSkarbowy {
    private JTextArea textArea1;
    private JTextArea textArea2;
    private JTextArea textArea3;
    private JTextArea textArea4;

    private JButton obliczButton;
    private JPanel GUI;

    private JTextField textField1;

    private JTextField textField3;
    private JTextField textField2;
    private JButton clearButton;
    private JButton button1;

    int sumaDlugosciKolejek=0;
    int Max_time ;
    double klient;
    double czas;
    int sumaCzasowCzekania=0;
    double liczbaObsluzonychKlientow=0;
    double zajetyDo = 0;
    double odchylenieCzasuObslugi=0;
    double tOblsugi;


    public UrzadSkarbowy() {
        textField1.setText("");
        textField2.setText("");
        textField3.setText("");

        obliczButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {


                Max_time = Integer.parseInt(textField1.getText());


                klient = Double.parseDouble(textField2.getText());
                czas=Double.parseDouble(textField3.getText());
                Random r = new Random();
                int sumaDlugosciKolejek=0;
                int sumaCzasowCzekania=0;
              double liczbaObsluzonychKlientow=0;

                Queue<Integer> Q = new ArrayDeque<Integer>();

                for (int time = 0; time < Max_time; time++) {
                    if (r.nextDouble() < klient) {

                        Q.add(time);

                    }
                    sumaDlugosciKolejek += Q.size();
                    if (zajetyDo<time) {
                        if (Q.size()==0) continue;

                        sumaCzasowCzekania += (time - Q.peek()) + czas;
                        ++liczbaObsluzonychKlientow;
                        Q.poll();
                        zajetyDo = time + czas - 1;
                    }
                }

                double avg = (double) sumaDlugosciKolejek / Max_time;
                double avgWaitTime = (double)sumaCzasowCzekania / liczbaObsluzonychKlientow;
                //double avgWaitTime = (double)sumaCzasowCzekania / Max_time/czas;
                textArea1.setText("Srednia długość kolejki:" + avg + "\nDlugosc kolejki na koniec:" + Q.size()
                        +"\nSredni czas oczekiwania i załatwienia sprawy:" + avgWaitTime);





            }
        });
        obliczButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                Max_time = Integer.parseInt(textField1.getText());


                klient = Double.parseDouble(textField2.getText());
                czas=Double.parseDouble(textField3.getText());
                Random r = new Random();
                int sumaDlugosciKolejek=0;
                int sumaCzasowCzekania=0;
                //double liczbaObsluzonychKlientow=0;

                Queue<Integer> Q = new ArrayDeque<Integer>();

                for (int time = 0; time < Max_time; time++) {
                    if (r.nextDouble() < klient) {

                        Q.add(time);

                    }
                    sumaDlugosciKolejek += Q.size();
                    if (zajetyDo<time) {
                        if (Q.size()==0) continue;

                        sumaCzasowCzekania += (time - Q.peek()) + czas;
                        ++liczbaObsluzonychKlientow;
                        Q.poll();
                        zajetyDo = time + czas - 1;
                    }
                }

                    double avg = (double) sumaDlugosciKolejek / Max_time;
                    double avgWaitTime = (double)sumaCzasowCzekania / liczbaObsluzonychKlientow;
                    //double avgWaitTime = (double)sumaCzasowCzekania / Max_time/czas;
                textArea2.setText("Srednia długość kolejki:" + avg + "\nDlugosc kolejki na koniec:" + Q.size()
                        +"\nSredni czas oczekiwania i załatwienia sprawy:" + avgWaitTime);
            }
        });

        obliczButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                Max_time = Integer.parseInt(textField1.getText());


                klient = Double.parseDouble(textField2.getText());
                czas=Double.parseDouble(textField3.getText());
                Random r = new Random();

                int sumaCzasowCzekania=0;


                Queue<Integer> Q = new ArrayDeque<Integer>();

                for (int time = 0; time < Max_time; time++) {
                    if (r.nextDouble() < klient) {

                        Q.add(time);
                    }

                    sumaDlugosciKolejek += Q.size();
                    if (zajetyDo<time) {
                        if (Q.size()==0) continue;

                        double tOblsugi = r.nextGaussian() * odchylenieCzasuObslugi + czas;
                        tOblsugi = Math.max(0, tOblsugi);
                        sumaCzasowCzekania += (time - Q.peek()) + (int)tOblsugi;
                        ++liczbaObsluzonychKlientow;
                        Q.poll();
                        zajetyDo = time + tOblsugi - 1;

                    }
                }
                    double avg = (double) sumaDlugosciKolejek / Max_time;
                    double avgWaitTime = (double)sumaCzasowCzekania / liczbaObsluzonychKlientow;
                    //double avgWaitTime = (double)sumaCzasowCzekania / Max_time/czas;
                textArea3.setText("Srednia długość kolejki:" + avg + "\nDlugosc kolejki na koniec:" + Q.size()
                        +"\nSredni czas oczekiwania i załatwienia sprawy:" + avgWaitTime);

            }
        });
        obliczButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                Max_time = Integer.parseInt(textField1.getText());


                klient = Double.parseDouble(textField2.getText());
                czas=Double.parseDouble(textField3.getText());
                Random r = new Random();
                int sumaDlugosciKolejek=0;

                //double liczbaObsluzonychKlientow=0;

                Queue<Integer> Q = new ArrayDeque<Integer>();

                for (int time = 0; time < Max_time; time++) {
                    if (r.nextDouble() < klient) {

                        Q.add(time);
                    }

                    sumaDlugosciKolejek += Q.size();

                    if (zajetyDo<time) {
                        if (Q.size()==0) continue;

                        tOblsugi = r.nextGaussian() * odchylenieCzasuObslugi + czas;
                        tOblsugi = Math.max(0, tOblsugi);
                        sumaCzasowCzekania += (time - Q.peek()) + (int)tOblsugi;
                        liczbaObsluzonychKlientow=Max_time/czas;
                        Q.poll();
                        zajetyDo = time + tOblsugi - 1;

                    }
                }
                double avg = (double) sumaDlugosciKolejek / Max_time;
                //double avgWaitTime = (double)sumaCzasowCzekania / Max_time/czas;
                double avgWaitTime = (double)sumaCzasowCzekania / liczbaObsluzonychKlientow;

                 textArea4.setText("Srednia długość kolejki:" + avg + "\nDlugosc kolejki na koniec:" + Q.size()
                        +"\nSredni czas oczekiwania i załatwienia sprawy:" + avgWaitTime);

            }
        });

    clearButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            textArea1.setText("");
            textArea2.setText("");
            textArea3.setText("");
            textArea4.setText("");

        }
    });
    button1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            System.exit(0);

        }
    });
    }
    public static void main(String[] args) {
        JFrame frame = new JFrame("UrzadSkarbowy");
        frame.setContentPane(new UrzadSkarbowy().GUI);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);



    }





}