wangyao5 / achartengine

Automatically exported from code.google.com/p/achartengine
0 stars 0 forks source link

Application crashing when graph is called upon. #120

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
I wrote a practice app that solves quadratic equations and now I want to have 
the option to graph them with a button. Yet when I press the button the 
application crashes. Here is the code for the main program and the graphing 
one(located beneath):
Main class: *note: I do have the necessary classes inmported and the .jar.
package com.test.quad;
import java.text.DecimalFormat;

import java.util.List;
import android.util.Log;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import android.view.View;

import android.widget.Button;
import android.widget.EditText;

import android.widget.TextView;

public class QuadraticActivity extends Activity  {
    Button reset;
    Button solve;
    Button grapher;
    TextView labela1;
    TextView b1label;
    TextView c1label;
    TextView result1;
    TextView result2;
    EditText a1;
    EditText b1;
    EditText c1;
    public List<double[]> x,y;
    public double a, b, c;
    public double xStart = 0, xEnd = 0;
    public double xCurrent;
    double yCurrent;
    public double xStep;
    public int count = 100;
    Graph g = new Graph();

    /** Called when the activity is first created. */

    public  void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        labela1 = (TextView)this.findViewById(R.id.labela1);
        b1label = (TextView)this.findViewById(R.id.b1label);
        c1label = (TextView)this.findViewById(R.id.c1label);
        result1 = (TextView)this.findViewById(R.id.result1);
        result2 = (TextView)this.findViewById(R.id.result2);

        a1 = (EditText)this.findViewById(R.id.a1);
        b1 = (EditText)this.findViewById(R.id.b1);
        c1 = (EditText)this.findViewById(R.id.c1);

        solve = (Button)this.findViewById(R.id.solve);

        reset = (Button)this.findViewById(R.id.reset);

        grapher = (Button)this.findViewById(R.id.grapher);
    }
    public void onClickHandler(View v) {
switch(v.getId()){

case R.id.reset:
            a1.setText("");
            b1.setText("");
            c1.setText("");
            result1.setText("");
            result2.setText("");
            a=0;
            b=0;
            c=0;
        break;
case R.id.solve:
            solveEquation();
        break;

case R.id.grapher:
         Intent achartIntent = new Graph().execute(this);

             startActivity(achartIntent);
             Log.d("debug", "clicked" );
     break;
        }

    }

    protected void solveEquation() {

        try{
             a = Double.parseDouble(a1.getText().toString());
             b = Double.parseDouble(b1.getText().toString());
             c = Double.parseDouble(c1.getText().toString());
        }
            catch (NumberFormatException exception) {
                result1.setText("Please enter a number");
                result2.setText(" ");
            }
        finally{}

        if (a==0 && b==0 && c==0){
            result1.setText(" ");
            result2.setText(" ");
        }
        else{
        double  yy, xx,x1, x2, x3;
        double disc = (( b * b) - (4 * a * c));

        DecimalFormat fmt = new DecimalFormat("0.###");

        if (disc > 0){
            double solution1 = ((-1 * b) - Math.sqrt(disc)) / ( 2 * a);
            double solution2 = ((-1 * b) + Math.sqrt(disc)) / (2 * a);
            result1.setText("Solution #1: " + fmt.format(solution1));
            result2.setText("Solution #2: " + fmt.format(solution2));

            if (solution1 < solution2){
                xStart = solution1 - 5;
                   xEnd = solution2 + 5; 
            }
            else{
                 xStart = solution2 - 5;
                   xEnd = solution1 + 5; 
            }
        }
        else if (disc == 0){
            double oneSol = (-1 * b) / ( 2 * a);
            result1.setText("One Solution: " + fmt.format(oneSol));
            result2.setText("");
            xStart = oneSol - 5;
            xEnd = oneSol + 5;
        }
        else{
            yy = (-1 * b) / (2 * a);
            xx = ((b * b) - (4 * a * c));
            x1 = Math.abs(xx);
            x2 = Math.sqrt(x1);
            x3 = (x2) / (2 * a);
            result1.setText("Imaginary Solution #1: " + fmt.format(yy) + " - " + fmt.format(x3)+"i" );
            result2.setText("Imaginary Solution #2: " + fmt.format(yy) + " + " + fmt.format(x3)+"i" );
            xStart = (((-1 * b) - (x2)) / ( 2 * a)) - 5;
            xEnd = (((-1 * b) + (x2)) / (2 * a)) + 5;
        }

    }
    }

    }
and the graph code:
package com.test.quad;

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.renderer.XYMultipleSeriesRenderer;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;

/**
 * Quadratic
 */
public class Graph extends AbstractDemoChart {
  /**
   * Returns the chart name.
   * @return the chart name
   */
  public String getName() {
    return "Quadratic Functions";
  }

  /**
   * Returns the chart description.
   * @return the chart description
   */
  public String getDesc() {
    return "Quadratic Graph";
  }

  /**
   * Executes the chart demo.
   * @param context the context
   * @return the built intent
   */
  public Intent execute(Context context) {
    String[] titles = new String[] { "Function" };
    List<double[]> x = new ArrayList<double[]>();
    List<double[]> values = new ArrayList<double[]>();
    QuadraticActivity c = new QuadraticActivity();

   double range = c.xEnd - c.xStart;
    double step = .01 * range;
    int count = 110;
    double xCurrent = c.xStart;
    double[] xValueArr = new double[count];
    double[] yValueArr = new double[count];
   values.add(xValueArr);
   values.add(yValueArr);

    for (int ii=0; xCurrent <= c.xEnd; xCurrent += step, ii++) {
        double yCurrent = (c.a)*Math.pow(xCurrent, 2) + (c.b)*xCurrent + (c.c);
        xValueArr[ii] = xCurrent;
        yValueArr[ii] = yCurrent;

    }
    System.out.println(x);
    int [] colors = new int[] { Color.BLUE };
    PointStyle[] styles = new PointStyle[] { PointStyle.POINT };
    XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
    setChartSettings(renderer, "Graph of Quadratic Equation", "X", "Y", 0, 360, -1, 1,
        Color.GRAY, Color.LTGRAY);
    renderer.setXLabels(20);
    renderer.setYLabels(10);
    return ChartFactory.getLineChartIntent(context, buildDataset(titles, x, values), renderer);
  }

}

Original issue reported on code.google.com by Okelly4...@gmail.com on 16 Aug 2011 at 10:53

GoogleCodeExporter commented 9 years ago
Not compilable code.

Original comment by dandrome...@gmail.com on 23 Aug 2011 at 12:20