Могу ли я ввести преобразование длинного элемента массива 1d в int?

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. есть ли способ сделать это?

В данном случае это довольно очевидно, но когда вы просите исправить ошибку, лучше скопировать текст ошибки.

StephaneM 21.12.2018 10:55

Они являются элементами long по какой-то причине: подумайте о приведении вниз и о том, что он делает с вашими данными, прежде чем фактически выполнять приведение.

mckuok 21.12.2018 10:55

Обратите внимание, что преобразование суммы long в int совершенно небезопасно. Я надеюсь, что для этих long существуют некоторые ограничения, которые не позволяют сумме превысить максимальное значение для int.

Arnaud Denoyelle 21.12.2018 10:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
171
4

Ответы 4

Пытаться

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];

Meini 21.12.2018 11:04

У вас есть пара проблем с вашим кодом:

  1. вы не можете преобразовать long[] в int[], как это -> (int) longarr, поэтому вам нужно оставить его как for (int x: longarr) {...}
  2. Учитывая, что вы изменили его на for (int x: longarr) {...}, возникает новая ошибка, поскольку компилятор не может явно преобразовать long в int, поэтому вы можете изменить тип переменной на for (long x: longarr) {...}
  3. Теперь вы можете преобразовать каждый 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 и почему он позволяет избежать ошибки преобразования с потерями.

Tim Biegeleisen 21.12.2018 10:58

@TimBiegeleisen обновлен с дополнительной информацией, надеюсь, это поможет. Спасибо за ваш отзыв.

Ousmane D. 21.12.2018 11:13

Правильный :

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, это ваш первый ответ!

Abdo Bmz 23.12.2018 00:43

Другие вопросы по теме