JAVA编写一个关于一元二次方程根的类

如题所述

第1个回答  2010-05-08
import javax.swing.JOptionPane;
import java.text.DecimalFormat;

public class Exam2_2
{
public static void main(String args[])
{
double a,b,c;//方程的三个参数
String result;//显示结果,数值保留三位小数

DecimalFormat df = new DecimalFormat("###,###.###");

a = Double.parseDouble(JOptionPane.showInputDialog("请输入a的值"));
b = Double.parseDouble(JOptionPane.showInputDialog("请输入b的值"));
c = Double.parseDouble(JOptionPane.showInputDialog("请输入c的值"));

if(a==0)
{
if(b==0)//没有未知数
{
result = "输入有误!";
}
else//一元一次方程
{
//result = "该方程有一个实数根:\n"+(-c/b);
//result = "该方程有一个实数根:\n"+Math.round(-c/b*1000)/1000.0;

result = "该方程有一个实数根:\n"+df.format((-c/b));
}
}
else
{
double delta;
delta = b*b-4*a*c;

if(delta>0)
{
//double x1,x2;
//x1 = (-b+Math.sqrt(delta))/2/a;
//x2 = (-b-Math.sqrt(delta))/2/a;
//x1 = Math.round((-b+Math.sqrt(delta))/2/a*1000)/1000.0;
//x2 = Math.round((-b-Math.sqrt(delta))/2/a*1000)/1000.0;

String x1,x2;
x1 = df.format((-b+Math.sqrt(delta))/2/a);
x2 = df.format((-b-Math.sqrt(delta))/2/a);
result = "该方程有两个不相等的实数根:\n"+x1+"\n"+x2;
}
else if(delta==0)
{
//double x;
//x = -b/2/a;
//x = Math.round(-b/2/a*1000)/1000.0;

String x;
x = df.format(-b/2/a);
result = "该方程有两个相等的实数根:\n"+x;
}
else
{
String x1,x2;
//x1 = -b/2/a+"+"+Math.sqrt(-delta)/2/a+"i";
//x2 = -b/2/a+"-"+Math.sqrt(-delta)/2/a+"i";
/*x1 = Math.round(-b/2/a*1000)/1000.0
+"+"
+Math.round(Math.sqrt(-delta)/2/a*1000)/1000.0
+"i";
x2 = Math.round(-b/2/a*1000)/1000.0
+"-"
+Math.round(Math.sqrt(-delta)/2/a*1000)/1000.0
+"i";*/

x1 = -b/2/a+"+"+df.format(Math.sqrt(-delta)/2/a)+"i";
x2 = -b/2/a+"-"+df.format(Math.sqrt(-delta)/2/a)+"i";
result = "该方程有两个不相等的复数根:\n"+x1+"\n"+x2;
}
}

JOptionPane.showMessageDialog(null, result, "解", JOptionPane.INFORMATION_MESSAGE);

System.exit(0);
}
}
相似回答