Reputation: 55
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
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
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
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
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