平均,最小,最大 - java

因此,在我的程序中,用户一次输入一个数字列表,当我用设置为-1的“ end”语句结束列表数字时,一旦得到,我就得到了平均值和最大值,最小,我的问题是,当我确实获得最小输出时,每次都会为-1,我很难从数组中删除-1,有什么想法吗???

import java.util.Scanner; //import scanner to user scanner tool

public class Average { //creating public class

    public static void main(String[]args) { //creating public static main

        Scanner input = new Scanner(System.in); //creating scanner input to grab user input

        System.out.println("Please enter a list of numbers, entering -1 to end the list: ");

        double[] numbers = new double[20]; //creating 20 count array
        double sum = 0; 
        int count = 0;
        double average;
        int end = -1;

        for(int i = 0; i<numbers.length; i++) {

            System.out.print("Enter a number: ");
            numbers[i] = input.nextDouble();

            if(numbers[i]== end) {

             break;

            }
            sum+= numbers[i];
            count++;
        }    
        // gets average from user input of numbers
        average = sum/count;
        System.out.println("Average is: " + average);
        double max = maxim(numbers);
        System.out.println("Max: " + max);
        double min = minim(numbers);
        System.out.println("Min: " + min);

    }

//method for finding out maximum number from user input

    public static double maxim(double[] array) {

        double maxNum = array[0];
        for(int i = 1; i<array.length; i++) {
            if(array[i] > maxNum) {
                maxNum = array[i];
            }
        }
     return maxNum; 
    }
 //method for finding out minimum number from user input   

    public static double minim(double[] array) {

        double minNum = array[0];
        for(int i = 1; i<array.length; i++) {
               if(array[i] < minNum && array[i]!=-1) {
                minNum = array[i];
            }

        }
     return minNum; 
    }

}

参考方案

您需要对负责从用于计算统计信息的代码中读取用户输入的部分代码进行耦合。对于从结果数组中删除-1,您只需要简单地不要将此值放在结果中即可。当用户输入随机数时,首先检查它是否不是-1,然后将其放入结果中。像这样:

import java.util.Scanner;  

public class Average {  

    public static void main(String[]args) { //creating public static main
        double[] numbers = readInputNumbers();
        System.out.println("Average is: " + average(numbers));
        System.out.println("Max: " + max(numbers));
        System.out.println("Min: " + min(numbers));
    }

    public double[] readInputNumbers() {
      Scanner input = new Scanner(System.in); //creating scanner input to grab user input
      System.out.println("Please enter a list of numbers, entering -1 to end the list: ");
      double[] numbers = new double[20];
      final int endInput = -1;
      for(int i = 0; i < numbers.length; i++) {
          System.out.print("Enter a number: ");
          double nextNumber = input.nextDouble();
          if(nextNumber == endInput) {
              break;
          } else {
              numbers[i] = nextNumber;
          }
      }
      return numbers;   
  }

    public static double max(double[] array) {
        double maxNum = array[0];
        for(int i = 1; i<array.length; i++) {
            if(array[i] > maxNum) {
                maxNum = array[i];
            }
        }
     return maxNum; 
    }

    public static double min(double[] array) {
        double minNum = array[0];
        for(int i = 1; i<array.length; i++) {
               if(array[i] < minNum && array[i]!=-1) {
                minNum = array[i];
            }

        }
     return minNum; 
    }

    public static double average(double[] numbers) {
        double sum = 0;
        for(int i = 0; i < numbers.length; i++) {
            sum = sum + numbers[i];
        }
        return sum / numbers.length; 
    }

}

在jdk自8版本起,您可以简化此任务,如下所示:

import java.util.Scanner; 
import java.util.stream.*; 

public class Average {  

    public static void main(String[]args) { //creating public static main
        double[] numbers = readInputNumbers();
        DoubleSummaryStatistics statistics = DoubleStream.of(numbers).summaryStatistics();
        System.out.println("Average is: " + statistics.getAverage()));
        System.out.println("Max: " + statistics.getMax());
        System.out.println("Min: " + statistics.getMin());
    }

    public double[] readInputNumbers() {
        Scanner input = new Scanner(System.in); //creating scanner input to grab user input
        System.out.println("Please enter a list of numbers, entering -1 to end the list: ");
        double[] numbers = new double[20];
        final int endInput = -1;
        for(int i = 0; i < numbers.length; i++) {
            System.out.print("Enter a number: ");
            double nextNumber = input.nextDouble();
            if(nextNumber == endInput) {
                break;
            } else {
                numbers[i] = nextNumber;
            }
        }
        return numbers;   
    }
}

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

将数字四舍五入到一定数量的Java - java

下午好仅想知道在Java中将值四舍五入到小数位数后最简单的方法。使用C#。double answer; double numberOne; double numberTwo; Console.WriteLine("Enter the numbers for your calculation"); numberOne = Double.Pa…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…