如何计算平均值,以及如何在java中只允许用户为数据输入正值?

如何计算平均值,以及如何在java中只允许用户为数据输入正值?,java,arrays,Java,Arrays,我正在寻找一种简单的初学者方法来添加代码,如果任何输入为负值,程序应该再次提示用户,直到他们输入非负值。我也不知道如何仅计算距离不为0.0英里的天数的平均值。我知道if语句应该检查x是否在0.0的某个值范围内(比如±0.0001)。因为使用语句if(x==0.0)将计算为false,因为该值没有精确存储 import java.util.Scanner; import java.lang.Math; public class Lab3_1 { public static void main

我正在寻找一种简单的初学者方法来添加代码,如果任何输入为负值,程序应该再次提示用户,直到他们输入非负值。我也不知道如何仅计算距离不为0.0英里的天数的平均值。我知道if语句应该检查
x
是否在0.0的某个值范围内(比如±0.0001)。因为使用语句
if(x==0.0)
将计算为
false
,因为该值没有精确存储

import java.util.Scanner;
import java.lang.Math;

public class Lab3_1
{
  public static void main(String[] arg)
  {
    String[] Day = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    double[] Time = new double[7];
    double[] Distance = new double[7];
    double[] MPH = new double[7];
    Scanner input = new Scanner(System.in);

    for(int i = 0; i < Day.length; i++)
    {
      System.out.println("Data for " + Day[i]); 

      System.out.print("Input Time in minutes");      
      Time[i] = input.nextDouble();

      System.out.print("Input Distance in miles");
      Distance[i] = input.nextDouble();        
    } 

    for(int s = 0; s < Day.length; s++)
    {
      MPH[s] = (double)Distance[s] / ((double)Time[s] / 60);
    }

    double max = MPH[0];
    for (int i = 1; i < Day.length; i++)
    {
      if (MPH[i] > max)
      {
        max = MPH[i];
      }
    }

    double min = MPH[0];
    for (int i = 1; i < Day.length; i++)
    {
      if (MPH[i] < min)
      {
        min = MPH[i];
      }
    }

    double MPHsum = 0.0;
    for(int i = 0; i < Day.length; i++)
    {      
      MPHsum = MPHsum + MPH[i];           
    }

    double avg = 0;
    avg = (double)MPHsum / Distance.length;

    System.out.println("Sum of values is " + MPHsum);
    System.out.println("Minimum pace in MPH " + min);
    System.out.println("Maximum pace in MPH " + max);
    System.out.println("Average pace in MPH " + avg);


  }
}
import java.util.Scanner;
导入java.lang.Math;
公共类Lab3_1
{
公共静态void main(字符串[]arg)
{
字符串[]天={“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”};
双精度[]时间=新双精度[7];
双精度[]距离=新双精度[7];
双速[]英里/小时=新双速[7];
扫描仪输入=新扫描仪(System.in);
对于(int i=0;i最大值)
{
最大速度=每小时[i];
}
}
双分钟=每小时[0];
对于(int i=1;i
for(int i=0;i

在这里,我创建了一个循环,一直运行到时间[I]
小于0,要求用户反复输入新值,直到输入正值。距离也是一样,如果你想重复这个问题直到回答有效,那么
do while
可能比
while
更合适:

do {
    System.out.println("Input distance");
    distance[i] = input.nextDouble();
    if (distance[i] < 0.0)
        System.out.println("Invalid entry");
} while (distance[i] < 0.0);
这将返回一个
可选双精度
,因为您无法确定是否存在平均值(例如,所有距离可能为0)。您可以使用
ifPresent
getAsDouble
来使用该值

您可以用
sum
count
max
替换
average
,以检索其他统计信息。或者,您可以一次性获得所有统计数据:

DoubleSummaryStatistics stats = Arrays.stream(distance)
    .filter(d -> d > 0.0).summaryStatistics();
然后可以使用
stats.getAverage
stats.getMin
stats.getSum
检索各种统计信息


完全相同的方法可用于获取有关
mph
或任何其他数组的统计信息。

我知道您在那里做了什么,这对我非常有帮助。我在while()中使用了一个错误的语句,并得到了一个错误。谢谢。你能详细说明一下你的问题吗?我无法理解你的意思,我也不知道如何计算平均距离,只有在距离不到0.0英里的日子里,我很抱歉,以前从未学过这种代码。你能解释一下我如何使用Arrays.stream(distance).filter(d->d>0.0).average()吗;若要添加距离不为0.0的天数,我将添加更长的解释
Arrays.stream(distance).filter(d -> d > 0.0).average();
DoubleSummaryStatistics stats = Arrays.stream(distance)
    .filter(d -> d > 0.0).summaryStatistics();