读取非负整数列表并显示最大整数,最小整数和所有整数的平均值

时间:2016-06-11 07:07:17

标签: java if-statement while-loop

我在计算最大和最小数字时遇到了一些问题...如果我输入的第一个数字比第二个数字输入的数字大,它将不会将第一个数字记录到最大数字......

看看输出,它将有助于更好地阐述.. Calculation Error..& 1st input problem.. 下面的代码!

 NSString *dbName = [[NSBundle mainBundle] pathForResource:@"dbFile" ofType:@"db"];

3 个答案:

答案 0 :(得分:1)

如果您使用 Java 8 ,则可以构建IntStream,并使用IntSummaryStatistics自动提取这些数字。您可以在Oracle here中找到官方文档。

以下是实现此目的的代码:

    List<Integer> input = new ArrayList<>(); 
    while (true) { // LOOP till user enter "-1"
        number = kb.nextInt();

        // Condition for the loop to break
        if (number <= -1) {
            System.out.println("End Of Input");
            break;
        } else {
            input.add(number);
        }
    }
    IntSummaryStatistics z = input.stream() // gives Stream<Integer>
            .mapToInt(Integer::intValue) // gives IntStream
            .summaryStatistics(); // gives you the IntSummaryStatistics
    System.out.println(z);

如果您输入8 3 7,则输出将为:

IntSummaryStatistics{count=3, sum=18, min=3, average=6.000000, max=8}

我希望它有所帮助!

答案 1 :(得分:0)

这样做:

public static void main(String[] args) {

int smallest = Integer.MAX_VALUE;
int largest = 0;
int number;
double totalAvg = 0;
double totalSum = 0;
int count = 0;

Scanner kb = new Scanner(System.in);

System.out.println("Enter few integers (Enter negative numbers to end input) :");
while (true) { //LOOP till user enter "-1"
    number = kb.nextInt();

    //Condition for the loop to break
    if (number <= -1) {
        System.out.println("End Of Input");
        break;
    } else {
        count = count + 1;
    }

    if (number < smallest) { //Problem 1 : If 1st input num is bigger than 2nd input num,
        smallest = number;  // largest num will not be recorded..
    }

    //REMOVED ELSE ADDED another IF

    if (number > largest){
        largest = number;
    }

    totalSum = totalSum + number;
    totalAvg = (totalSum / count);

}

System.out.println("The smallest number you have entered is : " + smallest);
System.out.println("The largest number you have entered is : " + largest);
System.out.println("The total sum is : " + totalSum);
System.out.println("The total average is : " + totalAvg);
System.out.println("Count : " + count);
} // PSVM

答案 2 :(得分:0)

问题是你的if语句,因为逻辑是有缺陷的。如果输入的数字小于最小值,则更新最小的数字。到目前为止一切都是正确的出现此问题,因为您更新了else部分中的最大值。这意味着,如果数字不是最小的,则覆盖最大数字。但如果数字大于最小数,则不会自动最大。正确的方法是检查数字是否大于新if语句中的最大数量,并且仅在这种情况下更新为最大值。