如何在我的数组赋值中将Int转换为Double

时间:2015-03-25 18:58:18

标签: java

所以我在执行任务时遇到了一些麻烦。这是向我们提出的问题: 将您的代码写入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,但这并不起作用。任何人都可以帮助我修复我的程序以接受和输出双重的方法吗?

这就是我的尝试:

&#13;
&#13;
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;
&#13;
&#13;

5 个答案:

答案 0 :(得分:1)

在打印排序数组时,代码中存在一个缺少最后一项的问题。

for(c = 0; c <(n - 1); c ++){

改为使用

for(c = 0; c&lt; n; c ++){

对于双重问题,不要将所有内容从int更改为double。

  1. 更改为双 only 数组和变量,用于存储结果(swap,sum等)和temp变量以存储数据。
  2. 将用于数组索引的变量(n,d,c)保存为Int。
  3. 使用nextDouble将实际数据元素读取为Double。

    array [c] = in.nextDouble();

  4. 对代码进行最小更改的代码。请创建单独函数的方法,如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