2015-10-13 51 views
0

我編寫的是一個非常簡單的二次方程求解器,但即使平方根爲正值,答案也保持不變(我使用的例子是1x^2 + 5x + 6,其中b^2 = 25和4 * a * c = 24),但它仍然是南。請幫忙。二次方程求解器nan平方根正數

import java.util.*; 
import java.lang.Math; 
public class HelloWorld { 
     public static void main (String[] args){ 
     System.out.println ("type quadratic equation please use format ax^2+/-bx+/-c"); 
Scanner userInput=new Scanner(System.in); 
String userEquation=userInput.next(); 
char a=(userEquation.charAt(0)); 
char b=(userEquation.charAt(5)); 
char c=(userEquation.charAt(8)); 
System.out.println(a); 
System.out.println(b); 
    System.out.println(c); 
    double p1=4*a*c; 
    double p2=2*a; 
    double p3=-b; 
    double p4=b*b; 
    double p5=p4-p1; 
    double p6=Math.sqrt(p5); 
    double pa7=-b+p6; 
    double pb7=-b-p6; 
    double pa8=pa7/2*a; 
    double pb8=pb7/2*a; 
    System.out.println("x1= "+pa8+ " x2="+pb8); 
} 
} 
+0

最好向用戶提供3個輸入,而不是依賴他輸入正確的方程式格式,但這與您的問題無關;) –

+2

只需打印您的臨時變量,您就會看到問題。提示:'char'!='int'或'double'。 –

+3

節省大量時間並熟悉使用調試器。幾乎任何IDE都有一個,它們非常易於使用。調試器允許您逐行執行程序並檢查所有變量的值。例如,您會立即注意到程序中的「a」是「49」而不是「1」。 – WhiteViking

回答

2

你永遠不分析你chardouble做數學。

試試這個:

double a=Double.parseDouble(userEquation.charAt(0)+""); 
double b=Double.parseDouble(userEquation.charAt(5)+""); 
double c=Double.parseDouble(userEquation.charAt(8)+""); 

這改變了你的變量類型double這樣你就可以繼續與您的代碼和做數學題。

我同意@Gaël的評論。爲您的其他變量(p1,p2等)添加一個打印語句,並注意當您將變量a,bc作爲類型char或類型double時的差異。

+0

事實上,字符'0'的值爲'48',所以如果你想做數學,首先將'char'轉換爲'int'或'double'。 –

+0

感謝您的進一步意見@Gaël。 – gonzo

+0

thx尋求幫助 – Ggu