2013-05-04 31 views
0

這是我的主類:我收到的NaN的答案,我二次方程calculator- JAVA

import java.util.Scanner; 

public class calc { 
public static void main(String[] args){ 
    Scanner variablea = new Scanner(System.in); 
    Scanner variableb = new Scanner(System.in); 
    Scanner variablec = new Scanner(System.in); 
    int a1, b1, c1; 
    System.out.println("enter your 'A' variable"); 
    a1 = variablea.nextInt(); 
    System.out.println("enter your 'B' variable"); 
    b1 = variableb.nextInt(); 
    System.out.println("enter your 'C' variable"); 
    c1 = variablec.nextInt(); 

    algorithm algorithmObject = new algorithm(); 
    algorithmObject.algorithm(a1, b1, c1); 

} 

} 

,這是第二個

 public class algorithm{ 
public void algorithm(int a, int b, int c){ 
    double x1; 
    double square = Math.sqrt(b*b - 4*a*c); 
    double numerator = b*-1 + square; 
    double finalanswer = numerator/2*a; 

    System.out.println(finalanswer); 
} 

}

的Eclipse沒有按給我任何錯誤,但在它要求我的3個變量並輸入它們之後,它只是給了NaN。任何想法我做錯了什麼?

+1

NaN不是數字 - 如果有幫助 – 2013-05-04 18:47:28

+0

您可以將'b * -1'更改爲'-b',看起來更清潔 – nullptr 2013-05-04 18:49:51

+0

注意:我不是Java專家,但它確實需要使用三臺掃描儀? – 2013-05-04 18:55:16

回答

1

沒有與代碼問題,但罪魁禍首是最有可能這一行:

double square = Math.sqrt(b*b - 4*a*c); 

如果b*b - 4*a*c是負的(沒有方程的解),那麼平方是NaN,涉及這將是每一個計算NaN也是如此。你可以檢查它here


你可以先檢查是否b*b - 4*a*c < 0提高你的計算器,如果是這樣,那麼你可以寫,有沒有真正的解決方案(當然停止計算有)的控制檯。


我會改變,當你最不經意的時候,我看不出有任何理由abc應該被約束int -s public void algorithm(int a, int b, int c)

public void algorithm(double a, double b, double c) 

的整數運算可以令你大吃一驚。


好的,希望對此有所幫助。

+0

,所以我該如何解決它?大聲笑對不起,我buffoonishness – user2350474 2013-05-04 19:40:50

+0

@ user2350474請檢查我更新的答案。 – Ali 2013-05-04 19:44:53

+0

我想我明白了。我爲sqrt裏面叫做根的東西做了一個單獨的變量。我做了這個絕對值,然後平方。 double x1; \t \t double root = Math.abs(b * b-4 * a * c); \t \t double square = Math.sqrt(root); – user2350474 2013-05-04 19:50:26

0

由於這看起來有點家庭作業,我只給出一個提示:

NaN是什麼數學函數返回時,結果不能準確地表示了一些因爲某些原因,無論是技術或數學。

+0

這就是我作爲一個評論 - 我不太確定,如果我應該把這個數字看作是一個答案 – 2013-05-04 18:49:39

+0

@ScottSelby True - 直到我已經發布這個消息,我纔看到您的評論。儘管如此,答案應該足以幫助海報出來,同時仍然讓他學習一些東西。至少,這是主意。 – 2013-05-04 18:52:06

+0

我甚至都不在學校。我只是一個使用新波士頓java教程的青少年,我只是在玩弄我學到的東西 – user2350474 2013-05-04 19:34:26

1

有幾種特殊情況需要注意。你似乎不看任何人:

y = a*x^2 + b*x + c 
  1. 如果二次項係數a是零的話,只有一個根,因爲方程是線性的:y = b*x + c
  2. 如果線性係數b是零,有兩個根:[x1, x2] = +/-sqrt(c)
  3. 如果常量係數c爲零時,根源之一是零且另一個是-b/a

如果判別式爲負數,則有兩個複共軛根。

有趣的是,所有這些情況對阻尼諧波運動和L-C-R電路等物理問題的解決方案都有意義。你也應該學習一些關於這些的東西。