簡體   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