如何使用double作为矩阵

时间:2017-03-25 00:26:26

标签: java arrays double

这是我写的代码:

public class main
{
    public static int arraySum(int[] arr)
    {
        int result = 0;
        for(int i = 0; i < arr.length; i++)
        {
            result += arr[i];
        }
        return result;
    }

    public static int arraySumBetter(int[] a)
    {
        int result = 0;
        for(int value : a)
        {
            result += value;
        }
        return result;
    }

    public static void main(String[] args)
    {
        int[] a = {1, 2, 3, 4, 48};
        System.out.println(arraySum(a));
        System.out.println(arraySumBetter(a));
    }
}

当我运行它时,会打印出来:

58

58

但我希望结果为58.0 我将所有int更改为double

public class main
{
    public static double arraySum(double[] arr)
    {
        double result = 0;
        for(double i = 0; i < arr.length; i += 1)
        {
            result += arr[i];
        }
        return result;
    }

    public static int arraySumBetter(double[] a)
    {
        double result = 0;
        for(double value : a)
        {
            result += value;
        }
        return result;
    }

    public static void main(String[] args)
    {
        double[] a = {1, 2, 3, 4, 48};
        System.out.println(arraySum(a));
        System.out.println(arraySumBetter(a));
    }
}

但它没有编译:

typed.java:8: error: incompatible types: possible lossy conversion from double to int
      result += arr[i];
                    ^

typed.java:19: error: incompatible types: possible lossy conversion from double to int
    return result;
           ^
2 errors

我是否需要添加更多代码?或其他什么?

3 个答案:

答案 0 :(得分:0)

这是一个有点偷偷摸摸的:看看这段代码

for (double i = 0; i < arr.length; i += 1) {
    result += arr[i];
}

用于数组索引的变量突然变为double,但数组索引始终是一个整数值。导致编译错误的原因。

将索引变量恢复为int,您将全部设置完毕。也就是说,将代码还原为

for (int i = 0; i < arr.length; i += 1) {
    result += arr[i];
}

注意:如果你想要的只是一个十进制的结果,你选择的解决方案非常繁重,双精度计算比整数计算慢,双数学有其自身的挑战 - 只需在这里看看SO 。一个简单的方法是将所有计算保持为整数但同时打印结果为1位小数可以是

System.out.format("%.1f", (double) arraySumBetter(a));

在这种情况下,您使用的是arraySumBetter的第一个版本,即public static int arraySumBetter(int [] a)

答案 1 :(得分:0)

此问题int arraySumBetter(double [] a)

中的问题

return值为int,但您在函数中将result声明为double变量,因此当您返回{{1}时,它将成为lossy conversion from double to int个问题}}

它应该是:

result

也是索引计数器类型的数组应该是整数值:

public static double arraySumBetter(double [] a)

您可以使用for (int i = 0; i < arr.length; i += 1) // not double i 方法以特定的浮点精度格式化输出:

printf

答案 2 :(得分:0)

问题是数组只能使用整数编制索引。这意味着,arr[true]arr[5.32] 不允许

编译器抱怨因为它需要将double转换为整数值,这会切断小数位。 Java永远不会那么隐蔽 - 你必须强制它到一个整数:

double foo = 5.32;
// convert to integer:
int bar = (int) foo;

在您的情况下,不需要进行类型转换。如果变量i的类型为int,则效果正常。

在第二种方法中,您的返回类型错误。它返回一个double,但声明说

public static int arraySumBetter