我的程序(包含在下面)不断出现这个错误,列表大小为零,这就搞乱了其他一切。我猜这意味着我没有正确添加元素,但我无法弄清楚它有什么问题。我在技术上受到挑战,所以我很抱歉这种格式没有正确。谢谢你的帮助!
import java.util.Scanner;
import java.util.ArrayList;
public class ListStat {
public static void main (String[] args) {
ListStat r = new ListStat();
System.out.println("A default list was created." + r.toString());
ListStat r1 = new ListStat(30);
System.out.println("Another list was created." + r1.toString());
ListStat r2 = new ListStat(40);
System.out.println("Another list was created." + r2.toString());
r1.add(4);
System.out.println("The item at index 13 for r1 is: " + r1.get(13));
System.out.println("r1 and r2 are equal: " + r1.equals(r2));
System.out.println("r1 and r2 overlap this number of times: " + r1.countOverlap(r1, r2));
}
private ArrayList<Integer> list;
public ListStat() {
list = new ArrayList<Integer>();
}
public ListStat(int N) {
list = new ArrayList<Integer>(N);
for (int i=0; i<N; i++) {
list.add(i, i+1);
}
}
public void add(int num) {
list.add(num);
}
public int get(int index) {
return list.get(index);
}
public int getListLength(){
return list.size();
}
public double getMean() {
int sum = 0;
for (int i=0; i<list.size(); i++) {
sum = sum + list.get(i);
}
double mean = sum/list.size();
return mean;
}
public int getSum() {
int sum = 0;
for (int i=0; i<list.size(); i++) {
sum = sum + list.get(i);
}
return sum;
}
public boolean equals(ListStat r) {
if (r.equals(list))
return true;
else
return false;
}
public static int countOverlap(ListStat r1, ListStat r2) {
int count = 0;
for (int i=0; i<r1.getListLength(); i++) {
for (int j=0; j<r2.getListLength(); j++) {
if (r1.get(i)==r2.get(j)) {
count++;
}
}
}
return count;
}
public double getStdDev() {
int sum = 0;
double standardDev = 0.0;
for (int i=0; i<list.size(); i++) {
sum = sum + list.get(i);
}
double mean = sum/list.size();
double standsum=0;
for (int i=0; i<list.size(); i++) {
standardDev = (list.get(i) - mean) * (list.get(i) - mean);
standsum=standsum+standardDev;
}
standsum = standsum/list.size();
standsum = Math.sqrt(standsum);
return standsum;
}
public String toString() {
return "The list length is " + getListLength() + ", the mean is " + getMean() + ", the sum is " + getSum() + ", and the standard deviation is " + getStdDev();
}
}
答案 0 :(得分:2)
在您的主要方法中,
首先调用no-arg构造函数
ListStat r = new ListStat();
以下是你的无参数构造函数的样子:
public ListStat() {
list = new ArrayList<Integer>();
}
它初始化列表但不向列表添加任何内容,因此列表大小为0.
第二,是以下
System.out.println("A default list was created." + r.toString());
正在调用toString
方法。
如果你看一下toString
方法
public String toString() {
return "The list length is " + getListLength() + ", the mean is " + getMean() + ", the sum is " + getSum() + ", and the standard deviation is " + getStdDev();
}
你在那里调用 getMean
方法,以下是你在该方法中所做的事情:
double mean = sum / list.size();
那里的列表大小为0。
所以,你可能想在那里添加一个条件检查,以查看列表大小是否为0。
答案 1 :(得分:2)
问题是由
引起的double mean = sum / list.size();
在getMean()方法中。
程序创建一个对象r,它是空的,意味着
r.size()= 0;
然后在第9行调用r.toString()方法,此方法调用getMean()。由于r.size是0,所以程序抛出异常
线程“main”中的异常java.lang.ArithmeticException:/ by zero