Метод, чтобы получить сумму ArrayList

1

Я получаю итоговые значения различных String ArrayLists, таких как [1,3,4]..., анализируя их в целые числа и получая общее количество. Это сработало, когда я закодировал каждый отдельный, но когда я сделал метод, передав общее значение int и arraylist, я всегда получаю нулевое значение.

Метод спасет много времени.

public class Playing {
  static ArrayList<String> list;
  static int Vigor;

  public static void main(String[] args) {
     list = new ArrayList<String>();           
      vigoroustotal(list,Vigor);




 public static void Listtotal(String par, int tt) {

    for (String s : par) {
        int i = Integer.parseInt(s);
        tt += i;

    }
}
Теги:
arraylist
methods

5 ответов

5

Любые изменения, которые вы делаете для tt внутри вашего метода, больше не будут видны нигде, потому что Java передает все по значению. Сделайте вместо этого метод return int.

  • 1
    ״ Java передает все по значению ״ - как насчет указателей?
  • 2
    @ 0x90 В Java нет указателей. Ссылки также передаются по значению. Если tt были String , например, вы не сможете изменить его либо.
Показать ещё 4 комментария
2

Ваша ошибка: она передаёт функцию tt и ожидает, что она будет изменена. Java не изменяет параметры, передаваемые функциям. Исправленный код будет следующим:

public static int ListTotal(List<String> par) {
    int tt = 0;
    for (String s : par) {
        int i = Integer.parseInt(s);
        tt += i;

    }

    return tt;
}

и будет использоваться следующим образом:

Vigor = ListTotal(list);
0

Изменения, внесенные в целое число tt в Listtotal(), не будут отображаться нигде, кроме этого метода. Вы можете заставить этот метод вернуть целое число, чтобы решить это!

public static int Listtotal(ArrayList<String> par) {
    int tt = 0;

    for (String s : par) {
        int i = Integer.parseInt(s);
        tt += i;
    }

    return tt;
}

И тогда вам нужно изменить основной метод:

public static void main(String[] args) {
    list = new ArrayList<String>();           
    Vigor = Listtotal(list);
}
0

То, что вы хотите, это... позвольте назвать его CountingList,

    public class CountingList {
    private List<Integer> integers = new ArrayList<Integer>(); 
    private int sum; 

    public add(String s) { 
        int value = Integer.parseInt(s); 
        integers.add(value); 
        sum += value; 
    }

    private void updateSum() { 
        sum = 0; 
        for (int i : integers) { 
            sum += i; 
        }
    }
}

Очевидно, что вы захотите раскрывать функциональность, которая вам нужна для использования вне класса, но это (один) способ инкапсулировать поведение, которое вам нужно.

0

Как, сказал, вам нужно вернуть общее количество, поскольку java передает все по-значение, поэтому int tt, который вы передаете, не будет содержать ссылку на переменную Vigor вне метода.

Поэтому, когда вы передаете примитивные типы, такие как (int, char, boolean, byte и т.д.), Все, что вы делаете с ними внутри метода, не будет видно за пределами метода. Однако, когда вы передаете ссылочный тип (такие объекты, как ArrayList), он по-прежнему передается по значению, но это значение является копией ссылки на объект вне метода. Таким образом, в методе populateList ниже я могу просто вызвать ArrayList.add() на входе, потому что этот ввод, даже если он передается по значению, все еще указывает на исходный объект, который был помещен в этот метод.

public class Playing {
    static ArrayList<String> list;
    static int Vigor;

    public static void main(String[] args) {
        list = new ArrayList<String>(); 
        populateList(list);          
        Vigor = getListTotal(list);
        System.out.println("Total is:\t" + Vigor);
    }

    public static void populateList(ArrayList<String> list) {
        String[] sampleData = { "4", "7", "2" };
        for(int i = 0; i < sampleData.length; i++) {
            list.add(sampleData[i]);
        }
    }

    public static int getListTotal(ArrayList<String> list) {
        int tt = 0;
        for (String s : list) {
            int i = Integer.parseInt(s);
            tt += i;
        }
        return tt;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню