2017-01-30 6 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()メソッドを呼び出したいと思います。私の配列に値を設定します。次に、他の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

ロジックが正しいと仮定して、コードの構造に大きな問題はありません。ちょうどあなたの人口の配列を取得した後、他の2つの方法でそれを使用します。

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

あなたのヘルパーメソッドが読み込まのでこれで逃げる必要がありますが、入力配列を変更しないでください。つまり、最初の配列を次のメソッドにそのまま渡すことができます。

+0

それは間違いです。 'printMedian'は配列を変更します。それをソートします。しかし、それは本当に重要ではありません。 –

2

あなたはmainメソッドは次のようなものでなければなりません:

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を変更しません。平均計算で配列の値の順序が気にならないため、投稿されたコードには何の影響もありません。 さらに開発を計画している場合は、

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を操作することなく、上記の記事からの主な方法を適用することができます。オリジナルpopulatedArrayを操作しないようにコピー。