我是java的新手。我的作业需要以下内容: 开发一个允许用户在数组中输入数字的程序。输入如下:
用户将输入要输入数组的整数总数。
然后,用户将输入该唯一整数(负数或正数)。不要允许输入的值的数量超过数组大小。
开发方法:
对数组进行排序
确定最高值
确定最低值
计算平均值(双倍)
下面的代码确实运行,但它显示我输入的最小数字0,这是不正确的,平均值显示为双重格式,但它总是舍入数字(3.0而不是3.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] + " ");
}
}
}
答案 0 :(得分:0)
您在接受用户输入之前已完成这些作业:
int low = numbers[0];
int max = numbers[0];
这意味着低和最大初始值将为0.因此,对于您的最小逻辑,用户输入与低比较,没有值低于0,因此您总是得到0作为最小值。
您应该在获取用户输入后定义或重新分配它们,即使用实数数组值。
答案 1 :(得分:0)
在这一行中,
avgNum = sum/numbers.length;
sum
和numbers.length
都是整数,因此Java将结果计算为整数。然后,它将结果分配给avgNum
,这恰好是一个双精度数。到那个时候,除法结果的任何小数部分都已经消失了。
要解决此问题,您可以:
avgNum = (double)sum/numbers.length;
在执行分割之前将sum
强制转换为double
。
答案 2 :(得分:0)
数组索引从0开始,但是你从1开始计数。
for(int counter = 0; counter&lt; numbers.length; counter ++)
您需要将int值转换为double。否则它会转到int。
avgNum =(double)sum / numbers.length;
答案 3 :(得分:0)
你非常接近。以下是阻止代码正确完成的问题:
您过早初始化min
和max
。对于min
,当所有数字都是正数时,这会产生问题;最大,当所有数字都是负数。在读取完成后,您应该声明/初始化两个变量。将声明移动到读取循环之后的点将解决此问题。
虽然您已将avgNum
的类型正确定义为double
,但您指定的表达式仍为int
,因为其元素均为int
。因此,划分被截断。按如下方式更改分部:
avgNum = (double)sum/numbers.length;
或者更好的是,将sum
声明为double
,然后删除演员。