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的情况下,如何解决错误。有什么办法吗?
答案 0 :(得分:6)
您的代码有两个问题:
long[]
将int[]
投射到(int) longarr
上,因此您需要做的就是将其保留为for (int x: longarr) {...}
for (int x: longarr) {...}
,这会导致新错误,因为编译器无法将long
强制转换为int
,因此可以将变量的类型更改为{{ 1}} 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) {
}
无需进行显式类型转换。