2016-10-22 4 views
0

私はブール値法を使って完全な数値を見つけるためにJavaコーディングに問題があります。私はこのように印刷したい: 例: '6は完璧な数字です。 6は、1,2,3 'の合計です それ以外の場合: ' 9は完璧な数字ではありません 'ブール値を使って完璧な数値を調べる

しかし、私は6のコーディング方法を知りません。1,2,3 "誰でも助けてくれますか?ここで は私のコーディングです:

import java.util.Scanner; 

public class trial 
{ 
    public static void main(String[] args) 
    { 
     // TODO Auto-generated method stub 

     Scanner perfect = new Scanner(System.in); 
     System.out.print("Enter any integer number : "); 
     int n = perfect.nextInt(); 

     if(isPerfectNumber(n)) 
     { 
      System.out.println(n+" is a perfect number"); 

     } 
     else 
     { 
      System.out.println(n+" is not a perfect number"); 
     } 
    } 

    public static boolean isPerfectNumber(int n) 
    { 
     int sum = 0; 
     for (int i=1; i<n; i++) 
     { 
      if (n%i == 0) 
      { 
       sum = sum + i; 
      } 
     } 
     if (sum == n) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

答えて

1

さて、あなたはすでにif (n%i == 0)行ごとに、数の要因を取得する方法をを知っています。

これは、ほぼ確実にクラスワークなので、ヒントです。

同じ時点で合計に係数を追加すると、それを何らかの説明のリストに追加し、それを呼び出し元の関数で使用できるようにする必要があります。

リストを返す可能性があり、2番目以降の要素は指定された数のすべての要素であり、最初の要素はそれらの合計です。

ので、6のために、あなたは12があなたに{16, 1, 2, 3, 4, 6}を与えるだろう、と7はあなたに{7, 1}を与えるだろう、リスト{6, 1, 2, 3}になるだろう。

そのようにすれば、元の番号を最初の要素と照合し、等しい場合は他の要素を印刷するだけです。つまり、擬似コードなどで:弾性率がtrueの場合、forループでよく

input num 
factorList = getFactorList(num) 
if factorList[0] == num: 
    print num, " is perfect, factors are:" 
    for idx = 1 to factorList.size() - 1 inclusive: 
     print " ", factorList[idx] 
    println "." 
else: 
    println num, " is not perfect." 
0

条件あなたはiは何とか軌道に保つ必要がある知っていれば。

だから、 は整数のarraylistを宣言して総和の数を記録します。さて

ArrayList<Integer> numbs = new ArrayList<Integer>(); 

public static boolean isPerfectNumber(int n) 
{ 
     int sum = 0;    
     for (int i=1; i<n; i++) 
     { 
      if (n%i == 0) 
      { 
       numbs.add(i); //here keep track of those summation numbers 
       sum = sum + i; 
      } 
     } 
     if (sum == n) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
} 

印刷中に、あなたは

System.out.println(n + " is a perfect number. " + n + " is sum of " + StringUtils.join(numbs, ",")); 

のように行うことができますのStringUtilsをインポートすることを忘れないでください:import org.apache.commons.lang3.StringUtils commons-lang3ライブラリを。

+0

:その後、両方が要因が含まれており、nが完全であるかどうかを判断するために使用することができ、単一の結果を持っていますか?コードは次のようになります。 – FAT

+0

import java.util.Scanner; import org.apache.commons.lang3。StringUtils; パブリッククラステスト {\t公共の静的な無効メイン(文字列[]引数) \t {\t \t // TODO自動生成方法スタブ \t \t ArrayListの numbsは=新しいArrayListを()。 \t \tスキャナ完璧=新しいスキャナ(System.in); \t \t System.out.print( "任意の整数を入力してください:"); \t \t int n = perfect.nextInt(); \t \t \t \t IF(isPerfectNumber(N)) \t \t { \t \t \tするSystem.out.println(N + "完全数です")。\t \t \t "System.out.println(n +"は "+ StringUtils.join(numbs、"、 "))の合計です。他 \t \t} \t \t \t \t { \t \tするSystem.out.println(N + "完全数ではありません")。 \t \t} \t} – FAT

+0

パブリック静的ブールisPerfectNumber(int型N) \t {\t \t INT和= 0。 (; iがN <; I = 1をint型私は++)のため \t \t \t \t { \t \t \t(N%I == 0) \t \t \t { \t \t \t \t numbs.add(I)であれば、 \t \t \t \t合計= sum + i; \t \t \t} \t \t} \t \t(和== N) \t \t { \t \t \tリターン場合はtrue;偽他 \t \t} \t \t \t \t { \t \t \tリターン。 \t \t \t } – FAT

1

私はそれが完全数ではない場合nまたはnullを作る要因のListを返すようにisPerfectNumberを変更すると思います。私はあなたが私に何をすべきかを示唆しているんでしたが、なぜ私はまだ私のプログラムでいくつかのエラーを発見したん

public static void main(String[] args) { 
    Scanner perfect = new Scanner(System.in); 
    System.out.print("Enter any integer number : "); 
    int n = perfect.nextInt(); 

    List<Integer> factors = getPerfectFactors(n); 
    if (factors != null) { 
     System.out.println 
      (n + " is a perfect number. It's the sum of" + 
      factors.stream() 
        .map(String::valueOf) 
        .collect(Collectors.joining(", ")); 
    } else { 
     System.out.println(n+" is not a perfect number"); 
    } 
} 

public static List<Ingeger> getPerfectFactors(int n) { 
    int sum = 0; 
    List<Ingeger> factors = new LinkedList<>(); 
    for (int i = 1; i < n; i++) { 
     if (n % i == 0) { 
      sum += i; 
      factors.add(i); 
     } 
     if (sum > n) { // Early return optimization, not material to the solution 
      return null; 
     } 
    } 
    if (sum == n) { 
     return factors; 
    } else { 
     return null; 
    } 
} 
+0

なので、この問題を解決するにはブール法を使用する必要があります – FAT

関連する問題