2013-10-30 78 views
1

我寫了這兩種方法來確定一個數是否完美。我的教授想讓我把他們結合起來,看看是否有一個奇數的完美數字。我知道沒有一個(這是已知的),但我需要實際編寫代碼來證明這一點。找到一個奇數的完美數

這個問題與我的主要方法。我測試了兩種測試方法。我嘗試過調試,它被卡在數字5,但我不明白爲什麼。這裏是我的代碼:

public class Lab6 
{ 
public static void main (String[]args) 
{ 
    int testNum = 3; 

    while (testNum != sum_of_divisors(testNum) && testNum%2 != 2) 
    testNum++; 

} 

public static int sum_of_divisors(int numDiv) 
{ 
    int count = 1; 
    int totalDivisors = 0; 

    while (count < numDiv) 
    if (numDiv%count == 0) 
    { 
     totalDivisors = totalDivisors + count; 
     count++; 
    } 
    else 
    count++; 

    return totalDivisors; 
} 

public static boolean is_perfect(int numPerfect) 
{ 
    int count = 1; 
    int totalPerfect = 0; 

    while (totalPerfect < numPerfect) 
    { 
    totalPerfect = totalPerfect + count; 
    count++; 
    } 
    if (numPerfect == totalPerfect) 
    return true; 
    else 
    return false; 
} 
} 
+0

當你說「調試」,你的意思是實際上使用調試器?一個調試器應該告訴你程序卡在哪個方法中。 – chrylis

+1

你在這個代碼中沒有使用is_perfect –

+0

'testNum%2'是'0'或'1',從不'2'。 – Teepeemm

回答

2

testNum%2 != 2 

testNum%2 != 0 
+0

啊,謝謝。 – coinbird

+0

如果你不介意我問,這個問題如何解決?東西模數2永遠不會等於2,那麼如何使這個停止在5而不是堆棧溢出? – zgc7009

+0

@ zgc7009,我不確定爲什麼@CoinBird說它停在'5'。我相信它實際上停在了'6'(第一個完美的數字,雖然不是奇數)。 –

0
testNum=3 
while (testNum != sum_of_divisors(testNum) && testNum%2 != 2) 
    testNum++; 

你可能想要做 'testNum + = 2',因爲你所關心的只是奇數和用testNum> 0或其他停止條件替換testNum%2!= 2。最終你的整數會溢出。 「我的教授想讓我把他們結合起來,看看是否有一個奇數的完美數字,我知道沒有一個(這是已知的),但我需要真正寫出代碼來證明這一點。」

您的意思是3 & 2^32-1?不知道沒有奇怪的完美數字。