2014-10-09 31 views
1

這就是我目前爲止所做的;我必須使用這個主要方法。如果整數可以被3整除,則該方法返回true,如果整數不能被3整除,則返回false

public class HW4 { 

    public static boolean isDivisibleByThree(String n) { 
     int sum = 0; 
     int value; 

     for (int k = 0; k < n.length(); k++) { 
      char ch = n.charAt(k); 
      value = Character.getNumericValue(ch); 
      sum = sum*value; 
     } 
     return sum*3 == 0; 
    } 
} 

它總是成真,我真的被困在這部分。所以如果可以的話,你能幫助我嗎?

+0

難道你不允許使用'%'的要求運營商? – vsz 2014-10-09 06:03:11

+0

只要我使用這個公共靜態布爾isDivisibleByThree(String n) – Bob 2014-10-09 06:05:18

+0

它可以被3整除;現在的問題是,如果它是一個負整數,它應該永遠是錯誤的...任何人都知道? – Bob 2014-10-09 06:15:29

回答

0

兩件事情:

  1. sum = sum * value?這也許應該是sum = sum + value,或短sum += value
  2. sum * 3 == 0也許應該sum % 3 == 0

如果要求不使用%運營商,你可以交替做:

double check = (double)sum/3.0; 
return check == (int)check; 

的負數的問題是-也被解析,你可以通過放棄它來解決它:

if (n[0] == '-') { 
    n = n.substring(1); 
} 

如果符號爲負值,則會丟棄符號,否則不執行任何操作。

0

要容易得多的解決方案:使用MOD功能:

int number = int.Parse(input); 
bool result = (number % 3 == 0); 
+0

用戶不允許在他的方法中使用「%」運算符。 – ThreeFx 2014-10-09 06:11:36

+0

@ThreeFx:誰說的? – vsz 2014-10-09 06:34:28

+0

@vsz Bob的評論關注你自己的問題。 – ThreeFx 2014-10-09 06:35:17

0

除非我失去了一些東西,你會首先使用Integer.parseInt(String)String解析int。然後你可以用整數除3。最後,測試這個數字乘以3是否是原始數值。

int value = Integer.parseInt(n); 
int third = value/3; 
return (value == third * 3); 
1

總和是一個累積此外(未倍增)。

改變這一行:

sum = sum * value; 

sum = sum + value; 

還是比較簡單的版本:

sum += value; 
相關問題