Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.android.diskreteverteilungen;
- import java.math.RoundingMode;
- import java.text.DecimalFormat;
- import java.util.LinkedList;
- import java.util.List;
- import org.apache.commons.math.MathException;
- import org.apache.commons.math.distribution.BinomialDistributionImpl;
- import android.app.Activity;
- import android.content.Intent;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.os.Bundle;
- import android.text.Editable;
- import android.text.TextWatcher;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.ArrayAdapter;
- import android.widget.CheckBox;
- import android.widget.CompoundButton;
- import android.widget.EditText;
- import android.widget.RadioButton;
- import android.widget.Spinner;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.androidplot.xy.BarFormatter;
- import com.androidplot.xy.LineAndPointFormatter;
- import com.androidplot.xy.SimpleXYSeries;
- import com.androidplot.xy.XYPlot;
- import com.androidplot.xy.XYSeriesFormatter;
- import com.androidplot.xy.XYStepMode;
- import de.android.R;
- import de.android.stetigeverteilungen.ChiQuadrat;
- import de.android.stetigeverteilungen.FVerteilung;
- import de.android.stetigeverteilungen.Normal;
- import de.android.stetigeverteilungen.TVerteilung;
- import de.android.system.Einstellungen;
- import de.android.system.Zeichenpruefer;
- import android.widget.RadioGroup;
- import android.widget.RadioGroup.OnCheckedChangeListener;
- public class Binomial extends Activity implements
- RadioGroup.OnCheckedChangeListener, android.view.View.OnClickListener {
- private DecimalFormat formatterDNz;
- List<Double> series1Numbers;
- List<Double> series2Numbers;
- private String binomial_tabelle;
- private RadioButton f;
- private CheckBox c;
- private int count = 0; // Variablen um die ungewollten Spinneraufrufe zu
- // umgehen
- private int initcount = 0;
- private boolean approx;
- SimpleXYSeries series1 = new SimpleXYSeries("b(x)");
- SimpleXYSeries series2 = new SimpleXYSeries("n(x)");
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.binomial);
- f = (RadioButton) findViewById(R.id.bradiof);
- // CheckBox checkBox = (CheckBox) findViewById(R.id.bcheckBoxapprox);
- // View updatebutton = findViewById(R.id.bupdate);
- // updatebutton.setOnClickListener(this);
- // View einstellungenview = findViewById(R.id.buttonEinstellungen);
- // einstellungenview.setOnClickListener(this);
- Binomialf(50, 0.5);
- // Listener für f(x) und F(x)
- RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroupb);
- OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() {
- public void onCheckedChanged(RadioGroup group, int checkedId) {
- // Log.i("Test", "onCheckedChanged() id:" + checkedId);
- update();
- }
- };
- radioGroup.setOnCheckedChangeListener(onCheckedChangeListener);
- EditText etn = (EditText) findViewById(R.id.beditn);
- EditText ettheta = (EditText) findViewById(R.id.bedittheta);
- etn.addTextChangedListener(new TextWatcher() {
- public void afterTextChanged(Editable s) {
- if (!(s.toString().equals("")) | !(s.toString().equals("0"))) {
- update();
- }
- }
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- // TODO Auto-generated method stub
- }
- public void onTextChanged(CharSequence s, int start, int before,
- int count) {
- // TODO Auto-generated method stub
- }
- });
- ettheta.addTextChangedListener(new TextWatcher() {
- public void afterTextChanged(Editable s) {
- if (!(s.toString().equals("")) | !(s.toString().equals("0"))) {
- // Button bupdatebutton = (Button)
- // findViewById(R.id.bupdate);
- // bupdatebutton.performClick();
- update();
- }
- }
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- // TODO Auto-generated method stub
- }
- public void onTextChanged(CharSequence s, int start, int before,
- int count) {
- // TODO Auto-generated method stub
- }
- });
- // Listener für die Normalverteilung
- CheckBox bapproxcheckbox = (CheckBox) findViewById(R.id.bcheckBoxapprox);
- bapproxcheckbox
- .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- public void onCheckedChanged(CompoundButton buttonView,
- boolean isChecked) {
- // TODO Auto-generated method stub
- update();
- }
- });
- count = 1;
- }
- @Override
- public void onStart() {
- super.onStart();
- // Listener fürs Dropdown-Menü
- Spinner spinnerdat = (Spinner) findViewById(R.id.spinnerdatei);
- ArrayAdapter<CharSequence> adapterdatei = ArrayAdapter
- .createFromResource(this, R.array.datei,
- android.R.layout.simple_spinner_item);
- adapterdatei
- .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- spinnerdat.setAdapter(adapterdatei);
- Spinner spinnerstet = (Spinner) findViewById(R.id.spinnerstet);
- ArrayAdapter<CharSequence> adapterstet = ArrayAdapter
- .createFromResource(this, R.array.stetige_verteilungen,
- android.R.layout.simple_spinner_item);
- adapterstet
- .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- spinnerstet.setAdapter(adapterstet);
- Spinner spinnerdisk = (Spinner) findViewById(R.id.spinnerdisk);
- ArrayAdapter<CharSequence> adapterdisk = ArrayAdapter
- .createFromResource(this, R.array.diskrete_verteilungen,
- android.R.layout.simple_spinner_item);
- adapterdisk
- .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- spinnerdisk.setAdapter(adapterdisk);
- spinnerdat
- .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- public void onItemSelected(AdapterView<?> parentView,
- View selectedItemView, int position, long id) {
- if (initcount < count) {
- initcount++;
- } else {
- if (parentView.getItemAtPosition(position)
- .toString().equals("Einstellungen")) {
- Intent i = new Intent(Binomial.this,
- Einstellungen.class);
- startActivity(i);
- }
- }
- }
- public void onNothingSelected(AdapterView<?> adapterView) {
- return;
- }
- });
- spinnerstet
- .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- public void onItemSelected(AdapterView<?> parentView,
- View selectedItemView, int position, long id) {
- if (initcount < count) {
- initcount++;
- } else {
- if (parentView.getItemAtPosition(position)
- .toString().equals("Binomial")) {
- Intent i = new Intent(Binomial.this,
- Binomial.class);
- startActivity(i);
- } else if (parentView.getItemAtPosition(position)
- .toString().equals("Hypergeometrisch")) {
- Intent i = new Intent(Binomial.this,
- Hypergeometrisch.class);
- startActivity(i);
- } else if (parentView.getItemAtPosition(position)
- .toString().equals("Poisson")) {
- Intent i = new Intent(Binomial.this,
- Poisson.class);
- startActivity(i);
- }
- }
- }
- public void onNothingSelected(AdapterView<?> adapterView) {
- return;
- }
- });
- spinnerdisk
- .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- public void onItemSelected(AdapterView<?> parentView,
- View selectedItemView, int position, long id) {
- if (initcount < count) {
- initcount++;
- } else {
- if (parentView.getItemAtPosition(position)
- .toString().equals("Normal")) {
- Intent i = new Intent(Binomial.this,
- Normal.class);
- startActivity(i);
- } else if (parentView.getItemAtPosition(position)
- .toString().equals("t-Verteilung")) {
- Intent i = new Intent(Binomial.this,
- TVerteilung.class);
- startActivity(i);
- } else if (parentView.getItemAtPosition(position)
- .toString().equals("F-Verteilung")) {
- Intent i = new Intent(Binomial.this,
- FVerteilung.class);
- startActivity(i);
- } else if (parentView.getItemAtPosition(position)
- .toString().equals("Chi-Quadrat")) {
- Intent i = new Intent(Binomial.this,
- ChiQuadrat.class);
- startActivity(i);
- }
- }
- }
- public void onNothingSelected(AdapterView<?> adapterView) {
- return;
- }
- });
- }
- /*
- * public class MyOnItemSelectedListener implements OnItemSelectedListener {
- *
- * public void onItemSelected(AdapterView<?> parent, View view, int pos,
- * long id) { if
- * (parent.getItemAtPosition(pos).toString().equals("Hypergeometrisch")) {
- * Intent j = new Intent(this, Hypergeometrisch.class); startActivity(j); }
- * }
- *
- * public void onNothingSelected(AdapterView parent) { // Do nothing. } }
- */
- /*
- * public void onClick(View v) { switch (v.getId()) { case
- * R.id.buttonEinstellungen: Intent i = new Intent(this,
- * Einstellungen.class); startActivity(i); break; } }
- */
- public void update() {
- int n;
- double theta;
- // n aus dem Edit-Feld einlesen und zu Int casten
- EditText etn = (EditText) findViewById(R.id.beditn);
- String nstring = etn.getText().toString();
- if (Zeichenpruefer.intisNum(nstring)) {
- n = Integer.parseInt(nstring);
- } else {
- Toast.makeText(this,
- "Please insert a Integer-Number for n a.e. 50",
- Toast.LENGTH_SHORT).show();
- n = 50;
- }
- // theta aus dem Edit-Feld einlesen und zu Double casten
- EditText ettheta = (EditText) findViewById(R.id.bedittheta);
- String thetastring = ettheta.getText().toString();
- if (Zeichenpruefer.doubleisNum(thetastring)) {
- if (Double.parseDouble(thetastring) < 1.0) {
- theta = Double.parseDouble(thetastring);
- } else {
- Toast.makeText(this, "theta must be < 1.0", Toast.LENGTH_SHORT)
- .show();
- theta = 0.5;
- }
- } else {
- Toast.makeText(this,
- "Please insert a Double-Number for theta a.e. 0.5",
- Toast.LENGTH_SHORT).show();
- theta = 0.5;
- }
- Binomialf(n, theta);
- }
- /*
- * public void onClick(View v) { switch (v.getId()) { case R.id.bupdate: //
- * n aus dem Edit-Feld einlesen und zu Int casten EditText etn = (EditText)
- * findViewById(R.id.beditn); String nstring = etn.getText().toString(); int
- * n = Integer.parseInt(nstring);
- *
- * // theta aus dem Edit-Feld einlesen und zu Double casten EditText ettheta
- * = (EditText) findViewById(R.id.bedittheta); String thetastring =
- * ettheta.getText().toString(); double theta = Double.valueOf(thetastring);
- *
- *
- * //if( !(etn.getText().toString().equals(null)) ||
- * !(ettheta.getText().toString().equals(null)) ) } }
- */
- public void Binomialf(int n, double theta) {
- XYPlot mySimpleXYPlot;
- // Create two arrays of y-values to plot:
- List<Double> series1Numbers = new LinkedList<Double>();
- series1Numbers.add(0D);
- List<Double> series2Numbers = new LinkedList<Double>();
- series2Numbers.add(0D);
- binomial_tabelle = "x b(x) B(x)\n";
- int nks = Einstellungen.nks;
- double nurgroesserx = Einstellungen.nurgroesserx;
- // Formatierer
- String stringNks = "###,##0.";
- for (int i = 1; i <= nks; i++) {
- stringNks += "0";
- }
- formatterDNz = new DecimalFormat(stringNks);
- formatterDNz.setRoundingMode(RoundingMode.DOWN);
- BinomialDistributionImpl binomialvert = new BinomialDistributionImpl(n,
- theta);
- for (int i = 1; i <= n; i++) {
- try {
- if (f.isChecked() == true) {
- series1Numbers.add(binomialvert.cumulativeProbability(i)
- - binomialvert.cumulativeProbability(i - 1));
- } else {
- series1Numbers.add(binomialvert.cumulativeProbability(i));
- }
- if (binomialvert.cumulativeProbability(i)
- - binomialvert.cumulativeProbability(i - 1) > nurgroesserx) { // Abfrage,
- // ob
- // der
- // Wert
- // größer
- // ist,
- // als
- // der
- // angegebene
- if (i < 10) { // Eintrag der Werte in den Tabellen-String
- // bei i < 10 muss ein Tab mehr rein
- binomial_tabelle += i
- + " "
- + formatterDNz.format(binomialvert
- .cumulativeProbability(i)
- - binomialvert
- .cumulativeProbability(i - 1))
- + " "
- + formatterDNz.format(binomialvert
- .cumulativeProbability(i)) + " \n";
- } else { // Eintrag der Werte in den Tabellen-String für f
- // und F
- binomial_tabelle += i
- + " "
- + formatterDNz.format(binomialvert
- .cumulativeProbability(i)
- - binomialvert
- .cumulativeProbability(i - 1))
- + " "
- + formatterDNz.format(binomialvert
- .cumulativeProbability(i)) + " \n";
- }
- }
- } catch (MathException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- // Formatierer für den Erwartungswert & die Varianz
- formatterDNz = new DecimalFormat("###,##0.00");
- formatterDNz.setRoundingMode(RoundingMode.DOWN);
- // Erwartungswert und theta berechnen und in die Kopfzeile eingeben
- double erw = n * theta;
- double var = n * theta * (1 - theta);
- EditText eterw = (EditText) findViewById(R.id.bediterw);
- eterw.setText(String.valueOf(formatterDNz.format(erw)));
- EditText etvar = (EditText) findViewById(R.id.beditvar);
- etvar.setText(String.valueOf(formatterDNz.format(var)));
- c = (CheckBox) findViewById(R.id.bcheckBoxapprox);
- approx = c.isChecked();
- TextView tvtabelle = (TextView) findViewById(R.id.binomial_tabelle);
- // Ergebnisse in den Textview reinschreiben
- tvtabelle.setText(binomial_tabelle);
- // Initialize our XYPlot reference:
- mySimpleXYPlot = (XYPlot) findViewById(R.id.binomial);
- series1.setModel(series1Numbers, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
- series2.setModel(series1Numbers, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
- // Create a formatter to use for drawing a series using
- // LineAndPointRenderer:
- BarFormatter series1Format = new BarFormatter(Color.rgb(200, 0, 0), // line
- // color
- Color.rgb(100, 100, 100)); // point color
- LineAndPointFormatter series2Format = new LineAndPointFormatter(
- Color.TRANSPARENT, // line
- // color
- Color.TRANSPARENT, Color.TRANSPARENT); // point color
- mySimpleXYPlot.addSeries(series2, series2Format);
- mySimpleXYPlot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, 5);
- // Add series1 to the xyplot:
- mySimpleXYPlot.addSeries(series1, series1Format);
- mySimpleXYPlot.addSeries(series2, series2Format);
- if (approx) {
- series2Format.setLinePaint(); // Blaue Linie
- } else {
- series2Format.setLinePaint(); // Transparente Linie
- }
- // Reduce the number of range labels
- mySimpleXYPlot.setTicksPerRangeLabel(3);
- // By default, AndroidPlot displays developer guides to aid in laying
- // out your plot.
- // To get rid of them call disableAllMarkup():
- mySimpleXYPlot.disableAllMarkup();
- mySimpleXYPlot.redraw();
- }
- public void onCheckedChanged(RadioGroup arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- public void onClick(View v) {
- }
- }
Add Comment
Please, Sign In to add comment