2014-09-19 58 views
0

我有一個做二次公式。當我構建文件時沒有錯誤,但是當我運行該項目時,輸出是Nan。我知道這是「不是一個數字」,但我不知道如何解決它。二次公式java NaN?

import java.io.*; 
class cuadratica 
{ 
    public static void main(String [] args) throws IOException 
    { 
     cuadra obj=new cuadra(); 
     System.out.println("5. Calcular la ecuación cuadrática (ax^2 + bx + c) "); 
     obj.cal(); 
    } 
} 

class cuadra 
{ 
    void cal() throws IOException 
    { 
     String x; 
     int a; 
     String w; 
     int b; 
     String t; 
     int c; 
     int g; 
     int f; 
     double num3; 
     double num2; 
     double q; 
     InputStreamReader isr = new InputStreamReader(System.in); 
     BufferedReader br = new BufferedReader(isr); 
     System.out.println("Inserte el primero numero (ax^2)"); 
     x=br.readLine(); 
     a=Integer.parseInt(x); 
     System.out.println("Inserte el segundo numero (bx)"); 
     w=br.readLine(); 
     b=Integer.parseInt(w); 
     System.out.println("Inserte el tercer numero (c)"); 
     t=br.readLine(); 
     c=Integer.parseInt(t); 
     g=(b*b)-(4*a*c); 
     q=Math.sqrt(g); 
     if (a!=0||g>0) 
     { 
      num2 = (-b+q)/(2*a); 
      num3 = (-b-q)/(2*a); 
      System.out.println("La raiz son "+num2+" y "+num3); 
     } 
     else 
     { 
      System.out.println("error"); 
     } 
    } 
} 
+0

搜索關於'Scanner'類。 – Mephy 2014-09-19 03:15:54

回答

0

當解二次方程ax^2 + bx + c = 0實係數,該方程的根將分爲以下類別之一:

  1. 兩個實根
  2. 反覆實根
  3. 兩個複雜根

我已經試過你的程序,它提供了正確的溶液F或案件a = 1, b = 2, c = 1,但NaNa = 1, b = 1, c = 1。爲了解決您的邏輯錯誤,您必須檢查判別式b^2 - 4ac(代碼中的變量g)爲非負數在取平方根之前(當判別式爲負時,它對應於上面的情況3) 。否則,當取一個負數的平方根時,你會得到NaN

+0

是的,你是正確的我刪除q = Math.sqrt(g);和上式部件添加也ÿ變化:如果(α= 0 ||克> 0!)爲(A = 0 &&克> 0!) 現在proyect運行 – 2014-09-19 04:13:39