Store and sort a list of user-entered integers.
Concepts: Review of arrays and loops.
Ask the user to enter a series of integers. Store these integers in an int[]
. When you declare this array, give it an initial size of 5 elements. Each time you would exceed the current capacity of the array, instead replace the array with a new array of double the size.
When the user is done (indicated by entering nothing--as with A12), print on one line all the numbers they entered in sorted order: highest to lowest value.
This program will sort the numbers you enter. Enter an integer (or nothing to stop): 0 Enter an integer (or nothing to stop): 12 Enter an integer (or nothing to stop): 5 Enter an integer (or nothing to stop): -2 Enter an integer (or nothing to stop): 12.5 Bad input: please enter only whole numbers (or, to quit, just hit enter). Enter an integer (or nothing to stop): nothing Bad input: please enter only whole numbers (or, to quit, just hit enter). Enter an integer (or nothing to stop): 5 Enter an integer (or nothing to stop): You entered: 12 5 5 0 -2
Note that sorting is worth only 1.0 points (which is equivalent to the late penalty), so worry about this last. Remember that you only need to print the numbers in sorted order, not necessarily get the array itself into that sorted order. Also, if you haven't filled your array to capacity, it will still contain 0s in the unused elements. So be careful not to sort these in among your real data.
Here are some different ideas on how you might achieve sorted output:
while (there are still elements in the list) { find the largest element in the list. (This requires a loop and conditional) remove the largest element from the list and print it }This is a simple variation of the selection sort algorithm. You could also sort the array into a second array or even sort the elements in place within the array itself.
java.util.Arrays
; remember again that your array may not always be full, so you may need to sort only a subset of it.)
Upload your UsernameA15.java
file to Tamarin.
int[]
to store the numbers read in from the user (0.5). You initially declare this array to be of size 5 (0.5). You double its size (and copy over all elements) each time the array capacity is exceeded (0.5).
int nums = new int[5]; int count = 0; //tracks how many numbers have been added to nums //while user keeps entering numbers int number = //user's number if (count == nums.length) { //nums array is full, so we need to double it's size int temp[] = new int[nums.length * 2]; //larger temporary array //copy each value from nums into temp nums = temp; //replace nums with larger temp array } //add number to the end of nums nums[count] = number; count++; //end while //print entered numbersNote that this code does not handle the sorting yet.
nums
array before the input loop, or else it'll get recreated each time through the loop. Make sure you actually copy the user's input into the array at some point. Also, if this only happens when you enter more than 5 numbers, make sure you copied everything over correctly when doubling the size of the array.
nums.length
, or similar) rather than only those numbers you entered (as recorded in your count
variable). In your printing loop, loop only up to count
, not to nums.length
.
If the 0s only show up after you sort (but not if you print out the array before sorting it), then see the next FAQ.
nums.length
and count
while sorting. This is similar to what happen when you print, as explained above. For example, imagine you've entered 6 numbers and so your array looks like this:
[7 12 -3 4 7 -1 | 0 0 0 0]
The '|' marks where count
is. If you sort the entire array, it'll then look like this:
[12 7 7 4 0 0 | 0 0 -1 -3 ]Thus, when you print out the first
count
numbers, you'll have "lost" some of them.
Instead, you want to sort only up to count
, not to nums.length
. (If you wrote a separate method to do your sorting, you'll need to pass in a second parameter with this value of how many numbers to sort.) Thus, you should get this:
[12 7 7 4 -1 -3 | 0 0 0 0 ]