2017-08-15 49 views
1
import java.util.Scanner; 
public class FileOutputStreamExample 
{ 
    public static int count; 

    public void equation(int a, int b,int c) 
    { 

    int e=(b*b)-(4*a*c); 
    double f=Math.pow(e,1/2); 
    if(f>=0) 
     count=count++; 

    } 
public static void main (String []args) 
{ 
    FileOutputStreamExample fos= new FileOutputStreamExample(); 
    Scanner sc= new Scanner(System.in); 
    int N= sc.nextInt(); 
    for(int i=1;i<=N;i++) 
    { 
     int a= sc.nextInt(); 
     int b= sc.nextInt(); 
     int c= sc.nextInt(); 
     fos.equation(a, b, c); 
    } 

    System.out.println("ans is "+count); 
    } 
} 

這裏我寫了一個代碼來檢查是否給定了具有係數a,b,c的二次方程的N個輸入,然後有多少個給定的N個輸入具有實根。 此代碼編譯儘可能好,但始終會導致ans = 0。在這種情況下,計數不起作用。來檢查有多少個根是真實的

+2

count = count ++'沒有任何 - >'count = count + 1'或'count ++'only;)讀取後增量 – azro

+0

'count = count ++;'是無意義的 - 它將舊的count值存入臨時位置,遞增計數1並用舊值覆蓋它。或者寫'count = count + 1;'或'count ++;'或者甚至'count + = 1;' –

+0

如果b²-4∙a∙c小於零,根將會有一個非零的虛部。您也沒有像@yshavit指出的那樣正確計算平方根,但您不需要查看根是否是真實的 - 測試平方根的值是否爲負值與測試平方根的值是否更容易導致NaN –

回答

4

count=count++;

此行實際上什麼也不做。它會增加count,但它也會將值作爲表達式返回,然後存儲回count。由於++在最後,所存儲的值是count的原始值,因此會取消增量。 :)

使用增量(或減量)運算符時,不必使用賦值運算符來修改該值。增量本身意味着對變量的修改。

,改成修復它:count++;

除此之外,1/2將始終等於零,因爲操作數都是整數,並且同樣地,所施加的除法是一個整數除法(它截斷十進制部分),而不是你可能期望的部門。

改變,要1.0/2或只是.5

0

我不認爲你的代碼應該被編譯。您正在非靜態方法中調用一個靜態變量。 此外,要麼寫入計數++,count + = 1或count = count + 1。