我正在尝试获得五个数字的总和,平均值,最小值和最大值,但不知怎的,我得到了这个输出。我试图重新编码它,但它仍然是相同的。你能帮我看看这个家伙吗? 这是我的代码:
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)
最小和最大数字在某处...... 请一点意见......
答案 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设置为你的第一个输入数字。