2015-07-19 40 views
-2

這個程序是爲了找到一個最大的除數在1到10000之間的數字。不管兩個數字是否都是最大的,但我們只打印一個。java初學者中異常棘手的情況

int integerWithMax =1; // first, 1 as integer with max divisor 
int maxDivisor = 1; // 1 has max divisor 
for (int i = 2; i <= 10000; i++) { 
    int j; 
    int divisorCount = 0; 
    for (j = 1; j < i; j++) { 
     if((i % j) == 0) { 
      divisorCount++; 
     } 
    } 
    if (divisorCount > maxDivisor) { 
     // maxDivisor = divisorCount; //why do I need this line if I need only integerWithMax 
     integerWithMax = i; 
    } 
} 
System.out.print("The integer with max divisor is "+integerWithMax); 

這裏的問題是,如果我取消maxDivisor它會給正確的整數,maxDivisor = 7560但如果我評論它,integerWithMax將輸出10000

問題是爲什麼我應該分配到maxDivisor如果我必須找到最大除數的整數,即integerWithMax

+0

請更改您的標題以反映實際問題。 –

+2

紙,筆,可能是個好主意最初! –

回答

0

此代碼查找具有最多除數的1到10000之間的數字。我已經評論了代碼,以便您能夠理解正在發生的事情。

int integerWithMax = 1; // say that 1 is the integer with most divisors 
int maxDivisor = 1; // 1 has only a single divisor, itself 

for (int i = 2; i <= 10000; i++) { // test each integer 2-10000 
    int j; 
    int divisorCount = 0;  // keep track of the number of divisors for integer i 
    for (j = 1; j < i; j++) { // for each number smaller than i 
     if((i % j) == 0) { // if j is a divisor 
      divisorCount++; // increment the count of divisors 
     } 
    } 
    // if my integer has a higher number of divisors than have previously been seen 
    if (divisorCount > maxDivisor) { 
     maxDivisor = divisorCount; // keep track of the new highest number of divisors 
     integerWithMax = i;  // keep track of the integer 
    } 
} 
System.out.print("The integer with max divisor is "+integerWithMax); 

如果您註釋掉maxDivisor = divisorCount;那麼if語句總是問「這是否整數有一個以上的除數?」,這是對於不是全素的所有數字屬實。