java - 实现一个获取双精度数组并返回一个新双精度数组的方法
问题描述
public class aufgabe1 {
public static double[] mittelwert(double[] m){
double mittelw =0;
double[] neuesArray= new double[0];
for (double i : m)
{
mittelw+=i;
mittelw= mittelw/(double)m.length;
}
for(int i=1;i>m.length;i++){
if (m[i]>mittelw){
neuesArray[i]=m[i];
}
}
return neuesArray;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
double[]x={1,2,3,4,5,6,7,8,9,10};
for (double z : mittelwert(x))
{
{
System.out.print(z + " ");
}
System.out.println();
}
}
}
我需要实现一个获取双精度数组的方法,并返回一个新的双精度数组,其中包含大于第一个数组平均值的值,我已经尝试过了,但我不确定如何获得数组来检查它是否有效,因为我什至没有得到我当前代码的输出。
解决方案
这里有几个问题。首先是您错误地计算了平均值。在计算总和后,您应该只将其除以元素总数:
double mittelw = 0;
for (double i : m)
{
mittelw+=i;
}
mittelw = mittelw / (double)m.length;
接下来是您将数组初始化为零元素长。你永远无法在其中放任何东西。它没有元素。
double[] neuesArray = new double[0];
这里的困难是我们将它初始化为什么?我们不知道有多少元素会大于平均值,并且我们无法在创建数组后更改它的大小。
一种解决方案是将其初始化为与输入相同的长度。您可以在此处使用 for-each 循环,但我们需要单独计算有多少元素超过了平均值。
double[] neuesArray = new double[m.length];
int numOverAverage = 0;
for (double i : m)
{
if (i > mittelw)
{
neuesArray[numOverAverage] = i;
numOverAverage++;
}
}
最后,我们需要将数组修剪到正确的大小,否则数组的末尾仍然会被零填充。您可以使用Arrays.copyOfRange
来完成此操作。
return Arrays.copyOfRange(neuesArray, 0, numOverAverage);
这意味着从索引 0 复制到numOverAverage
ofneuesArray
并返回新数组。
您也可以创建第三个数组并再次复制这些值,这就是copyOfRange
在后台要做的所有事情。
推荐阅读
- c++ - 如何以“安全”的方式在 C++ 中获取当前时间
- python-3.6 - 我如何打印只有 a_list 中的第一个和最后一个数字以及每个数字之间的“to”的范围?
- caching - C# 我应该将键聚合到更大的对象以进行缓存吗
- continuous-integration - 通过 GitHub Actions 监听 NPM 发布状态的最佳方法
- javascript - 设置最后一位不为零
- google-app-engine - 如何将子域映射到 Google Cloud App Engine 服务并将主域加载静态网站托管在共享主机上?
- flutter - DatePicker + Streams,可以做到吗?
- ios - 在 SwiftUI 中从孩子的 alignmentGuide 修饰符获取父视图宽度/高度?
- ssl - 入口 GCP 的 SSL 策略
- c# - netstandard2.1 版本的 CancellationTokenRegistration.Unregister()