Guest User

Untitled

a guest
Apr 22nd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.29 KB | None | 0 0
  1. package de.android.diskreteverteilungen;
  2.  
  3. import java.math.RoundingMode;
  4. import java.text.DecimalFormat;
  5. import java.util.LinkedList;
  6. import java.util.List;
  7.  
  8. import org.apache.commons.math.MathException;
  9. import org.apache.commons.math.distribution.BinomialDistributionImpl;
  10.  
  11. import android.app.Activity;
  12. import android.content.Intent;
  13. import android.graphics.Color;
  14. import android.graphics.Paint;
  15. import android.os.Bundle;
  16. import android.text.Editable;
  17. import android.text.TextWatcher;
  18. import android.view.View;
  19. import android.widget.AdapterView;
  20. import android.widget.ArrayAdapter;
  21. import android.widget.CheckBox;
  22. import android.widget.CompoundButton;
  23. import android.widget.EditText;
  24. import android.widget.RadioButton;
  25. import android.widget.Spinner;
  26. import android.widget.TextView;
  27. import android.widget.Toast;
  28.  
  29. import com.androidplot.xy.BarFormatter;
  30. import com.androidplot.xy.LineAndPointFormatter;
  31. import com.androidplot.xy.SimpleXYSeries;
  32. import com.androidplot.xy.XYPlot;
  33. import com.androidplot.xy.XYSeriesFormatter;
  34. import com.androidplot.xy.XYStepMode;
  35. import de.android.R;
  36.  
  37. import de.android.stetigeverteilungen.ChiQuadrat;
  38. import de.android.stetigeverteilungen.FVerteilung;
  39. import de.android.stetigeverteilungen.Normal;
  40. import de.android.stetigeverteilungen.TVerteilung;
  41. import de.android.system.Einstellungen;
  42. import de.android.system.Zeichenpruefer;
  43.  
  44. import android.widget.RadioGroup;
  45. import android.widget.RadioGroup.OnCheckedChangeListener;
  46.  
  47. public class Binomial extends Activity implements
  48.         RadioGroup.OnCheckedChangeListener, android.view.View.OnClickListener {
  49.     private DecimalFormat formatterDNz;
  50.     List<Double> series1Numbers;
  51.     List<Double> series2Numbers;
  52.     private String binomial_tabelle;
  53.     private RadioButton f;
  54.     private CheckBox c;
  55.     private int count = 0; // Variablen um die ungewollten Spinneraufrufe zu
  56.                             // umgehen
  57.     private int initcount = 0;
  58.     private boolean approx;
  59.  
  60.     SimpleXYSeries series1 = new SimpleXYSeries("b(x)");
  61.     SimpleXYSeries series2 = new SimpleXYSeries("n(x)");
  62.  
  63.     @Override
  64.     public void onCreate(Bundle savedInstanceState) {
  65.         super.onCreate(savedInstanceState);
  66.         setContentView(R.layout.binomial);
  67.  
  68.         f = (RadioButton) findViewById(R.id.bradiof);
  69.         // CheckBox checkBox = (CheckBox) findViewById(R.id.bcheckBoxapprox);
  70.  
  71.         // View updatebutton = findViewById(R.id.bupdate);
  72.         // updatebutton.setOnClickListener(this);
  73.  
  74.         // View einstellungenview = findViewById(R.id.buttonEinstellungen);
  75.         // einstellungenview.setOnClickListener(this);
  76.  
  77.         Binomialf(50, 0.5);
  78.  
  79.         // Listener für f(x) und F(x)
  80.         RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroupb);
  81.         OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() {
  82.             public void onCheckedChanged(RadioGroup group, int checkedId) {
  83.                 // Log.i("Test", "onCheckedChanged() id:" + checkedId);
  84.                 update();
  85.             }
  86.         };
  87.         radioGroup.setOnCheckedChangeListener(onCheckedChangeListener);
  88.  
  89.         EditText etn = (EditText) findViewById(R.id.beditn);
  90.         EditText ettheta = (EditText) findViewById(R.id.bedittheta);
  91.  
  92.         etn.addTextChangedListener(new TextWatcher() {
  93.             public void afterTextChanged(Editable s) {
  94.                 if (!(s.toString().equals("")) | !(s.toString().equals("0"))) {
  95.                     update();
  96.                 }
  97.             }
  98.  
  99.             public void beforeTextChanged(CharSequence s, int start, int count,
  100.                     int after) {
  101.                 // TODO Auto-generated method stub
  102.             }
  103.  
  104.             public void onTextChanged(CharSequence s, int start, int before,
  105.                     int count) {
  106.                 // TODO Auto-generated method stub
  107.             }
  108.         });
  109.  
  110.         ettheta.addTextChangedListener(new TextWatcher() {
  111.             public void afterTextChanged(Editable s) {
  112.                 if (!(s.toString().equals("")) | !(s.toString().equals("0"))) {
  113.                     // Button bupdatebutton = (Button)
  114.                     // findViewById(R.id.bupdate);
  115.                     // bupdatebutton.performClick();
  116.                     update();
  117.                 }
  118.             }
  119.  
  120.             public void beforeTextChanged(CharSequence s, int start, int count,
  121.                     int after) {
  122.                 // TODO Auto-generated method stub
  123.             }
  124.  
  125.             public void onTextChanged(CharSequence s, int start, int before,
  126.                     int count) {
  127.                 // TODO Auto-generated method stub
  128.             }
  129.         });
  130.  
  131.         // Listener für die Normalverteilung
  132.         CheckBox bapproxcheckbox = (CheckBox) findViewById(R.id.bcheckBoxapprox);
  133.         bapproxcheckbox
  134.                 .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  135.                     public void onCheckedChanged(CompoundButton buttonView,
  136.                             boolean isChecked) {
  137.                         // TODO Auto-generated method stub
  138.                         update();
  139.                     }
  140.                 });
  141.  
  142.         count = 1;
  143.     }
  144.  
  145.     @Override
  146.     public void onStart() {
  147.         super.onStart();
  148.  
  149.         // Listener fürs Dropdown-Menü
  150.         Spinner spinnerdat = (Spinner) findViewById(R.id.spinnerdatei);
  151.  
  152.         ArrayAdapter<CharSequence> adapterdatei = ArrayAdapter
  153.                 .createFromResource(this, R.array.datei,
  154.                         android.R.layout.simple_spinner_item);
  155.         adapterdatei
  156.                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  157.         spinnerdat.setAdapter(adapterdatei);
  158.  
  159.         Spinner spinnerstet = (Spinner) findViewById(R.id.spinnerstet);
  160.         ArrayAdapter<CharSequence> adapterstet = ArrayAdapter
  161.                 .createFromResource(this, R.array.stetige_verteilungen,
  162.                         android.R.layout.simple_spinner_item);
  163.         adapterstet
  164.                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  165.         spinnerstet.setAdapter(adapterstet);
  166.  
  167.         Spinner spinnerdisk = (Spinner) findViewById(R.id.spinnerdisk);
  168.         ArrayAdapter<CharSequence> adapterdisk = ArrayAdapter
  169.                 .createFromResource(this, R.array.diskrete_verteilungen,
  170.                         android.R.layout.simple_spinner_item);
  171.         adapterdisk
  172.                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  173.         spinnerdisk.setAdapter(adapterdisk);
  174.  
  175.         spinnerdat
  176.                 .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  177.  
  178.                     public void onItemSelected(AdapterView<?> parentView,
  179.                             View selectedItemView, int position, long id) {
  180.                         if (initcount < count) {
  181.                             initcount++;
  182.                         } else {
  183.                             if (parentView.getItemAtPosition(position)
  184.                                     .toString().equals("Einstellungen")) {
  185.                                 Intent i = new Intent(Binomial.this,
  186.                                         Einstellungen.class);
  187.                                 startActivity(i);
  188.                             }
  189.                         }
  190.                     }
  191.  
  192.                     public void onNothingSelected(AdapterView<?> adapterView) {
  193.                         return;
  194.                     }
  195.                 });
  196.  
  197.         spinnerstet
  198.                 .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  199.                     public void onItemSelected(AdapterView<?> parentView,
  200.                             View selectedItemView, int position, long id) {
  201.                         if (initcount < count) {
  202.                             initcount++;
  203.                         } else {
  204.                             if (parentView.getItemAtPosition(position)
  205.                                     .toString().equals("Binomial")) {
  206.                                 Intent i = new Intent(Binomial.this,
  207.                                         Binomial.class);
  208.                                 startActivity(i);
  209.                             } else if (parentView.getItemAtPosition(position)
  210.                                     .toString().equals("Hypergeometrisch")) {
  211.                                 Intent i = new Intent(Binomial.this,
  212.                                         Hypergeometrisch.class);
  213.                                 startActivity(i);
  214.                             } else if (parentView.getItemAtPosition(position)
  215.                                     .toString().equals("Poisson")) {
  216.                                 Intent i = new Intent(Binomial.this,
  217.                                         Poisson.class);
  218.                                 startActivity(i);
  219.                             }
  220.                         }
  221.                     }
  222.  
  223.                     public void onNothingSelected(AdapterView<?> adapterView) {
  224.                         return;
  225.                     }
  226.                 });
  227.  
  228.         spinnerdisk
  229.                 .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  230.                     public void onItemSelected(AdapterView<?> parentView,
  231.                             View selectedItemView, int position, long id) {
  232.                         if (initcount < count) {
  233.                             initcount++;
  234.                         } else {
  235.                             if (parentView.getItemAtPosition(position)
  236.                                     .toString().equals("Normal")) {
  237.                                 Intent i = new Intent(Binomial.this,
  238.                                         Normal.class);
  239.                                 startActivity(i);
  240.                             } else if (parentView.getItemAtPosition(position)
  241.                                     .toString().equals("t-Verteilung")) {
  242.                                 Intent i = new Intent(Binomial.this,
  243.                                         TVerteilung.class);
  244.                                 startActivity(i);
  245.                             } else if (parentView.getItemAtPosition(position)
  246.                                     .toString().equals("F-Verteilung")) {
  247.                                 Intent i = new Intent(Binomial.this,
  248.                                         FVerteilung.class);
  249.                                 startActivity(i);
  250.                             } else if (parentView.getItemAtPosition(position)
  251.                                     .toString().equals("Chi-Quadrat")) {
  252.                                 Intent i = new Intent(Binomial.this,
  253.                                         ChiQuadrat.class);
  254.                                 startActivity(i);
  255.                             }
  256.                         }
  257.                     }
  258.  
  259.                     public void onNothingSelected(AdapterView<?> adapterView) {
  260.                         return;
  261.                     }
  262.                 });
  263.     }
  264.  
  265.     /*
  266.      * public class MyOnItemSelectedListener implements OnItemSelectedListener {
  267.      *
  268.      * public void onItemSelected(AdapterView<?> parent, View view, int pos,
  269.      * long id) { if
  270.      * (parent.getItemAtPosition(pos).toString().equals("Hypergeometrisch")) {
  271.      * Intent j = new Intent(this, Hypergeometrisch.class); startActivity(j); }
  272.      * }
  273.      *
  274.      * public void onNothingSelected(AdapterView parent) { // Do nothing. } }
  275.      */
  276.  
  277.     /*
  278.      * public void onClick(View v) { switch (v.getId()) { case
  279.      * R.id.buttonEinstellungen: Intent i = new Intent(this,
  280.      * Einstellungen.class); startActivity(i); break; } }
  281.      */
  282.  
  283.     public void update() {
  284.         int n;
  285.         double theta;
  286.  
  287.         // n aus dem Edit-Feld einlesen und zu Int casten
  288.         EditText etn = (EditText) findViewById(R.id.beditn);
  289.         String nstring = etn.getText().toString();
  290.  
  291.         if (Zeichenpruefer.intisNum(nstring)) {
  292.             n = Integer.parseInt(nstring);
  293.         } else {
  294.             Toast.makeText(this,
  295.                     "Please insert a Integer-Number for n a.e. 50",
  296.                     Toast.LENGTH_SHORT).show();
  297.             n = 50;
  298.         }
  299.  
  300.         // theta aus dem Edit-Feld einlesen und zu Double casten
  301.         EditText ettheta = (EditText) findViewById(R.id.bedittheta);
  302.         String thetastring = ettheta.getText().toString();
  303.  
  304.         if (Zeichenpruefer.doubleisNum(thetastring)) {
  305.             if (Double.parseDouble(thetastring) < 1.0) {
  306.                 theta = Double.parseDouble(thetastring);
  307.             } else {
  308.                 Toast.makeText(this, "theta must be < 1.0", Toast.LENGTH_SHORT)
  309.                         .show();
  310.                 theta = 0.5;
  311.             }
  312.         } else {
  313.             Toast.makeText(this,
  314.                     "Please insert a Double-Number for theta a.e. 0.5",
  315.                     Toast.LENGTH_SHORT).show();
  316.             theta = 0.5;
  317.         }
  318.  
  319.         Binomialf(n, theta);
  320.     }
  321.  
  322.     /*
  323.      * public void onClick(View v) { switch (v.getId()) { case R.id.bupdate: //
  324.      * n aus dem Edit-Feld einlesen und zu Int casten EditText etn = (EditText)
  325.      * findViewById(R.id.beditn); String nstring = etn.getText().toString(); int
  326.      * n = Integer.parseInt(nstring);
  327.      *
  328.      * // theta aus dem Edit-Feld einlesen und zu Double casten EditText ettheta
  329.      * = (EditText) findViewById(R.id.bedittheta); String thetastring =
  330.      * ettheta.getText().toString(); double theta = Double.valueOf(thetastring);
  331.      *
  332.      *
  333.      * //if( !(etn.getText().toString().equals(null)) ||
  334.      * !(ettheta.getText().toString().equals(null)) ) } }
  335.      */
  336.  
  337.     public void Binomialf(int n, double theta) {
  338.         XYPlot mySimpleXYPlot;
  339.         // Create two arrays of y-values to plot:
  340.         List<Double> series1Numbers = new LinkedList<Double>();
  341.         series1Numbers.add(0D);
  342.  
  343.         List<Double> series2Numbers = new LinkedList<Double>();
  344.         series2Numbers.add(0D);
  345.  
  346.         binomial_tabelle = "x               b(x)                    B(x)\n";
  347.  
  348.         int nks = Einstellungen.nks;
  349.         double nurgroesserx = Einstellungen.nurgroesserx;
  350.  
  351.         // Formatierer
  352.         String stringNks = "###,##0.";
  353.  
  354.         for (int i = 1; i <= nks; i++) {
  355.             stringNks += "0";
  356.         }
  357.  
  358.         formatterDNz = new DecimalFormat(stringNks);
  359.         formatterDNz.setRoundingMode(RoundingMode.DOWN);
  360.  
  361.         BinomialDistributionImpl binomialvert = new BinomialDistributionImpl(n,
  362.                 theta);
  363.  
  364.         for (int i = 1; i <= n; i++) {
  365.             try {
  366.                 if (f.isChecked() == true) {
  367.                     series1Numbers.add(binomialvert.cumulativeProbability(i)
  368.                             - binomialvert.cumulativeProbability(i - 1));
  369.                 } else {
  370.                     series1Numbers.add(binomialvert.cumulativeProbability(i));
  371.                 }
  372.                 if (binomialvert.cumulativeProbability(i)
  373.                         - binomialvert.cumulativeProbability(i - 1) > nurgroesserx) { // Abfrage,
  374.                                                                                         // ob
  375.                                                                                         // der
  376.                                                                                         // Wert
  377.                                                                                         // größer
  378.                                                                                         // ist,
  379.                                                                                         // als
  380.                                                                                         // der
  381.                                                                                         // angegebene
  382.                     if (i < 10) { // Eintrag der Werte in den Tabellen-String
  383.                                     // bei i < 10 muss ein Tab mehr rein
  384.                         binomial_tabelle += i
  385.                                 + "             "
  386.                                 + formatterDNz.format(binomialvert
  387.                                         .cumulativeProbability(i)
  388.                                         - binomialvert
  389.                                                 .cumulativeProbability(i - 1))
  390.                                 + "         "
  391.                                 + formatterDNz.format(binomialvert
  392.                                         .cumulativeProbability(i)) + " \n";
  393.                     } else { // Eintrag der Werte in den Tabellen-String für f
  394.                                 // und F
  395.                         binomial_tabelle += i
  396.                                 + "         "
  397.                                 + formatterDNz.format(binomialvert
  398.                                         .cumulativeProbability(i)
  399.                                         - binomialvert
  400.                                                 .cumulativeProbability(i - 1))
  401.                                 + "         "
  402.                                 + formatterDNz.format(binomialvert
  403.                                         .cumulativeProbability(i)) + " \n";
  404.                     }
  405.                 }
  406.  
  407.             } catch (MathException e) {
  408.                 // TODO Auto-generated catch block
  409.                 e.printStackTrace();
  410.             }
  411.         }
  412.  
  413.         // Formatierer für den Erwartungswert & die Varianz
  414.         formatterDNz = new DecimalFormat("###,##0.00");
  415.         formatterDNz.setRoundingMode(RoundingMode.DOWN);
  416.  
  417.         // Erwartungswert und theta berechnen und in die Kopfzeile eingeben
  418.         double erw = n * theta;
  419.         double var = n * theta * (1 - theta);
  420.         EditText eterw = (EditText) findViewById(R.id.bediterw);
  421.         eterw.setText(String.valueOf(formatterDNz.format(erw)));
  422.         EditText etvar = (EditText) findViewById(R.id.beditvar);
  423.         etvar.setText(String.valueOf(formatterDNz.format(var)));
  424.  
  425.         c = (CheckBox) findViewById(R.id.bcheckBoxapprox);
  426.         approx = c.isChecked();
  427.  
  428.         TextView tvtabelle = (TextView) findViewById(R.id.binomial_tabelle);
  429.  
  430.         // Ergebnisse in den Textview reinschreiben
  431.         tvtabelle.setText(binomial_tabelle);
  432.  
  433.         // Initialize our XYPlot reference:
  434.         mySimpleXYPlot = (XYPlot) findViewById(R.id.binomial);
  435.        
  436.         series1.setModel(series1Numbers, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
  437.         series2.setModel(series1Numbers, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
  438.  
  439.         // Create a formatter to use for drawing a series using
  440.         // LineAndPointRenderer:
  441.         BarFormatter series1Format = new BarFormatter(Color.rgb(200, 0, 0), // line
  442.                                                                             // color
  443.                 Color.rgb(100, 100, 100)); // point color
  444.        
  445.         LineAndPointFormatter series2Format = new LineAndPointFormatter(
  446.                 Color.TRANSPARENT, // line
  447.                 // color
  448.                 Color.TRANSPARENT, Color.TRANSPARENT); // point color
  449.         mySimpleXYPlot.addSeries(series2, series2Format);          
  450.        
  451.         mySimpleXYPlot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, 5);
  452.  
  453.         // Add series1 to the xyplot:
  454.         mySimpleXYPlot.addSeries(series1, series1Format);
  455.         mySimpleXYPlot.addSeries(series2, series2Format);
  456.        
  457.        
  458.         if (approx) {
  459.             series2Format.setLinePaint(); // Blaue Linie
  460.         } else {
  461.             series2Format.setLinePaint(); // Transparente Linie
  462.         }
  463.        
  464.        
  465.         // Reduce the number of range labels
  466.         mySimpleXYPlot.setTicksPerRangeLabel(3);
  467.  
  468.         // By default, AndroidPlot displays developer guides to aid in laying
  469.         // out your plot.
  470.         // To get rid of them call disableAllMarkup():
  471.         mySimpleXYPlot.disableAllMarkup();
  472.         mySimpleXYPlot.redraw();
  473.  
  474.     }
  475.  
  476.     public void onCheckedChanged(RadioGroup arg0, int arg1) {
  477.         // TODO Auto-generated method stub
  478.  
  479.     }
  480.  
  481.     public void onClick(View v) {
  482.  
  483.     }
  484. }
Add Comment
Please, Sign In to add comment