我可以将长型1d数组元素类型转换为int吗?

时间:2018-12-21 09:51:03

标签: java arrays foreach int long-integer

class Test {
    public static void main(String[] args) {
        long[] longarr = {40, 50, 70, 90};
        int sum = 0;
        for (int x: (int) longarr) {
            sum += x;
        }
        System.out.println("sum is " + sum);
    }
}

在不将long类型数组设置为int的情况下,如何解决错误。有什么办法吗?

4 个答案:

答案 0 :(得分:6)

您的代码有两个问题:

  1. 您不能像这样-> long[]int[]投射到(int) longarr上,因此您需要做的就是将其保留为for (int x: longarr) {...}
  2. 鉴于您已将其更改为for (int x: longarr) {...},这会导致新错误,因为编译器无法将long强制转换为int,因此可以将变量的类型更改为{{ 1}}
  3. 现在您可以在应用求和之前将每个for (long x: longarr) {...}强制转换为long

这是@Meini的方法所做的,但是无论如何,这是另一种方法:

int

请注意,这里需要int summation = Arrays.stream(longarr).mapToInt(v -> (int)v).sum(); 才能真正获得您需要的mapToInt值,否则,如果我们将int的总和直接分配给long变量,编译器会抱怨int可以存储比long大得多的值。

另一个版本:

int

答案 1 :(得分:5)

尝试

<p><img src="http://img.qdaily.com/article/article_show/20181220221726s0BIHSdN42kfbKqT.jpg?imageMogr2/auto-orient/thumbnail/!640x380r/gravity/Center/crop/640x380/quality/85/format/jpg/ignore-error/1" alt=""></p>

实际上,您不必显式地将public static void main(String[] args) { long[] longarr = {40, 50, 70, 90}; int sum = 0; for (long x : longarr) { sum += (int) x; } System.out.println("sum is " + sum); } 强制转换为x-> int,我将其保留在那里以使其更加清晰

答案 2 :(得分:1)

您的问题必须是:

  

如何解决错误:类型不兼容:无法转换为long   诠释

将循环更改为:

ByPassCondition

运行:

 public class NewClass {  
      public static void main(String[] args) {

            long[] longarr = {40, 50, 70, 90};
            int sum = 0 ; 

            for (long  x: longarr  ) { // don't need cast 
                sum += x;
            }
            System.out.println("sum is " + sum);
        }
         }

答案 3 :(得分:0)

正确:

for (long x : longarr) {

}

无需进行显式类型转换。