繁体   English   中英

Java阵列的最低数量和平均数量无法正确计算

[英]Java array lowest number and average not computing correctly

我是Java新手。 我的作业需要以下内容:开发一个程序,允许用户将数字输入数组。 输入如下:

用户将输入要输入数组的整数总数。

然后,用户将输入该数量的唯一整数(负数或正数)。 不允许输入的值数超过数组大小。

开发方法以:

对数组排序

确定最高值

确定最低值

计算平均值(两倍)

下面的代码可以运行,但是它将我输入的最低数字显示为0,这是不正确的,并且平均值的确以双精度格式显示,但是始终将数字四舍五入(3.0而不是3.3)。 有人可以让我知道我在做什么错以及如何解决这个问题。 我已经搜寻问题三天了,却找不到我哪里出了错。

import java.util.Scanner;
import java.util.Arrays;

public class UserArray2 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        //allow user  input;
        System.out.println("How many numbers do you want to enter?");
        int num = input.nextInt();

        int numbers[] = new int[num];        
        int low = numbers[0];
        int max = numbers[0];
        int sum = 0;
        double avgNum;

        System.out.println("Enter the " + num + " numbers now.");

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


        //sort
        System.out.println("The numbers you entered have been sorted from lowest to greatest:");
        Arrays.sort( numbers );
        for ( int i = 0 ; i < numbers.length ; i++ ) {

            System.out.println(numbers[i]);
        }

        //max

        for (int counter = 1; counter < numbers.length; counter++)
        {
         if (numbers[counter] > max)
         {
          max = numbers[counter];
         } 

         }

        //lowest

        for (int counter = 1; counter < numbers.length; counter++)
        {
         if (numbers[counter] < low)
         {
          low = numbers[counter];
         } 

         }

        //average
        for (int i : numbers)
        sum += i;
        avgNum = sum/numbers.length;


        System.out.println("The largest number on your list is: " + max);
        System.out.println("The lowest number on your list is: " + low);
        System.out.println("The average of the list of numbers is: " + avgNum);
    }


    public static void printArray(int arr[]){

        int n = arr.length;

        for (int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
        }
    }

}

在接受用户输入之前,您已经完成了以下分配:

int low = numbers[0];
int max = numbers[0];

这意味着低值和最大初始值将为0。因此,对于您的最小逻辑,将用户输入与低值进行比较,并且没有任何值低于0,因此您始终得到的最小值为0。

您应在接受用户输入(即使用实数数组值)后定义或重新定义它们。

在这一行,

    avgNum = sum/numbers.length;

sumnumbers.length都是整数,因此Java将结果计算为整数。 然后,将结果分配给avgNum ,它恰好是一个double。 到那时,除法结果的任何小数部分都已经消失了。

要解决此问题,您可以:

    avgNum = (double)sum/numbers.length;

在执行除法运算之前,将sum转换为double

  1. 数组索引从0开始。但是您的计数器从1开始。

    for(int计数器= 0;计数器<数字。长度;计数器++)

  2. 您需要将int值转换为double。 否则它将舍入为int。

    avgNum =(double)sum / numbers.length;

你很亲密 以下是导致您的代码无法正确完成的问题:

  • 您太早初始化了minmax 对于min当所有数字均为正数时,这会产生问题。 对于最大值,当所有数字均为负数时。 读取完成 ,您应该声明/初始化两个变量。 将声明移至读取循环后的位置将解决此问题。

  • 尽管您将avgNum的类型正确定义为double ,但您为其分配的表达式仍为int ,因为其两个元素均为int 因此,该划分被截断。 如下更改分区:

     avgNum = (double)sum/numbers.length; 

或更妙的是,将sum声明为double ,并删除强制类型转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM