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);
}
}
как мы могли бы исправить ошибку, не преобразовывая массив длинных типов в int. есть ли способ сделать это?
Они являются элементами long по какой-то причине: подумайте о приведении вниз и о том, что он делает с вашими данными, прежде чем фактически выполнять приведение.
Обратите внимание, что преобразование суммы long в int совершенно небезопасно. Я надеюсь, что для этих long существуют некоторые ограничения, которые не позволяют сумме превысить максимальное значение для int.




Пытаться
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 -> sum += x;, я оставлю это здесь, чтобы сделать его более понятным
@ MuratKaragöz Вы не можете преобразовать примитивный массив в другой, например int[] s = new long[0], в этом случае это еще хуже, потому что long[] был преобразован в int. Хотя ты можешь кастовать Object[] str = new String[0];
У вас есть пара проблем с вашим кодом:
long[] в int[], как это -> (int) longarr, поэтому вам нужно оставить его как for (int x: longarr) {...}for (int x: longarr) {...}, возникает новая ошибка, поскольку компилятор не может явно преобразовать long в int, поэтому вы можете изменить тип переменной на for (long x: longarr) {...}long в int перед применением суммирования.Это то, что делает подход @ Meini, но в любом случае есть другой подход:
int summation = Arrays.stream(longarr).mapToInt(v -> (int)v).sum();
Обратите внимание, что здесь требуется mapToInt для фактического получения требуемого вам значения int, в противном случае, если бы мы назначили суммирование long напрямую переменной int, компилятор будет жаловаться, поскольку long может хранить гораздо большие значения, чем int.
другая версия:
int summation = (int)Arrays.stream(longarr).sum();
Хороший ответ +1. Возможно, вы захотите объяснить шаг mapToInt и почему он позволяет избежать ошибки преобразования с потерями.
@TimBiegeleisen обновлен с дополнительной информацией, надеюсь, это поможет. Спасибо за ваш отзыв.
Правильный :
for (long x : longarr) {
}
Нет необходимости выполнять явное приведение типа.
Ваш вопрос должен быть таким:
how to fix error : incompatible types: long cannot be converted int
Измените цикл на:
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);
}
}
бегать:
sum is 250
Добро пожаловать в StackOverflow MyPs, это ваш первый ответ!
В данном случае это довольно очевидно, но когда вы просите исправить ошибку, лучше скопировать текст ошибки.