TheMuffinMan
TheMuffinMan

Reputation: 55

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

Above is my code, I have tried everything, I have not gotten any errors however the smallest and largest return does no come back correctly, I only get the Maximum integer if its positive and only minimum if user inputs a negative integer. Any help would be awesome!

Upvotes: 1

Views: 4530

Answers (4)

ma3stro
ma3stro

Reputation: 313

Another possible solution is using List and Collections :

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

Upvotes: 0

Joop Eggen
Joop Eggen

Reputation: 109557

The error was

int total = n;
int average = n;

in combination of needing

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

The unfortunate design decision to use the first element (nextInt) before the loop to have a correct largest and smallest initialized, probably led to this oversight.

Alternatively you could have done:

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

and initalize the rest on 0, and call nextInt in the loop only.

As average is not used inside the loop, you can determine it outside. You are doing integer division there, so might consider rounding:

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

Upvotes: 0

Elliott Frisch
Elliott Frisch

Reputation: 201447

You can use Math.min(int, int) and Math.max(int, int) to find the smallest and largest respectively. You only need one count. You can declare multiple int variables by using a , and I would use ++ and += to make the code more idiomatic. And you can use break to terminate a loop. Also, don't perform integer math for determining the average. Putting that together might look like

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

You could eliminate the break by performing the test and assignment in the while loop conditional (this is another fairly common idiom)

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

Upvotes: 3

burakozgul
burakozgul

Reputation: 797

You are checking n largest or smallest. But you are not doing assignment. Try this :

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

Upvotes: 4

Related Questions