Могу ли я набрать тип элемента массива 1d длинного типа в int? - PullRequest
0 голосов
/ 21 декабря 2018
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.есть ли способ сделать это?

Ответы [ 4 ]

0 голосов
/ 23 декабря 2018

Ваш вопрос должен быть следующим:

как исправить ошибку: несовместимые типы: long нельзя преобразовать 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
0 голосов
/ 21 декабря 2018

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

  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 s для переменной intкомпилятор будет жаловаться, что long может хранить гораздо большие значения, чем int.

другая версия:

int summation = (int)Arrays.stream(longarr).sum();
0 голосов
/ 21 декабря 2018

Правильно:

for (long x : longarr) {

}

Нет необходимости выполнять явное приведение типа.

0 голосов
/ 21 декабря 2018

Попробуйте

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;, я оставляю его там, чтобы сделать его более четким

...