[英]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;
sum
和numbers.length
都是整數,因此Java將結果計算為整數。 然后,將結果分配給avgNum
,它恰好是一個double。 到那時,除法結果的任何小數部分都已經消失了。
要解決此問題,您可以:
avgNum = (double)sum/numbers.length;
在執行除法運算之前,將sum
轉換為double
。
數組索引從0開始。但是您的計數器從1開始。
for(int計數器= 0;計數器<數字。長度;計數器++)
您需要將int值轉換為double。 否則它將舍入為int。
avgNum =(double)sum / numbers.length;
你很親密 以下是導致您的代碼無法正確完成的問題:
您太早初始化了min
和max
。 對於min
當所有數字均為正數時,這會產生問題。 對於最大值,當所有數字均為負數時。 讀取完成后 ,您應該聲明/初始化兩個變量。 將聲明移至讀取循環后的位置將解決此問題。
盡管您將avgNum
的類型正確定義為double
,但您為其分配的表達式仍為int
,因為其兩個元素均為int
。 因此,該划分被截斷。 如下更改分區:
avgNum = (double)sum/numbers.length;
或更妙的是,將sum
聲明為double
,並刪除強制類型轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.