2015-12-02 56 views
0

我需要找到A和B值小於100的所有pygotgorean三元組(a^2 + b^2 = c^2)。我的代碼不會給我正確的輸出。任何人都可以告訴我,我的代碼出了什麼問題,而不是寫正確的代碼?在java中列出所有pygodorean三元組

public static void main(String[] args) { 

    int sum = 0; 

    for (int num1 = 1; num1 <= 100; num1++) { 
     for (int num2 = 1; num2 < 100; num2++) { 
      if (PerfectSquare(num1, num2, sum)) { 
       System.out.println(num1 + " " + num2); 
      } 
     } 
    } 
} 

public static boolean PerfectSquare(int number1, int number2, int sum) { 

    int square1; 
    int square2; 
    double root; 
    int sum1; 

    number1 = (int) ((99 - 1 + 1) * Math.random() + 1); 
    number2 = (int) ((99 - 1 + 1) * Math.random() + 1); 

    square1 = (int) Math.pow(number1, 2.0); 
    square2 = (int) Math.pow(number2, 2.0); 
    sum = square1 + square2; 
    root = Math.sqrt(sum); 
    sum1 = (int) Math.pow(root, 2.0); 

    if (!(sum == sum1)) { 
     return false; 
    } 

    return true; 
} 
+8

一件事,你將要覆蓋'number1'並與隨機數'number2'參數。 –

回答

1

你用隨機數字覆寫number1number2參數:

number1 = (int) ((99 - 1 + 1) * Math.random() + 1); 
number2 = (int) ((99 - 1 + 1) * Math.random() + 1); 

你還不如不經過任何價值可言進入方法,如果你做到這一點。刪除這些行。

此外,您還需要您的平方根四捨五入到整數:

root = (int) Math.sqrt(sum); 

否則你將結束與相同數量的,當你再次將其平方。

不相關的正確性

其他景點:

  • 你能夠勇敢地正視整數,而無需通過他們與自己相乘投:

    square1 = number1 * number1; 
    
  • 此:

    if (! (sum==sum1)) { 
    

    更容易寫爲

    if (sum != sum1) { 
    
  • sum方法參數是不必要的。將其聲明爲局部變量。

  • 你並不需要循環所有對num1num2,因爲如果(num1, num2)是畢達哥拉斯三重的對面,相鄰的邊,然後(num2, num1)顯然太(同樣,如果num1num2都沒有,那麼num2num1也不是)。因此,您可以用更少的檢查組合:

    for (int num1 = 1; num1 <= 100 ; num1++) { 
        for (int num2 =1; num2 <num1; num2++) { 
    
+0

我終於明白了。謝謝! – bt203

相關問題