如何添加节点<Integer>列表以获得平均值?



我应该创建一个计算平均值的方法。我不明白为什么我会遇到这么多麻烦。我的列表生成了一组随机数,但我的方法中一直出现一个错误,说"线程中的异常"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;

相关内容

  • 没有找到相关文章

最新更新