有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

获取ArrayList之和的java方法

我得到了各种字符串数组列表的总数,比如[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;

    }
}

共 (5) 个答案

  1. # 1 楼答案

    你想要的是。。。我们称之为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; 
            }
        }
    }
    

    显然,您希望在类之外公开需要使用的功能,但这是封装所需行为的(一种)方法

  2. # 2 楼答案

    Listtotal()方法中对integertt所做的更改将在除该方法之外的任何地方都不可见。你可以让这个方法返回一个整数来解决这个问题

    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);
    }
    
  3. # 3 楼答案

    您的错误是,她正在传递函数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);
    
  4. # 4 楼答案

    如上所述,您需要返回总数,因为java按值传递所有内容,所以您传入的int tt不会在方法之外包含对virgy变量的引用

    因此,当传入基本类型(int、char、boolean、byte等)时,在方法内部对它们所做的任何操作都不会在方法外部可见。 但是,当您传入引用类型(如ArrayList等对象)时,它仍然是按值传递的,但该值是对方法外部对象的引用的副本。所以,在下面的populateList方法中,我可以直接调用ArrayList。在输入上添加(),因为此输入即使按值传递,仍指向放入此方法的原始对象

    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;
        }
    }
    
  5. # 5 楼答案

    在方法中对tt所做的任何更改都不会在其他任何地方可见,因为Java会按值传递所有内容。让方法返回一个int