2012-10-07 83 views
2

所以我正在试图编写一个程序来输出总和,平均值和最小值以及最大值。除了最小和最大值输出2147483647和-2147483647,我相信它们是Java将计算的绝对最小和最大值,我基本上已经找到了一切。无论如何,我想计算一个用户输入的数字,所以这显然是不正确的。Math.max和Math.min输出允许的最高和最低值

这是我的课。我认为addValue方法出了问题。

public class DataSet 
{ 
private int sum; 
private int count; 
private int largest; 
private int smallest; 
private double average; 

public DataSet() 
{ 
    sum = 0; 
    count = 0; 
    largest = Integer.MAX_VALUE; 
    smallest = Integer.MIN_VALUE; 
    average = 0; 
} 

public void addValue(int x) 
{ 
    count++; 
    sum = sum + x; 
    largest = Math.max(x, largest); 
    smallest = Math.min(x, smallest); 
} 

public int getSum() 
{ 
    return sum; 
} 

public double getAverage() 
{ 
    average = sum/count; 
    return average; 
} 

public int getCount() 
{ 
    return count; 
} 

public int getLargest() 
{ 
    return largest; 
} 

public int getSmallest() 
{ 
    return smallest; 
} 

} 

这里是我为这个项目测试类:

public class DataSetTester { 
public static void main(String[] arg) { 
    DataSet ds = new DataSet(); 
    ds.addValue(13); 
    ds.addValue(-2); 
    ds.addValue(3); 
    ds.addValue(0); 
     System.out.println("Count: " + ds.getCount()); 
     System.out.println("Sum: " + ds.getSum()); 
     System.out.println("Average: " + ds.getAverage()); 
    System.out.println("Smallest: " + ds.getSmallest()); 
     System.out.println("Largest: " + ds.getLargest()); 
} 
} 

一切正常输出(计数,求和,平均值),除了最小的和最大的数字。如果任何人都可以指出我做错了什么的正确方向,那会很棒。谢谢。

+0

对于记录,最小的'int'值是'-2147483648'而不是'-2147483647'。 –

回答

6

反向您largest & smallest初始值和Math.max & Math.min将相应选择正确的值:

largest = Integer.MIN_VALUE; 
smallest = Integer.MAX_VALUE; 

由于Integer.MIN_VALUE可能是最小的值为一个整数,声明:

largest = Math.max(x, largest); 

第一次调用时将产生值x

+0

谢谢。最后一部分真的为我清除了它。谢谢您的帮助。 – user1696162

2

在想你在你的初始化意味着:

largest = Integer.MIN_VALUE; 
smallest = Integer.MAX_VALUE; 
+0

啊,我的愚蠢的错误。谢谢你的答案。 只是为了清除一些东西,为什么要在查找最大数字时使用Integer.MIN_VALUE,并且对于Integer.MAX_VALUE也一样? 最大的似乎是最大值。 – user1696162

+0

@Reimeus说什么:) –