2017-01-30 92 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。