所以我在执行任务时遇到了一些麻烦。这是向我们提出的问题: 将您的代码写入Averages.java文件中。应如前所述使用IO模块输出答案。
您的作业是在给定输入列表的情况下计算平均值。首先询问用户她将输入多少个数字(双打)。然后提示那么多号码。
然后按顺序输出以下值min,max,sum,mean,median,mode。出于本练习的目的,您可以假设存在1种模式或不存在模式。 (例如在{1,3,3,4,4}中,没有模式,因为有2 3和2 4,但是{1,3,3,4}有一种模式3)。如果不存在模式,则可以输出String" none"。
通过找到中间数确定中位数。如果不存在这样的数字,则通过取2个中间数的平均值来计算。
提示:为了完成中值/模式计算,您可能需要按照某个排序顺序保留数字列表。即每次插入时,将数字放在"正确的#34;的地方。
示例(注意不应打印注释说明 - 它们仅供参考):
10
5.8
1.4
2.3
1.4
1.4
1.0
3.2
10.5
11.0
2.0
RESULT: 1.0 //min
RESULT: 11.0 //max
RESULT: 40.0 //sum
RESULT: 4.0 //mean
RESULT: 2.15 //median
RESULT: 1.4 //mode
这是我目前的代码:
public class Averages{
public static void main(String []args){
int n, c, d, swap,sum=0;
Scanner in = new Scanner(System.in);
System.out.println("Input number of integers to sort");
n = in.nextInt();
int array[] = new int[n];
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++){
array[c] = in.nextInt();
sum=sum+array[c];
}
for (c = 0; c < ( n - 1 ); c++) {
for (d = 0; d < n - c - 1; d++) {
if (array[d] > array[d+1]) /* For descending order use < */
{
swap = array[d];
array[d] = array[d+1];
array[d+1] = swap;
}
}
}
System.out.println("Sorted array:");
for (c = 0; c < ( n - 1 ); c++) {
System.out.println(array[c]);
}
System.out.println("Sum="+sum);
System.out.println("Max="+array[n-1]);
System.out.println("Min="+array[0]);
System.out.println("Mean="+sum/n);
double median = 0;
double mid=0;
if(n%2 == 0)
{
int temp=(n/2)-1;
for(int i=0;i<n;i++)
{
if(temp==i || (temp+1)==i)
{
mid=mid+array[i];
}
}
mid=mid/2;
System.out.println("Median value is: "+mid);
}
else
{
int temp=(n/2);
for(int i=0;i<n;i++)
{
if(temp==i)
{
mid=array[i];
System.out.println("Median value: "+mid);
}
}
}
//Mode calculation
int i,j,z, tmp, maxCount, modeValue;
int[] tally=new int[n];
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(j+1!=n)
{
if(array[j]>array[j+1])
{
tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
}
for (i = 0; i < n; i++)
{
for(z=i+1;z<n;z++)
{
if(array[i]==array[z])
{
tally[i]++;
}
}
}
maxCount = 0;
modeValue = 0;
for (i = 0; i <n; i++)
{
if (tally[i] > maxCount)
{
maxCount = tally[i];
modeValue = array[i];
}
}
System.out.println("Mode value is :"+modeValue);
}
}
从我的代码中可以看出,它只能运行Int而不是Double。我曾尝试将所有的Int重写为Double,但这并不起作用。任何人都可以帮助我修复我的程序以接受和输出双重的方法吗?
这就是我的尝试:
import java.util.Scanner;
public class Averages{
public static void main(String []args){
double n, c, d, swap,sum=0;
Scanner in = new Scanner(System.in);
System.out.println("Input number of Doubles to sort");
n = in.nextDouble();
double array[] = new double[n];
System.out.println("Enter " + n + " doubles");
for (c = 0; c < n; c++){
array[c] = in.nextDouble();
sum=sum+array[c];
}
for (c = 0; c < ( n - 1 ); c++) {
for (d = 0; d < n - c - 1; d++) {
if (array[d] > array[d+1]) /* For descending order use < */
{
swap = array[d];
array[d] = array[d+1];
array[d+1] = swap;
}
}
}
System.out.println("Sorted array:");
for (c = 0; c < ( n - 1 ); c++) {
System.out.println(array[c]);
}
System.out.println("Sum="+sum);
System.out.println("Max="+array[n-1]);
System.out.println("Min="+array[0]);
System.out.println("Mean="+sum/n);
double median = 0;
double mid=0;
if(n%2 == 0)
{
double temp=(n/2)-1;
for(double i=0;i<n;i++)
{
if(temp==i || (temp+1)==i)
{
mid=mid+array[i];
}
}
mid=mid/2;
System.out.println("Median value is: "+mid);
}
else
{
double temp=(n/2);
for(int i=0;i<n;i++)
{
if(temp==i)
{
mid=array[i];
System.out.println("Median value: "+mid);
}
}
}
//Mode calculation
double i,j,z, tmp, maxCount, modeValue;
double[] tally=new double[n];
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(j+1!=n)
{
if(array[j]>array[j+1])
{
tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
}
for (i = 0; i < n; i++)
{
for(z=i+1;z<n;z++)
{
if(array[i]==array[z])
{
tally[i]++;
}
}
}
maxCount = 0;
modeValue = 0;
for (i = 0; i <n; i++)
{
if (tally[i] > maxCount)
{
maxCount = tally[i];
modeValue = array[i];
}
}
System.out.println("Mode value is :"+modeValue);
}
}
&#13;
答案 0 :(得分:1)
在打印排序数组时,代码中存在一个缺少最后一项的问题。
for(c = 0; c <(n - 1); c ++){
改为使用
for(c = 0; c&lt; n; c ++){
对于双重问题,不要将所有内容从int更改为double。
使用nextDouble将实际数据元素读取为Double。
array [c] = in.nextDouble();
对代码进行最小更改的代码。请创建单独函数的方法,如min(),max(),sort()等。
import java.util.Scanner;
public class Averages{
public static void main(String []args){
double swap,sum=0;
int d, c, n;
Scanner in = new Scanner(System.in);
System.out.println("Input number of integers to sort");
n = in.nextInt();
double array[] = new double[n];
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++){
array[c] = in.nextDouble();
sum=sum+array[c];
}
for (c = 0; c < ( n - 1 ); c++) {
for (d = 0; d < n - c - 1; d++) {
if (array[d] > array[d+1]) /* For descending order use < */
{
swap = array[d];
array[d] = array[d+1];
array[d+1] = swap;
}
}
}
System.out.println("Sorted array:");
for (c = 0; c < ( n - 1 ); c++) {
System.out.println(array[c]);
}
System.out.println("Sum="+sum);
System.out.println("Max="+array[n-1]);
System.out.println("Min="+array[0]);
System.out.println("Mean="+sum/n);
double median = 0;
double mid=0;
if(n%2 == 0)
{
int temp=(n/2)-1;
for(int i=0;i<n;i++)
{
if(temp==i || (temp+1)==i)
{
mid=mid+array[i];
}
}
mid=mid/2;
System.out.println("Median value is: "+mid);
}
else
{
int temp=(n/2);
for(int i=0;i<n;i++)
{
if(temp==i)
{
mid=array[i];
System.out.println("Median value: "+mid);
}
}
}
//Mode calculation
int i,j,z, maxCount;
double tmp, modeValue;
int[] tally=new int[n];
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(j+1!=n)
{
if(array[j]>array[j+1])
{
tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
}
for (i = 0; i < n; i++)
{
for(z=i+1;z<n;z++)
{
if(array[i]==array[z])
{
tally[i]++;
}
}
}
maxCount = 0;
modeValue = 0;
for (i = 0; i <n; i++)
{
if (tally[i] > maxCount)
{
maxCount = tally[i];
modeValue = array[i];
}
}
System.out.println("Mode value is :"+modeValue);
}
}
答案 1 :(得分:0)
每当你进行涉及有理数的计算时,你可能只需要将整数转换为双精度数,如下所示:
System.out.println("Mean=" + ((double)sum / n));
这有效地暂时将它们变成双打。
答案 2 :(得分:0)
输入错误......
10 5.8 1.4 2.3 1.4 1.4 1.0 3.2 10.5 11.0 2.0
既然你说:
System.out.println("Enter " + n + " integers");
而5.8,1.4等......不是整数......
将其放在第12行:
array[c] = in.next();
而不是:
array[c] = in.nextInt();
答案 3 :(得分:0)
当你说
时我尝试将所有的Int重写为Double,但这不起作用。
这应该仅适用于您操作的数据,而不适用于数组索引。如果这不起作用,请发布错误的代码,我们可以帮助您。
你必须从你操作的值(array [],swap,median,mid等)中分离出总是int类型的数组索引和大小(如:n,c,d等)。将是double类型
int n, c, d;
double swap, sum=0;
...
n = in.nextInt();
double array[] = new double[n];
....
答案 4 :(得分:0)
我可以发现的几个问题:首先将数组转换为double
数组。第二次使用in.nextDouble()
而不是in.nextInt()
。第三,提示doubles
作为您的作业。最后,数组索引,大小和计数应为ints
。