Write a program that reads in an arbitrary number of integers and then displays the total, the average, and the lowest number entered.
Concepts: while
loops, (for
loops); Integer.parseInt()
, Double.parseDouble()
Textbook: 5.5, 5.8; 3.8
Use a loop to allow the user to enter as many int
s as they like. Keep a running total (and count) of the numbers entered. Display the current total after each number entered. If the user enters anything other than (or in addition to) an int
, print an error message and ignore that input, but keep reading numbers. If the user enters nothing, the program should stop reading numbers.
Once the user has indicated that they are done entering numbers, print the sum of all the entered numbers, their average (as a double), and the smallest (closest to negative infinity) number entered.
Do not use any arrays, ArrayLists
, or other Collections
to complete this assignment.
D:\TA\grading\A12>java ZtomaszeA12 This program will average a series of integers. Enter a number (or nothing to stop): 10 Total: 10 Enter a number (or nothing to stop): 5 Total: 15 Enter a number (or nothing to stop): 12.2 Bad input: please enter only integers (or, to quit, just hit enter). Enter a number (or nothing to stop): -3 Total: 12 Enter a number (or nothing to stop): quit Bad input: please enter only integers (or, to quit, just hit enter). Enter a number (or nothing to stop): stop Bad input: please enter only integers (or, to quit, just hit enter). Enter a number (or nothing to stop): 1 more Bad input: please enter only integers (or, to quit, just hit enter). Enter a number (or nothing to stop): 4 Total: 16 Enter a number (or nothing to stop): Total: 16 Average: 4.0 Lowest number entered: -3 D:\TA\grading\A12>java ZtomaszeA12 This program will average a series of numbers. Enter a number (or nothing to stop): 9 Total: 9 Enter a number (or nothing to stop): 4 Total: 13 Enter a number (or nothing to stop): 13 Total: 26 Enter a number (or nothing to stop): Total: 26 Average: 8.666666666666666 Lowest number entered: 4 D:\TA\grading\A12>java ZtomaszeA12 This program will average a series of numbers. Enter a number (or nothing to stop): You did not enter any numbers.
Note how the user might not enter a number at all; or they many enter multiple errors in a row. Your program should still handle this gracefully.
nextInt()
to read in the numbers for this one. If you did, the program would hang until the user entered one or more non-white-space characters.
nextLine()
to read in everything they typed. If this is an empty string, they mean to quit; otherwise, turn it into an int using Integer.parseInt()
. Remember that Integer.parseInt()
throws a NumberFormatException
if it cannot turn the given String into a int
.
lowest
. If it is a lower value, replace the value lowest
it with this new value.
lowest
that is less than any number the user might enter. Integer.MAX_VALUE
would be useful for this.
count
variable that tracks how many numbers the user has entered. If this is the first number entered by the user, just assign it to lowest
. If it is a later value, then compare it to the value in lowest
to see if you should replace it.
Upload your UsernameA12.java
file to Tamarin.
int
(0.5). The loop ends if the user enters nothing (0.5).
int letter = 'a'; letter++;
)
switch
)
isEmpty()
method, though; it's not available in Java 5, so your code won't compile on Tamarin.)
It usually helps me to write a hard program one step at a time, where I compile, run, and test after each step. With loops, I often find myself working from the inside out. Ignore the loop to start with and just try to get your program to compile/work for only a single number. Read in the user's input as a String and then convert it to a number. Then add the error handling for times when the String cannot be turned into a number.
So, in preparation for the finished program, you want to make sure you handle three situations: the user enters an integer, something that is not an integer, or nothing. On a number, print the total (which, for one number, will be the same as the number itself). On a word, print an error message. On nothing, print nothing (for now).
So, to produce the output I just described, you'll have the following pieces of code (though not necessarily in this order):
Now, once you get this compiled and running, test that you get the output described for each of the three kinds of input. Once you do, this is the code you want to repeat over and over in a loop.
So then see if you can wrap a while loop around this somehow. Ideally, you will still have each element of code occur only once. That is, even when using a loop, it is possible (though not required) to still have one call to nextLine()
, one try/catch, one call to parseInt
, and so on.
Note that you probably won't print the final results until after the loop.
parseInt
work again?
String input = ...; int num = Integer.parseInt(input);Remember that it might throw a
NumberFormatException
if input
cannot be converted to a meaningful number. Both the exception and the Integer
class are in java.lang
, so no import is required to use them.
NaN
if the user enters no numbers.
ArithmeticException
.) Since you also won't be able to correctly print the lowest value entered if the user entered 0 numbers, I recommend using a conditional to check that your number count isn't 0 before trying to print the final results.