2017-01-30 94 views
0

我想打印从整数数组计算出的平均值和中位数。这里是我的代码:仅返回值

// I create and populate the int array 
public static int[] populateArray(Scanner input) { 
    int[] array = new int[input.nextInt()]; 
    for (int i = 0; i < array.length; i++) { 
     array[i] = input.nextInt(); 
    } 
    return array; 
} 

// I create a method wich takes as formal paramether an array of int an prints the result of mean from the array 

public static void printMean(int[] populatedArray) { 
    double mean = 0; 
    for (int aPopulatedArray : populatedArray) { 
     mean += aPopulatedArray; 
    } 
    mean /= populatedArray.length; 
    System.out.println(mean); 
} 

// I create a method wich takes as formal paramether an array of int an prints the result of median from the array 

public static void printMedian(int[] populatedArray) { 
    Arrays.sort(populatedArray); 
    double median; 
    if (populatedArray.length % 2 != 0) { 
     median = populatedArray[populatedArray.length/2]; 
    } else { 
     median = (populatedArray[populatedArray.length/2] + populatedArray[populatedArray.length/2 - 1])/2; 
    } 
    System.out.println(median); 
} 

在主,我首先要拨打的populateArray() method.I将填充我的数组。那么,我怎样才能将其作为正式参数传递给其他2种方法(printMean()printMedian()),只有数组从populateArray()

我不想这样做,每次使用数组从populateArray()方法时间:

int[] array = new int[input.nextInt()]; 
for (int i = 0; i < array.length; i++) { 
    array[i] = input.nextInt(); 
} 

我想填充数组的则在这两种打印方式使用这些值。

在此先感谢!

+0

非常感谢!我现在明白了! – onealex

回答

2

假设逻辑正确,我没有看到很多与代码结构有关的问题。只要获得您的填充数组,然后用它在其他两种方法:

public static void main(String[] args) { 
    int[] array = populateArray(new Scanner(System.in)); 
    printMean(array); 
    printMedian(array); 
} 

,因为您的辅助方法,读你应该不用它,但不修改,输入数组。这意味着您可以继续将初始数组传递给后续方法。

+0

这不完全正确。 'printMedian'修改数组;它对它进行分类。但那并不重要。 –

2

您的主要方法应该是这样的:

public static void main(String[] args) { 
    int[] arr = populateArray(new Scanner(System.in)); //Get a populated array 
    printMean(arr); //Pass it to printMean 
    printMedian(arr); //Pass it to PrintMedian 
} 
0

其实

Arrays.sort(populatedArray)

做修改populatedArray。它对您的发布代码没有影响,因为平均值计算不关心数组值的顺序。但如果你打算进一步发展,我会建议复制到不操纵原populatedArray:

public static void printMedian(int[] populatedArray) { 
    int[] copiedArray = new int[populatedArray.length]; 
    System.arraycopy(populatedArray, 0, copiedArray, 0, populatedArray.length); 
    Arrays.sort(copiedArray); 
    double median; 
    if (copiedArray.length % 2 != 0) { 
     median = copiedArray[copiedArray.length/2]; 
    } else { 
     median = (copiedArray[copiedArray.length/2] + copiedArray[copiedArray.length/2 - 1])/2; 
    } 
    System.out.println(median); 
} 

然后你就可以申请从该职位的主要方法上面没有操纵populatedArray。