我应该创建一个计算平均值的方法。我不明白为什么我会遇到这么多麻烦。我的列表生成了一组随机数,但我的方法中一直出现一个错误,说"线程中的异常"main"java.lang.ArymetricException:/by-zero在Node.avg(Node.java:58)在Node.main(Node.java:51)"
public class Node<T>
{
private T data; // data portion
private Node<T> next; // link to next node
public Node(T dataPortion)
{
data = dataPortion;
next = null;
} // end constructor
public Node(T dataPortion, Node<T> nextNode)
{
data = dataPortion;
next = nextNode;
} // end constructor
public T getData()
{
return data;
} // end getData
public void setData(T newData)
{
data = newData;
} // end setData
public Node<T> getNextNode()
{
return next;
} // end getNextNode
public void setNextNode(Node<T> nextNode)
{
next = nextNode;
} // end setNextNode
public static void main(String[] args)
{
Integer num;
LList<Integer> firstNode = new LList<Integer>();
for (int counter = 0; counter < 5; counter ++)
{
num = new Integer((int)(Math.random() * 100));
firstNode.add(num);
avg(firstNode);
}
}
public static int avg(LList<Integer> firstNode)
{
int count = 0, total = 0;
int avg = total/count;
for (int i = 1; i < 5; i++)
{
total += ((ListInterface<Integer>) firstNode).getEntry(i);
count++;
}
return avg;
在找出计数和总数之前,您正在尝试计算平均值。
现在,你正在做:
int count = 0, total = 0;
int avg = total / count;
// for loop to find count and total
return avg
当你试图找到平均值时,总和和计数仍然等于零,所以很自然地你会得到一个被零除的异常。相反,在循环后进行除法:
public static int avg(LList<Integer> firstNode)
{
int count = 0, total = 0;
for (int i = 1; i < 5; i++)
{
total += ((ListInterface<Integer>) firstNode).getEntry(i);
count++;
}
return total / count;
}
这里有一个错误:
int count = 0, total = 0;
int avg = total/count; //HERE
您正在将计数初始化为0,然后尝试除以0来初始化平均值。每次都会失败。
您可以将任何东西除以零
您划分了total/count
,两者都用0 初始化
您应该在for循环之后找到avg
您可能需要在for循环之后进行除法,否则很明显count
为零:
int count = 0, total = 0;
for (int i = 1; i < 5; i++)
{
total += ((ListInterface<Integer>) firstNode).getEntry(i);
count++;
}
int avg = total/count;
return avg;
此外,平均值很可能是实数,而不是整数。因此,计算最好如下:
double avg = ((double)total) / count;