Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类型int、ArrayList的运算符未定义_Java_Compiler Errors - Fatal编程技术网

Java 类型int、ArrayList的运算符未定义

Java 类型int、ArrayList的运算符未定义,java,compiler-errors,Java,Compiler Errors,我编写了以下代码来对ArrayList的元素求和: import java.util.ArrayList; 公共课平均分{ 私有整数和=0; 公共无效getInput(ArrayList li) { System.out.println(“给定元素为“+li”); } 公共元素汇总表(ArrayList lis) { sum=sum+lis; 回报金额; } } 但是当我运行它时,我得到以下错误: 未为参数类型int、ArrayList定义运算符+ 我做错了什么?因为lis是一个ArrayLi

我编写了以下代码来对
ArrayList
的元素求和:

import java.util.ArrayList;
公共课平均分{
私有整数和=0;
公共无效getInput(ArrayList li)
{
System.out.println(“给定元素为“+li”);
}
公共元素汇总表(ArrayList lis)
{
sum=sum+lis;
回报金额;
}
}
但是当我运行它时,我得到以下错误:

未为参数类型int、ArrayList定义运算符+


我做错了什么?

因为
lis
是一个
ArrayList
并且该类型不支持
+
,所以您需要使用
列表访问ArrayList的一个位置。获取(x)

但是你会想要这个吗

public int sumOfElements(ArrayList<Integer> lis) {
     int total = 0
     for(int i = 0; i < lis.size(); i++){
         total += lis.get(i);
     }
     return total;
}
public int-sumofements(数组列表lis){
整数总计=0
对于(int i=0;i
我假设您希望
+
操作符将自动应用于
lis
li
中的每个元素。这不是
sum=sum+lis的情况
“给定元素为”+li
。您需要以某种方式迭代
数组列表
,以完成您试图实现的目标。

您的问题在于这段代码

public int sumOfElements(ArrayList<Integer> lis)
{ 
    sum=sum+lis;
    return sum;
}
您可以将打印语句拆分为如下内容

public void getInput(ArrayList li )
{
    System.out.print ("Given elements are " ); //note it's print instead of println
    System.out.println(li); //this will print for example [1,2,3,4]
}

您需要迭代
列表
,以访问每个
整数
,并将其添加到总和:

public void sumOfElements(ArrayList<Integer> lis)
{
    for (Integer num : lis) {
        sum = sum + num;  //Access each element in the list one at a time and add it to the sum
    }
}

您的问题是“sum=sum+lis”;编译器不知道如何用数组列表添加int。您认为
sum=sum+lis
应该怎么做<代码>+只能在两个数字(加法)或字符串(串联)之间使用。列表没有“添加”操作。
“给定元素是”+li
也是一个问题,原因类似-这不会做OP认为它会做的事情(如果它编译的话)。@EJoshuaS,编译时不会出现问题。在内部,编译器只是将其转换为li.toString()是的,我现在不是坐在Java编译器前面。这肯定不会像OP认为的那样,尽管-那里的错误与OP实际询问的错误相似。@EJoshuaS,如果他将其更改为System.out.println(li),那么编译器将打印得很好-例如“[1,2,3,4]”。附加一个字符串,将改为打印类名+十六进制值是的,这就是我所指的。OP可能期望的是
[1,2,3,4]
,而不是className+hex值,因此字符串串联不会像OP认为的那样在这种情况下起作用。我假设代码中两个错误背后的推理是相似的(OP可能认为
+
运算符将自动应用于整个列表)。“将此运算符应用于每个元素”在Lisp中很容易做到。Java并没有真正设置为能够流畅地完成这项工作。@RobertColumbia numpy也是。
public int sumOfElements(ArrayList<Integer> lis)
{ 
    //it takes each item in lis, and sum them up.
    sum = IntStream.of(lis).sum();
    return sum;
 }
public void getInput(ArrayList li )
{
    System.out.println("Given elements are "+li);
}
public void getInput(ArrayList li )
{
    System.out.print ("Given elements are " ); //note it's print instead of println
    System.out.println(li); //this will print for example [1,2,3,4]
}
public void sumOfElements(ArrayList<Integer> lis)
{
    for (Integer num : lis) {
        sum = sum + num;  //Access each element in the list one at a time and add it to the sum
    }
}
SumAverage sa = new SumAverage();
sa.sumOfElements(yourList);
int sum = sa.get(sum);  //Local variable now contains your class variable