我有一个问题,试图让从testperfect方法输出的数组正确打印,我知道我需要更改我的print语句但不确定如何(这句话是在最后一个方法printFactors)我需要它打印数组testperfect中的因子,但我不希望它打印0。我必须使用一个数组,并且数组的大小为100。
import java.util.Scanner;
public class name_perfect
{
public static void main ( String args [] )
{
int gN;
int gP = getPerfect();
int [] array = new int[100];
boolean tP = testPerfect(gP, array);
printFactors(gP, array, tP);
//System.out.println(Arrays.toString(array));
}
public static int getNum() //asks for how many numbers to test
{
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 ) //Checks if numbers input are 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() //asks for 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 ) //tests the numbers that were input
{
//testPerfect(perfect, array);
int limit = perfect;
int index = 0;
for ( int i = 1; i < limit ; i++)
{
if ( perfect % i == 0)
{ array[i]=i;}
}
array[index] = perfect;
int sum = 0;
for ( int i = 1; i < limit; i++)
{
sum = sum + array[i];
}
if ( sum == perfect)
{
//Something has to change the array here.
return true;
}
else
{
return false;
}
}
public static void printFactors(int perfect, int [] array, boolean tP )
{
if ( tP == true)
{
System.out.println (perfect + ":" + (Arrays.toString(array)));
}
else
{
System.out.println (perfect + ":" + "NOT PERFECT");
}
}
}
答案 0 :(得分:1)
为此你可以有两个解决方案。
1.使用任何排序技术或使用集合框架排序方法并对此数组进行排序然后, 遍历数组,如果元素为'0',则不打印。
for(int i=0;i<array.length;i++){
if(array[i]==0)
continue;
else
System.out.println(array[i]);
}
2.使用ArrayList。它使用灵活。将完美数字添加到此ArrayList并打印出来。它只包含添加的元素。
for(int i=0;arrayList.size();i++)
{
System.out.println(arrayList.get(i));
}
ArrayList最适合这个,因为,
无需初始化所需的元素数量。它使用灵活。添加元素时会扩展。无需担心尺寸。
答案 1 :(得分:0)
我认为以下程序适用于您的情况。
import java.util.ArrayList;
import java.util.Arrays;
public class TestArray {
private static void print(Integer[] array)
{
for(Integer el:array)
System.out.print(el + " ");
System.out.println("");
}
public static void main(String[] args) {
// Constructing an Integer array. You can use input-reader to fill the array
Integer[] array = new Integer[]{0,1,123,456,-89,0,-1,567,0,23,231,987,0,987654,0};
// printing the unsorted content
print(array);
// sorting the array
Arrays.sort(array);
// printing the sorted content, with '0' values in it
print(array);
//Converts the integer[] to ArrayList, so that i can easily remove elements with value '0'
ArrayList<Integer> arrayList = new ArrayList<Integer>(Arrays.asList(array));
// prints the arraylist
System.out.println(arrayList);
//removes the elements with value '0'
while(arrayList.contains(new Integer(0)))
arrayList.remove(new Integer(0));
System.out.println(arrayList);
// converting back to Integer[]
array = arrayList.toArray(new Integer[]{});
// prints to see that the final array is sorted and conatins no '0' values
print(array);
}
}
请测试并让我知道状态:)
输出
0 1 123 456 -89 0 -1 567 0 23 231 987 0 987654 0
-89 -1 0 0 0 0 0 1 23 123 231 456 567 987 987654
[-89, -1, 0, 0, 0, 0, 0, 1, 23, 123, 231, 456, 567, 987, 987654]
[-89, -1, 1, 23, 123, 231, 456, 567, 987, 987654]
-89 -1 1 23 123 231 456 567 987 987654
修改强>
我解决了你的问题。这是另一个使用int[]
并从中删除0
元素的示例。
import java.util.Arrays;
public class TestArray {
private static void print(int[] array)
{
for(int el:array)
System.out.print(el + " ");
System.out.println("");
}
public static void main(String[] args) {
// Constructing an Integer array. You can use input-reader to fill the array
int[] array = new int[]{0,1,123,456,-89,0,-1,567,0,23,231,987,0,987654,0};
// int[] array = new int[]{1,123,456,-89,-1,567,23,231,987,987654};
// int[] array = new int[]{1,123,456,-89,-1,567,23,231,987,987654,0};
// int[] array = new int[]{1,123,456,567,23,231,987,987654};
// printing the unsorted content
print(array);
// sorting the array
Arrays.sort(array);
// printing the sorted content, with '0' values in it
print(array);
// finds the starting and ending position of '0' elements in the sorted array
int startPos = -1;
int endPos = -1;
for(int i=0;i<array.length;i++)
{
if(array[i]==0 && startPos == -1) startPos = i;
if(array[i]==0) endPos = i;
}
System.out.println("startPos : " + startPos + " endPos : " + endPos);
int[] newArray = null;
if(startPos!=-1) // there are '0' elements in the array
{
// creates another array with new length.
int newArrayLength = array.length - (endPos-startPos+1);
System.out.println("array.length : "+array.length);
System.out.println("newArrayLength : "+newArrayLength);
newArray = new int[newArrayLength];
// copy the contents from original array till start of first '0' value
System.arraycopy(array, 0, newArray, 0, startPos);
// copy the remaining contents from original array after end of last '0' value
System.arraycopy(array, endPos+1, newArray, startPos , newArrayLength-startPos);
}
else // no '0' values present in array
{
// just copy the original array to new array
int newArrayLength = array.length ;
newArray = new int[newArrayLength];
System.arraycopy(array, 0, newArray, 0 , newArrayLength);
}
// prints to see that the final array is sorted and conatins no '0' values
print(newArray);
}
}
和输出
0 1 123 456 -89 0 -1 567 0 23 231 987 0 987654 0
-89 -1 0 0 0 0 0 1 23 123 231 456 567 987 987654
startPos : 2 endPos : 6
array.length : 15
newArrayLength : 10
-89 -1 1 23 123 231 456 567 987 987654
答案 2 :(得分:0)
import java.util.*;
public class TestPerfect {
public static void main(String a[]){
ArrayList<Integer> perfectNos = new ArrayList<Integer>();
System.out.println("Enter the perfect number");
Scanner sc = new Scanner(System.in);
int per = sc.nextInt();
int perflag = 0;
int sum = 0;
for(int i=1;i<per;i++){
if(per % i == 0)
sum =sum+i;
}
if(sum == per){
for(int i=1;i<per;i++)
if(per % i == 0){
perfectNos.add(i);
}
System.out.print(per+":");
for(int i=0;i<perfectNos.size();i++)
System.out.print(perfectNos.get(i)+" ");
}
else
System.out.println(per+": NOT PERFECT");
}
}
这将解决您的问题。