2014-09-25 116 views
0
import java.util.*; 
public class Lab5_2{ 
    public static void main(String[]args){ 

     Scanner scan = new Scanner(System.in); 
     int num=0; 
     boolean choice=true; 
     int min= Math.min(100, num);// need to fix the min to the avg, won't print out 
     int max= Math.max(0, num); 
     int sum=+ num; 
     double avg= sum/(num+1); 

     while(choice==true){ 
      if(num>=0 && num<=100){ 
       System.out.println("Please enter a number between 0 and 100 "); 
       num= scan.nextInt(); 
       System.out.println("You entered: " + num);  
      }else if(num<0 || num>100){ 
       choice=false; 
       System.out.println("Thank you "); 
      } 
     } 
    } 
    /* 
     System.out.println("Min = " + min); 
     System.out.println("Max = " + max); 
     System.out.println("Sum = " + sum); 
     System.out.println("Avg = " + avg);*/ 
} 

我知道这是比较容易的方式,然后我做它似乎,但我不能为我的生活弄清楚如何把我的代码来计算min,max,sum和avg。我需要它,以便我可以输入任意数量的数字并且不使用数组来计算它们(因为我的类没有得到)。如何计算最小值,最大值,总和,和AVG

预先感谢您

+3

请修复您的缩进。 – 2014-09-25 20:31:24

+1

我认为一旦你进入while循环,你永远不会得到新的最小/最大/平均计算。但正如Jeremy所说的那样修复你的缩进:) – Quantico 2014-09-25 20:36:30

回答

3

首先,你应该采取Scanner.read while循环之外,因为你不想要的是不是你的范围内,要处理的数字:

while (choice) { 
    System.out.println("Please enter a number between 0 and 100 "); 
    num = scan.nextInt(); 
    if (num >= 0 && num <= 100) { 
     // accept number and update min, max, sum 
    } else { 
     choice = false; 
    } 
} 
现在

,让我们计算那些我们以后的值:

  • 计算sum很简单:首先,我们的总和0,每个接受编号是累积的。因此,要计算总和,我们只需添加numsum = sum + num

  • 最小值总是至少与先前迭代的最小值一样大。我们不需要知道任何其他迭代的值,因此不需要数组(或其他集合)来存储它们。我们只需检查num是否小于以前的最小值,并替换最小值(如果为真),即if (num < min) min = num;。这里还有一个速记符号:min = num < min ? num : min;

  • 计算最大值等于计算最小值(正好相反)。我相信你可以找出解决方案。

  • 平均值不能在每次迭代中更新。但我们可以在最后计算它。平均值是多少?这是总和除以加数的总和。所以你需要计算你读了多少次。您可以通过存储您在每次迭代中增加的额外变量来完成此操作。

有了这些信息,您应该可以编写代码。请注意,在进入循环之前正确初始化变量至关重要。仔细想一想。此外,还有一个需要考虑的角落案例:如果用户没有输入单个号码,会发生什么情况?在这种情况下,你的价值观应该是什么?不要忘记零分区是未定义的!