2012-01-07 199 views
1

使用循环我想计算Java中n个数的平均值,当用户输入0时循环结束。 这里是我写的代码:java中n个数的平均值

public class start { 
    public static void main(String[] args) { 
     System.out.println("Enter an int value, the program exits if the input is 0"); 
     Scanner input = new Scanner (System.in); 
     int h = 0; 
     while (input.nextInt() == 0){ 
      int inp = input.nextInt(); 
      int j = inp; 
      int i = 0; 
      h = j + i; 
      break; 
     } 

     System.out.println("The total is: "+ h); 
    } 
} 

难道我做任何逻辑上的错误?

+0

+1努力! – Venki 2012-01-07 05:14:10

+0

尝试用实数跟踪程序。然后尝试用真实数字运行程序。这听起来像你没有做过。 – 2012-01-07 05:15:32

+0

如果您使用调试器来遍历您的代码,您将能够看到每行代码的作用并理解您的程序。当程序行为是一种你不期望的方式时,这给你一个暗示,你需要改变以修复它。顺便说一句:我会打电话给总变量'total',我会使用'long'类型来避免下溢/溢出。 – 2012-01-07 08:44:28

回答

1

“我在做任何逻辑错误?”

是的。这看起来像一个家庭作业问题,所以我不会为你拼出来,但想想i的价值是什么,以及h = j + i在这种情况下意味着什么。

您还需要注意拨打input.nextInt()。当你每次通过循环调用两次时(这是你在做什么)会发生什么?

1

家庭作业,对吧?

在while循环条件下调用input.nextInt()并且填写int inp意味着每次通过循环的行程都读取两个数字(忽略其中一个数字)。您需要找出一种方法,每次迭代只读取一个数字,并将它用于== 0比较以及inp

此外,你已经做了有h while循环外的正确的事情,但我想你混淆自己与ji内循环。你可能会考虑稍微描述性的名字 - 这会让你的代码更容易推理。

0

您需要保留一个计数器,您可以读取多少个数字,以便可以将总数除以该数字以获得平均值。

0

编辑while循环:

while(true){ 
    int e=input.nextInt(); 
    if(e==0) break; 
    h+=e; 
    numberOfItems++; 
} 

你原来实行两次调用nextInt(),它丢弃每隔数(这绝对不是你打算做)的效果。

1
  • 不要命名总和h,而是总和。
  • while-condition有问题
  • 为什么使用inp和j和i?
  • 有无条件的休息 - 为什么?
  • 你谈论的平均水平。你知道平均值是多少?
  • 您的输出消息不是平均值 - 而是总和。
0

假设您只询问一次用户,输入以及如果数字为零,您只需显示平均值。您需要一个在while循环之外声明的变量,它将继续添加由用户输入的不同数字,以及第二个变量,该变量跟踪用户输入的个案数量并不断递增,直到数字不为零用户。而当用户输入0时,循环会中断,这里我们的平均值将被显示。

import java.util.Scanner; 

public class LoopAverage 
{ 
    public static void main(String[] args0) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter any Integer value : "); 
     int value = -1, sum = 0, count = 0; 
     while((value = scan.nextInt()) != 0) 
     { 
     count++; 
     sum = sum + value; 
     } 
     System.out.println("Average : " + (sum/count)); 
    } 
} 

希望这可以帮助,

问候

0

是,逻辑错误的巨量。

  • while循环的条件是错误的,你就吃下 你进入,除非这个数字是0,你永远不会进入所有
  • 我VAR循环中的第一个值没有目的
  • 你一个迭代后打破
  • 你不计算运行总计
  • 你不增加计的平均股息
  • 你不计算平均
  • 这看起来像你一起扔了一些代码,并发布它。试图运行最明显的错误就会发现。

其他需要考虑的因素:

  • 确保由0
  • 如果你做一个整数除法,你可能最终得到一个不正确的 平均检查鸿沟,因为这将是圆润。最佳投或者除数或 股息为float
  • 变量名应该是有帮助的,养成使用它们
0

的习惯,我建议你参考的“而”循环中的条件:如果条件会议,该计划将做什么? (如果你知道一点点VB,那么...之间有什么区别,直到......并且......而......)

另外,当你调用scanner.nextInt()时,该计划是做什么的?对于每个输入,你应该怎么称呼它?

最后但并非最不重要,什么时候应该使用“break”或“continue”?

对于基础知识,如果你在课程中,建议你理解笔记。或者你可以找到一些解释Java细节的好书。例如用Java思考

享受学习Java。