I made a new version of this which was actually not behaving correctly, because it showed duplicated values, it just didn't add them again, this is the link to [that program][1], someone point at correctly I think that the problem didn't state that student should use an ArrayList, but an Array, so I made this program again with an array, and I think is a lot better now. I would love some feedback, is this good code? I'm following the advices I got in my last [post, please check answers][1]. It works very well now and it took me quite a few hours to get it to work properly, but I loved coding it and learnt quite a few things. ---------- **class TestUserInputDataHandler** import javax.swing.JOptionPane; /* * 7.12 (Duplicate Elimination) Use a one-dimensional array to solve the following * problem:Write an application that inputs five numbers, each between 10 and 100, * inclusive. As each number is read, display it only if it’s not a duplicate of * a number already read. Provide for the “worst case”, in which all five numbers * are different. Use the smallest possible array to solve this problem. Display * the complete set of unique values input after the user enters each new value. */ public class TestUserInputDataHandler { public static UserInputDataHandler userInputContainer; public static void main(String[] args) { final int USER_INPUTS = 5 ; //create UserInputDataHandlerObject userInputContainer = new UserInputDataHandler() ; //ask user to enter five valid int values //everytime user inputs a new value, show non-duplicate ones for ( int i = 0 ; i < USER_INPUTS ; i++ ) { //let user input data getUserInput() ; //print not duplicated values entered by user printNonDuplicates() ; } } public static void printNonDuplicates(){ String nonDuplicatedValues = userInputContainer.nonDuplicatedValuesWithFormat(); JOptionPane.showMessageDialog(null, String.format ("Nonduplicated values:\n%s",nonDuplicatedValues) ); } public static void getUserInput(){ //ask user to enter a new value and store it in a variable int newUserInput = Integer.valueOf(JOptionPane.showInputDialog(null, "Enter a value between 10 and 100 inclusive)")) ; //let the container handle the new user input userInputContainer.handleUserInput(newUserInput); } } ---------- **class UserInputData** public class UserInputData { //userInput field:it must be between 10 and 100 inclusive int userInput ; //isDuplicated field:false ONLY if number was entered by user once boolean isDuplicated ; //constructor public UserInputData ( int input ) { //check if input is valid if ( inputIsValid ( input ) ){ this.userInput = input ; this.isDuplicated = false ; }else{ throw new IllegalArgumentException ( "Invalid user input (must be between 10 and 100 inclusive" ) ; } } //userInput getter public int getNumericData (){ return userInput ; } //isDuplicated getter public boolean isDuplicated(){ return this.isDuplicated; } public boolean inputIsValid ( int input ){ //constants declaration final int UPPER_BOUND = 100 ; final int LOWER_BOUNDS = 10 ; //return boolean if data is valid or invalid if ( input >= LOWER_BOUNDS && input <= UPPER_BOUND ){ return true ; }else{ return false ; } } public void setAsDuplicated () { this.isDuplicated = true ; } } ---------- **class UserInputDataHandler** public class UserInputDataHandler { //Array of not-duplicated valid user input UserInputData[] handler ; //constants final int USER_INPUTS = 5 ; //constructor public UserInputDataHandler(){ this.handler = new UserInputData[USER_INPUTS] ; } //handles user's input public void handleUserInput (int newInput) { int storagePos = 0 ; //check if number already exists in array if ( ( storagePos = numberAlreadyEntered (newInput ) ) >= 0 ) { //set contained UserInputData object as duplicated this.handler[storagePos].setAsDuplicated(); }else{ //create UserInputData object UserInputData userInput = new UserInputData(newInput) ; //store new UserInputData object @handler's storagePos //value needs to be converted to possitive this.handler[ Math.abs(storagePos + 1)] = userInput ; } } //find @storagePos where newInput should be stored,or set repeated input as duplicated public int numberAlreadyEntered (int newInput ){ //variable to go over handler int storagePos = 0 ; //check if the value was already entered while ( //handler[storagePos] is not null this.handler[storagePos] != null && //if handler[storagePos] doesn't have newInput's numerical value newInput != this.handler[storagePos].getNumericData() && //if storagePos < USER_INPUTS storagePos < USER_INPUTS ) { //check next handler storage position storagePos++ ; } //the true side of the following if must return @storagePos, where a duplicate value //was found if ( this.handler[storagePos] != null && storagePos != USER_INPUTS ){ return storagePos ; }else{ //return a negative number if null pointer or unreachable position @storagePos return ( -1 * storagePos ) - 1; } } //return non duplicate values public String nonDuplicatedValuesWithFormat(){ //empty string String s = "" ; //concat string with nonduplicated values for ( int i = 0 ; this.handler[i] != null && i < USER_INPUTS ; i++ ) { //concatenate nonduplicated values if ( ! this.handler[i].isDuplicated() ){ s += this.handler[i].getNumericData() + "\n" ; } } //return concatenated String return s; } [1]: http://codereview.stackexchange.com/questions/158432/simple-java-arraylist-stores-and-shows-not-repeated-elements-entered-by-user