2014-07-20 62 views
0

這是我目前正在製作的計算器程序的一部分,這部分決定了b是否是a的一個因子。另外我是Java的新手,這使得我第三天學習它的語法。無論如何,我想知道哪種方法更有效地確定b是否是a的一個因子。它是模數運算符(%)還是我的第二個方法?確定b是否是一個因子的有效方法?

如果還有比我提出的兩種方法更有效的方法,請顯示。

// for now I want the result to print out in the console 
public class factornot { 
    public static void main(String args[]) { 
     int a = 56, b = 3; // just for testing purposes! 
     if((a != 0) && (a % b) == 0) System.out.println(b + " is a factor of " + a); 
     else System.out.println(b + " is not a factor of " + a); 
     // short-circuit and prevents a divide by zero error! 


     // is this better or worse, faster or slower ??? 

     int d = (a/b), e = (d * b); 
     if((a - e) == 0) System.out.println(b + " is a factor of " + a); 
     else System.out.println(b + " is not a factor of " + a);   
     } 
    } 
+0

你應該發佈這個:http://codereview.stackexchange.com/ –

+0

我猜想第一個更快,因爲大多數或所有的處理器這些天有一個內置的模數指令,所以他們不需要除以然後乘。但這只是一個猜測。你必須做一個實驗才能確定。無論如何,使用'%'更具可讀性。 – ajb

+0

你不需要檢查'a!= 0'。我們認爲每個數字都是「0」的因素。 –

回答

1

不能有太大的區別,只要基本的計算都在關注。爲了確定一個== 0 mod b,必須執行一個除法,並通過減法計算餘數。

但是,運算符%爲編譯器提供了在「底層」下完成所有操作的機會,而不需要第二個版本的存儲和提取(可能優化爲任何可能的快捷方式)。

此外:代碼越少,發生錯誤的可能性就越小。直接的方式提供了良好的可讀性。

0

你寫的第一個方法稍微好一點,但老實說,它不會在速度或效率方面產生顯着的差異。另外我會建議不要在你的if語句上省略大括號,並把這些語句放在一個新行中,你所採用的方法被認爲是不好的形式,根據Oracle的代碼約定,雖然我從來沒有見過錯誤結果這個。

僅供參考代碼Conventions for Java

相關問題