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

Java 如何使用do-while循环获得五个数字的和、平均值、最小值和最大值,java,do-while,Java,Do While,我试图得到五个数字的和、平均值、最小值和最大值,但不知怎的,我得到了这个输出。我试图重新编码,但它仍然是一样的。你能帮我查一下这家伙。。。 这是我的密码: import java.util.*; public class Kleine { public static void main(String[] args) { Scanner scan = new Scanner(System.in); double average; int c

我试图得到五个数字的和、平均值、最小值和最大值,但不知怎的,我得到了这个输出。我试图重新编码,但它仍然是一样的。你能帮我查一下这家伙。。。 这是我的密码:

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);
    }
}
最小值和最大值都在某个地方。。。
请给我一点建议…

最小值和最大值现在等于整数的最大值和最小值。现在,如果任何数字小于最小值且大于最大值,则最小值和最大值将占据其位置。平均值和总和功能非常好。代码中的问题是,它在执行输入循环后获得最大值和最小值。流量是错误的

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);
        }

    }
import java.util.*;
公共级Kleine{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
双倍平均;
int count=0,sum=0,num=0;
int max=整数的最小值;
int min=整数最大值;
System.out.println(“请输入您希望评估的数字:”);
做{
如果(num>max)max=num;

如果(num处理最小/最大值的最佳方法是在读取每个值时跟踪它们:

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;
int和=0;
int max=整数的最小值;
int min=整数最大值;
对于(int i=0;i<5;++i){
num=scan.nextInt();
如果(num>max)max=num;
如果(num
我用最小/最大的整数值分别为max和min值设定种子。这让我们能够在读取时捕获实际的min和max值。此外,我认为基本
for
循环比
do
while循环更有效

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

使用

int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
还有你的

{
          if(num>max)
               max=num;
            if(num<min)
               min=num;
     }
{
如果(数值>最大值)
max=num;

如果(num作为开始,您可以使用
Math.min
Math.max
。平均值为sum/count

在没有循环的情况下获取最小值的示例如下:

long min = Integer.MAX_VALUE;
min = Math.min(min, 9);
min = Math.min(min, 4);
min = Math.min(min, 6);
// min = 4
为max做类似的事情


您最好从一个数字列表或数组开始。正确输出,然后添加更复杂的内容,如用户输入。

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

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()));
        }
    }
}
import java.util.ArrayList;
导入java.util.IntSummaryStatistics;
导入java.util.List;
导入java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
列表编号=新的ArrayList();
扫描仪输入=新扫描仪(系统输入);
while(true){
System.out.println(“下一个号码?”);
add(in.nextInt());
IntSummaryStatistics summaryStatistics=numbers.stream()
.mapToInt(整数::valueOf)
.summaryStatistics();
System.out.println(String.format(“最大值:%d,最小值:%d,平均值:%s,总和:%d”),summaryStatistics.getMax(),summaryStatistics.getMin(),summaryStatistics.getAverage(),summaryStatistics.getSum());
}
}
}

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

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;
do{
num=scan.nextInt();
sum+=num;
如果(计数=0){
min=num;
max=num;}
如果(数值>最大值)
max=num;

如果(num总和必须是19,但当我运行此代码时,它会变成18。它为什么会递减?@ArsusKleineBuenafe我编辑了代码,最新代码是否给了你一个不正确的总和?@ArsusKleineBuenafe你的示例的总和是19,我更新的代码也给了19。它对我来说运行正确。代码正在运行,但平均值没有给出正确的值。)回答正确。不过谢谢你,我只是在平均值上加了.0d=sum/5。所以这段代码(平均值=sum/5.0d)给我正确的答案。如果我输入所有正值,这将无法正常工作。最小值将为0。如果我输入所有-ve值,最大值也将为0。它适用于任何情况,我的朋友,我建议你运行代码。我认为我不需要运行代码。很明显,在原始代码中,最小值和最大值在循环外由0初始化。Maybe,您应该运行代码并检查..:)您需要使用int max=Integer.MIN_值;int MIN=Integer.max_值;谢谢,这很有效,但不知怎的,您能找到修复总和的方法吗?输出的总和总是减少一(1)。我试图找到错误,但不知何故,我被搞糊涂了。@ArsusKleineBuenafe我看不出总和有问题,即使在您的原始代码中,它的计算是正确的。也许您(预期的)数学是错的。
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;