繁体   English   中英

在while循环中查找最大整数和最小整数

[英]Finding Maximum integer and minimum integer in a while loop

import java.util.Scanner;
public class Lab4 
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        System.out.print("Please enter integers (Zero to exit): ");

        //integers by value
        int n = in.nextInt();
        int evenNumber = -1;
        int oddNumber = 0;
        int count = 0;
        int largest = n;
        int smallest = n;
        int counter = 1;
        int total = 0;
        int average = 0;

        //boolean to end loop
        boolean done = false;

        //start of loop
        while (!done)
        {
            n = in.nextInt();
            total = total + n;
            //end loop method
            if (n == 0)
            {
                done = true;
            }
            //count number of integers entered
            else
            {
            count = count + 1;
            }
            //count of even numbers
            if ( n % 2 == 0){
                evenNumber = evenNumber + 1;
            }
            //count of odd numbers
            else
            {
                oddNumber = oddNumber + 1;
            }
            //find min and max integers !NOT WORKING!
            if (n > largest){
            }
            if (n < smallest){

            }
            if (count > 0){
                average = total / count;
            }
            else{
                    System.out.println("No Data Entered.");
                }
            counter++;
        }
        System.out.println("Total number of integers entered is: "+ count);
        System.out.println("Total even numbers entered: "+ evenNumber);
        System.out.println("Total odd numbers entered: "+ oddNumber);
        System.out.println("The largest integer: "+ largest);
        System.out.println("The smallest integer: "+ smallest);
        System.out.println("The average value is: "+ average);
    }
}

上面是我的代码,我已经尝试了所有方法,但没有得到任何错误,但是最小和最大的返回值没有正确返回,如果正整数我只能得到最大整数,而如果用户输入负整数则只有最小值。 任何帮助都是极好的!

您正在检查n个最大或最小。 但是您没有做作业。 尝试这个 :

if (n > largest){
  largest = n ;
}
if (n < smallest){
  smallest = n ;
}

您可以使用Math.min(int, int)Math.max(int, int)分别找到smallestlargest 您只需要一个count 您可以使用a声明多个int变量,而我将使用+++=使代码更加惯用 您可以使用break终止循环。 另外,请勿执行整数数学来确定平均值。 放在一起可能看起来像

// integers by value
int n = in.nextInt();
int evenNumber = 0, oddNumber = 0, count = 0, total = 0;
int largest = n, smallest = n;
// start of loop
while (true) {
    n = in.nextInt();
    // end loop method
    if (n == 0) {
        break;
    }
    total += n;
    count++;
    // count of even numbers
    if (n % 2 == 0) {
        evenNumber++;
    } else {
        oddNumber++;
    }
    largest = Math.max(n, largest);
    smallest = Math.min(n, smallest);
}
System.out.println("Total number of integers entered is: " + count);
System.out.println("Total even numbers entered: " + evenNumber);
System.out.println("Total odd numbers entered: " + oddNumber);
System.out.println("The largest integer: " + largest);
System.out.println("The smallest integer: " + smallest);
double average = total / (double) count;
System.out.println("The average value is: " + average);

可以通过在while循环条件中执行测试分配 消除break (这是另一个相当常见的习惯用法)

while ((n = in.nextInt()) != 0) {
    total += n;
    count++;
    if (n % 2 == 0) {
        evenNumber++;
    } else {
        oddNumber++;
    }
    largest = Math.max(n, largest);
    smallest = Math.min(n, smallest);
}

另一种可能的解决方案是使用ListCollections

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    List<Integer> list = new ArrayList<Integer>();

    int evenNumber=0;
    int oddNumber=0;
    int total=0;
    int n;

    System.out.print("Please enter integers (Zero to exit): ");

    while(true){
        n = in.nextInt();
        if(n==0) {
            break;
        } else {
            list.add(n);
            total += n;
            if(n%2==0){
                evenNumber++;
            } else {
                oddNumber++;
            }
        }
    }

    Collections.sort(list);

    System.out.println("Total number of integers entered is: "+ list.size());
    System.out.println("Total even numbers entered: "+ evenNumber);
    System.out.println("Total odd numbers entered: "+ oddNumber);
    System.out.println("The largest integer: "+ list.get(list.size() - 1));
    System.out.println("The smallest integer: "+ list.get(0));
    System.out.println("The average value is: "+ total/list.size());
}

错误是

int total = n;
int average = n;

结合需要

if (n > largest) {
  largest = n; // Probably already tried
}
if (n < smallest) {
  smallest = n; // Probably already tried
}

不幸的设计决定是在循环之前使用第一个元素(nextInt)进行正确的最大和最小初始化,这可能导致了这种疏忽。

或者,您可以完成以下操作:

int largest = Integer.MIN_VALUE;
int smallest = Integer.MAX_VALUE;

并将其余部分设为0,然后仅在循环中调用nextInt。

由于循环内未使用average ,因此可以在循环外确定average 您正在那里进行整数除法,因此可以考虑舍入:

int average = count == 0 ? 0 : (total + count/2)/count;
double average = count == 0 ? 0.0 : ((double) total) count; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM