2011-08-10 174 views
3

编辑:对于一般的香港专业教育学院编写的代码,但我不知道如何让这个它也采用整数从我args.length而非阵列计算平均在Java

我需要写一个java程序可以计算出:1.读入的整数个数2.平均值 - 不一定是整数!

注意!我不想计算从数组中的平均值,但在参数中的整数。

目前我写了这个:

int count = 0; 
    for (int i = 0; i<args.length -1; ++i) 
     count++; 
    System.out.println(count); 

    } 

int nums[] = new int[] { 23, 1, 5, 78, 22, 4}; 
double result = 0; //average will have decimal point 
    { 
    for(int i=0; i < nums.length; i++){ 
    result += nums[i]; 
    } 
    System.out.println(result/count) 
} 

任何人都可以指导我在正确的方向?或者举一个例子来指导我以书写的方式来塑造这些代码?

在此先感谢

+3

args.length已经包含你的count,不需要第一个for循环。你有什么问题?你要求改进吗?你的代码是否工作?你想知道如何将'args []'转换为'int'数组吗? – Jacob

+0

'int count = args.length;'得到参数的数量.. –

+0

这两个代码是否相关?因为在2nd for循环中使用count。 –

回答

5

只是一些小的修改,你的代码会做(有一些变种重命名为清楚起见):

double sum = 0; //average will have decimal point 

for(int i=0; i < args.length; i++){ 
    //parse string to double, note that this might fail if you encounter a non-numeric string 
    //Note that we could also do Integer.valueOf(args[i]) but this is more flexible 
    sum += Double.valueOf(args[i]); 
} 

double average = sum/args.length; 

System.out.println(average); 

注意循环也可以简化为:

for(String arg : args){ 
    sum += Double.valueOf(arg); 
} 

编辑:OP似乎想要使用args阵列。这似乎是一个字符串数组,因此更新了相应的答案。

更新

作为zoxqoj正确地指出,整数/双溢出未在代码照顾的上方。虽然我假设输入值是足够小,不会存在这样的问题,下面是用于真正大的输入值的片段:

BigDecimal sum = BigDecimal.ZERO; 
for(String arg : args){ 
    sum = sum.add(new BigDecimal(arg)); 
} 

这种方法有几个优点(尽管是有点慢,所以不要使用它的时间关键型操作):

  • 精密保持,双你会逐渐松动精度数学运算的数量(或没有得到确切的精度可言,这取决于数字)
  • 的概率溢出实际上被消除了。但请注意,BigDecimal可能比适合doublelong的尺寸大。
+0

如果我是使用args.lengths而不是nums.length我会怎么做“sum + = nums [i] ;” ? – syncoroll

+0

@syncoroll重新阅读您更新的问题我也更新了我的答案。 – Thomas

+0

整数溢出没有照顾 – banjara

2

for (int i = 0; i<args.length -1; ++i) 
    count++; 

基本计算args.length再次,只是错误(循环条件应该是i<args.length)。为什么不直接使用args.length(或nums.length)呢?

否则你的代码似乎没问题。虽然看起来好像你想从命令行读取输入,但不知道如何将其转换为数字数组 - 这是你真正的问题吗?

0
System.out.println(result/count) 

因为结果/计数不为String类型,System.out的你不能做到这一点。println()只接受一个String参数。也许尝试:

double avg = (double)result/(double)args.length 
3
int values[] = { 23, 1, 5, 78, 22, 4}; 

int sum = 0; 
for (int i = 0; i < values.length; i++) 
    sum += values[i]; 

double average = ((double) sum)/values.length; 
0

为1的整数的数量读取,你可以使用数组的长度属性,如:

int count = args.length 

,让你没有任何元素的数组。 并2.计算平均值: 您正在以正确的方式进行操作。

0

相反的:

int count = 0; 
for (int i = 0; i<args.length -1; ++i) 
    count++; 
System.out.println(count); 

} 

你可以

int count = args.length; 

平均值为您ARGS你args来数除以总和。

int res = 0; 
int count = args.lenght; 

for (int a : args) 
{ 
res += a; 
} 
res /= count; 

你可以缩短这段代码,我会让你试着问你是否需要帮助!

这是我的第一个答案告诉我是否有错误!

+0

我使用参数时出错。 “线程中的异常”main“java.lang.Error:未解决的编译问题: \t类型不匹配:无法从元素类型字符串转换为int” – syncoroll

+0

请注意,res/= count将进行整数除法,因此肯定会收益错误的结果(OP指出平均值可能包含小数点)。 – Thomas

+0

@syncoroll你没有告诉我们'args'实际上是什么 - 因此它可能被认为是'int [] args'。很可能你有'String [] args'(它是一个'main'方法,对吗?) - 因此你必须将for循环改为for(String a:args)并调用res + = Integer。 parseInt(a)'里面。 – Thomas

0

如果你试图从命令行参数的整数,你需要这样的事:

public static void main(String[] args) { 
    int[] nums = new int[args.length]; 
    for(int i = 0; i < args.length; i++) { 
     try { 
      nums[i] = Integer.parseInt(args[i]); 
     } 
     catch(NumberFormatException nfe) { 
      System.err.println("Invalid argument"); 
     } 
    } 

    // averaging code here 
} 

至于实际的平均代码,其他人所说,你如何调整是(所以我不会重复他们所说的)。

编辑:实际上它可能会更好,只是把它上面的循环内,并且在所有

0

不使用nums阵列,我要告诉你2种方式。如果您的项目中不需要很多统计信息,只需执行以下操作。

public double average(ArrayList<Double> x) { 
    double sum = 0; 
    for (double aX : x) sum += aX; 
    return (sum/x.size()); 
} 

如果你打算做很多的统计数据可能不会重新发明轮子。那么为什么不退房http://commons.apache.org/proper/commons-math/userguide/stat.html

你会落入真正的luv!

0
public class MainTwo{ 
    public static void main(String[] arguments) { 
     double[] Average = new double[5]; 
     Average[0] = 4; 
     Average[1] = 5; 
     Average[2] = 2; 
     Average[3] = 4; 
     Average[4] = 5; 
     double sum = 0; 
     if (Average.length > 0) { 
      for (int x = 0; x < Average.length; x++) { 
       sum+=Average[x]; 
       System.out.println(Average[x]); 
      } 
      System.out.println("Sum is " + sum); 
      System.out.println("Average is " + sum/Average.length); 
     } 
    } 
}