Я получаю итоговые значения различных 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;
}
}
Любые изменения, которые вы делаете для tt
внутри вашего метода, больше не будут видны нигде, потому что Java передает все по значению. Сделайте вместо этого метод return int.
Ваша ошибка: она передаёт функцию 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);
Изменения, внесенные в целое число 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);
}
То, что вы хотите, это... позвольте назвать его 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;
}
}
}
Очевидно, что вы захотите раскрывать функциональность, которая вам нужна для использования вне класса, но это (один) способ инкапсулировать поведение, которое вам нужно.
Как, сказал, вам нужно вернуть общее количество, поскольку 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;
}
}
tt
былиString
, например, вы не сможете изменить его либо.