// Arup Guha
// 2/19/2016
// Example for Junior Knights
// Covers Arrays.sort of int and String, and Collections.sort of Integer and String.

import java.util.*;

public class javasorts {

	public static Random r;

	public static void main(String[] args) {

		r = new Random();

		// Randomly generate an array and print.
		int[] testArray = makeRandomArray(20, 100);
		print(testArray);

		// Sort and print again.
		Arrays.sort(testArray);
		print(testArray);

		// Now test strings.
		Scanner stdin = new Scanner(System.in);
		System.out.println("How many names are you going to enter?");
		int n = stdin.nextInt();

		// Create a String array of the correct size and read in each name.
		String[] names = new String[n];
		for (int i=0; i<n; i++) {
			System.out.println("Please enter name #"+(i+1));
			names[i] = stdin.next();
		}
		printStrings(names);

		// Sort and print again.
		Arrays.sort(names);
		printStrings(names);

		// An ArrayList of Integer.
		ArrayList<Integer> list = new ArrayList<Integer>();
		for (int i=0; i<10; i++)
			list.add(r.nextInt(50));

		// Print my random list of Integer.
		printList(list);

		// Sort it.
		Collections.sort(list);

		// Print again.
		printList(list);

		// Sorting an ArrayList of Strings.
		System.out.println("How many names to enter now?");
		n = stdin.nextInt();

		// Create the array list.
		ArrayList<String> myNames = new ArrayList<String>();

		// Directly add each name into the list.
		for (int i=0; i<n; i++) {
			System.out.println("Please enter name #"+(i+1));
			myNames.add(stdin.next());
		}

		// Print all the names.
		printList(myNames);

		// Sort and print again.
		Collections.sort(myNames);
		printList(myNames);

	}

	// Creates an array with size elements, randomly filled with values
	// in between 1 and maxVal, inclusive.
	public static int[] makeRandomArray(int size, int maxVal) {
		int[] array = new int[size];
		for (int i=0; i<size; i++)
			array[i] = r.nextInt(maxVal) + 1;
		return array;
	}

	// Prints out the contents of array.
	public static void print(int[] array) {
		for (int i=0; i<array.length; i++)
			System.out.print(array[i]+" ");
		System.out.println();
	}

	// Prints out all strings in array/
	public static void printStrings(String[] array) {
		for (int i=0; i<array.length; i++)
			System.out.print(array[i]+" ");
		System.out.println();
	}

	// Prints out all the elements in an ArrayList.
	public static void printList(ArrayList list) {
		for (int i=0; i<list.size(); i++)
			System.out.print(list.get(i)+" ");
		System.out.println();
	}
}