仅返回值

时间:2017-01-30 10:16:25

标签: java return-value

我想打印从整数数组计算的均值和中位数。这是我的代码:

// 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);
}

在Main中,我首先要调用populateArray()方法。我将填充我的数组。然后,我如何将其作为形式参数传递给其他两种方法(printMean()printMedian()),只传递来自populateArray()的数组?

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

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

我想填充数组,然后在两种打印方法中使用这些值。

提前致谢!

3 个答案:

答案 0 :(得分:2)

我认为代码结构没有太大问题,假设逻辑是正确的。只需获取填充的数组,然后在其他两种方法中使用它:

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

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

答案 1 :(得分: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
}

答案 2 :(得分: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。