我正在获取各种字符串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;
}
}发布于 2014-09-01 03:18:26
您在方法中对tt所做的任何更改都不会在其他任何地方可见,因为Java值传递所有内容。使该方法返回一个int类型。
发布于 2014-09-01 03:21:18
你的错误是传递了函数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);发布于 2014-09-01 03:22:38
如上所述,您需要返回总数,因为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;
}
}https://stackoverflow.com/questions/25595395
复制相似问题