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 imported 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);
}
}
Add the the activity GraphicalActivity
to the manifest file:
<activity android:name="org.achartengine.GraphicalActivity" />
精彩评论