0

方法に問題がありtestPerfectます。因子を計算して配列に入れ、数値が完全かどうかのブール値を返すためにtrue必要falseです。今のところ、配列は 1,2,3...5,6,7... を取得しているだけで、チェックするために入力された数字は何でも構いません。助言がありますか?

import java.util.Arrays;
import java.util.Scanner;

public class moo_Perfect
{
public static void main ( String args [] )
{
    int gN;
    int gP = getPerfect();
    int [] array = new int[100];
    boolean tP = testPerfect(gP, array);
    //int printFactors;
    System.out.println(Arrays.toString(array));
}


public static int getNum() //Get amount of numbers to check
{
Scanner input = new Scanner ( System.in );
System.out.print( "How many numbers would you like to test? " );
int count = input.nextInt();
int perfect = 1;
boolean vN = validateNum(count, perfect);
while(!vN)
{
    System.out.print (" How many numbers would you like to test? ");
    count = input.nextInt();
    vN = validateNum(count, perfect);
}
return count;
}   

public static boolean validateNum( int count, int perfect  ) //Check if number is valid
{
if (( count <= 0) || ( perfect <= 0))

{ 
    System.out.print( "Non-positive numbers are not allowed.\n");
}



else 
{
    return true;
}
return false;


}
public static int getPerfect() //Gets the numbers to test
{
Scanner input = new Scanner ( System.in );
int perfect = -1;
int count = getNum();
System.out.print("Please enter a perfect number: " );
perfect = input.nextInt();  
boolean vN = validateNum(perfect, count);
while (!vN) 
{
    System.out.print("Please enter a perfect number: ");
    perfect = input.nextInt();
    vN=validateNum(perfect, count);
}
return perfect;
}


public static boolean testPerfect( int perfect, int[] array )

{
//testPerfect(perfect, array);
int limit = perfect;
int index = 0;
for ( int i = 1; i <=limit; i++)
{
    array[index++] = i;
    perfect /= i;
}
array[index] = perfect;
int sum = 0;
for ( int i =0; i < array.length; i++)
{
    sum = sum + array[i];
}

if ( sum == perfect)
{
    int[] w = array;

    return true;        
}

else
{
    return false;
}


}
4

1 に答える 1

0

これはList、配列ではなく、 の仕事です (配列の長さが事前にわからないため、Lists がこれを処理します)。整数のリスト (たとえば ) をインスタンス化した後、最初の-loopfactorsの本体を次のように変更できます。for

if (perfect % i == 0) factors.add(i)

つまり、「i均等に分割される場合にのみ、因子のリストに追加しますperfect」.


編集配列を使用する必要がある場合は、これを行うことができます

array[i] = (perfect % i == 0) ? i : 0

これはi、分割する場合にのみ配列に配置されperfect、それ以外の場合は配置され0ます。したがって、この配列の要素の合計は の因数の合計と等しくなりperfectます。

于 2012-11-20T01:42:25.433 に答える