如何使用do-while循环获得五个数字的总和,平均值,最小值和最大值-java

时间:2018-01-29 12:55:25

标签: java do-while

我正在尝试获得五个数字的总和,平均值,最小值和最大值,但不知怎的,我得到了这个输出。我试图重新编码它,但它仍然是相同的。你能帮我看看这个家伙吗?     这是我的代码:

import java.util.*;

public class Kleine {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        double average;
        int count = 0, sum = 0, num, min = 0, max = 0;

        System.out.println("Please enter the number of numbers you wish to evaluate:");

        do {
            num = scan.nextInt();
            sum += num;
            count++;
        } while (count < 5);

        average = sum / 5;

        {
            if (num > max) {
                max = num;
            }

            if (num < min) {
                min = num;
            }
        }

        System.out.println("Your average is: " + average);
        System.out.println("The sum is: " + sum);    

        System.out.println("Your maximum number is: " + max);
        System.out.println("Your minimum number is: " + min);
    }
}

这是输出:

Please enter the number of numbers you wish to evaluate:
1
10
5
-3
6
Your average is3.0
The sum is:19
Your maximum number is 6
Your minimum number is 0
BUILD SUCCESSFUL (total time: 19 seconds)

最小和最大数字在某处...... 请一点意见......

6 个答案:

答案 0 :(得分:2)

处理最小值/最大值的最佳方法是跟踪每个值中的读数:

int sum = 0;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;

for (int i=0; i < 5; ++i) {
    num = scan.nextInt();
    if (num > max) max = num;
    if (num < min) min = num;
    sum += num;
}

double average = sum / 5.0d;

我分别用最小/最大整数值对max和min值进行种子设定。这使我们可以在读入时捕获实际的最小值和最大值。此外,我认为基本的for循环比do while循环更好。

请注意,我使用double类型计算平均值,因为它可能不是纯整数值(即使在样本数据中,平均值也不是整数)。

答案 1 :(得分:1)

使用

int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;

和你的

{
          if(num>max)
               max=num;
            if(num<min)
               min=num;
     }

需要在do-while循环中,否则它只运行输入的数字的最后一个值。

答案 2 :(得分:0)

Min和Max现在等于整数的最大值和最小值。现在,如果任何数字小于min且大于max,则min和max取其位置。平均值和总和功能很棒。您的代码中的问题是在执行输入循环后获得最大值和最小值。流程是错误的。

import java.util.*;
        public class Kleine {
        public static void main(String[] args) {
            Scanner scan=new Scanner(System.in);
            double average;
        int  count=0, sum=0, num=0;
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;   
        System.out.println("Please enter the number of numbers you wish to evaluate:");
        do{
        if(num>max) max=num;
        if(num<min) min=num;
        num=scan.nextInt();
        sum+=num;
        count++;
        }while(count<5);
         average = sum/5;
        System.out.println("Your average is"+average);
        System.out.println("The sum is:"+sum);    
        System.out.printf("Your maximum number is %d\n",max);
        System.out.printf("Your minimum number is %d\n",min);
        }

    }

答案 3 :(得分:0)

首先,您可以使用Math.min&amp; Math.max。平均值是总和/计数。

获取没有循环的最小数字的示例是:

long min = Integer.MAX_VALUE;
min = Math.min(min, 9);
min = Math.min(min, 4);
min = Math.min(min, 6);
// min = 4

为最大值做类似的事情。

从列表或数组开始,你也会更好。获得正确的输出,然后添加更复杂的内容,如用户输入。

答案 4 :(得分:0)

您可以这样做而无需定义要读取的整数:

import java.util.ArrayList;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        Scanner in = new Scanner(System.in);
        while (true) {
            System.out.println("Next number?");
            numbers.add(in.nextInt());
            IntSummaryStatistics summaryStatistics = numbers.stream()
                    .mapToInt(Integer::valueOf)
                    .summaryStatistics();
            System.out.println(String.format("Max: %d, Min: %d, Average: %s, Sum: %d", summaryStatistics.getMax(), summaryStatistics.getMin(), summaryStatistics.getAverage(), summaryStatistics.getSum()));
        }
    }
}

答案 5 :(得分:0)

如果我只是更改现有代码,逻辑应如下所示:

do{
    num=scan.nextInt();
    sum+=num;
      if(count==0){
      min=num;
      max=num;}
      if(num>max)
               max=num;
            if(num<min)
               min=num;

    count++;
    }while(count<5);
     average = sum/5;

问题是你的最小 - 最大条件是在循环之外并且你正在将min和max初始化为0.你应该将min / max设置为你的第一个输入数字。