2012-11-19 88 views
0

方法testPerfect應該從getPerfect接收一個數字,將數字因子分解並將數字放入數組中。 我目前有陣列打印,但全部爲零。任何建議將數字的因素放入數組中?將因子分解爲數組

public class aermel_Perfect 
{ 
public static void main (String args []) 
{ 
    int gN; 
    int gP = getPerfect(); 
    int [] array = new int[100]; 
    //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 int[] testPerfect(int perfect, int[] array) 

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

return array; 


} 






} 
+0

這是一些混亂。你的'testPerfect()'永遠不會被調用。而且你得到了一個'0..0'的數組,因爲在你的main中你剛剛創建了一個新的數組並且打印了它。 –

+0

正如我經歷了你的代碼,你只是聲明數組,並打印數組本身。您不會將讀取的完美數字存儲到數組中。存儲您的完美數字,然後打印數組。你在哪裏叫testPerfect(); –

回答

1

這樣的事情可能嗎? 首先,您需要撥打電話testPerfect(),從getPerfect()收到的gParray作爲參數。 其次,您需要刪除調用testPerfect(),這是方法testPerfect()的第一行,否則這會導致無限遞歸調用。

public class aermel_Perfect 
{ 
public static void main (String args []) 
{ 
    int gN; 
    int gP = getPerfect(); 
    int [] array = new int[100]; 
    array=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 int[] testPerfect(int perfect, int[] array) 

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

return array; 


} 






} 
+0

@ user1834819,Wc –