Salve a tutti ragazzi ho un problema con il costrutto else if
Questo è ciò che devo realizzare :
codice:
L'inserimento di un elemento può essere impedito a causa dei seguenti casi:
1. L'identificatore è già presente nel contenitore;
2. La stringa è nulla;
3. Il contenitore è pieno;
4. L'identificatore non è un intero positivo
Anziché restituire un valore Boolean, il servizio restituirà una delle seguenti costanti intere,
definite nella classe StringPool e rese pubbliche:
 SUCCESS se l'inserimento è avvenuto correttamente;
 KO_DUPLICATE_FOUND se si è verificato il caso 1;
 KO_NULL_STRING se si è verificato il caso 2;
 KO_FULL_POOL se si è verificato il caso 3.
 ID_NOT_VALID se si è verificato il caso 4.
Ho due problemi :
1) se cerco d'inserire un elemento che è un " KO_DUPLICATE_FOUND" alla posizione successiva alla 0 il programma mi restituisce SUCCESS al posto di ko_duplicate_found
2) se tento di d'inserire un elemento nella prima posizione libera lo inserisce sempre alla prima posizione fregandosene del controllo di ko_duplicate_found.
codice:
public class StringUtils {
	
	private StringUtils[] str;
	
	public StringUtils(int newId, String newString){
		identifier = newId;
		nomeid = newString;
	}
	
	public StringUtils(int n){
		str = new StringUtils[n];
	}
	
	public StringUtils(StringUtils[] d){
		str = d;
	}
	
	public int getID(){
		return identifier;
	}
	public String getNomeID() {
		return nomeid;
	}

	public int add(int id, String word){
		int n = str.length;
		int statment = 0;
		for(int i = 0; i < n; i++){
			if(str[i].getID() == id){
				System.out.println("duplicate found");
				return statment = KO_DUPLICATE_FOUND;
			}
			else if(word == ""){
				System.out.println("null string");
				return statment = KO_NULL_STRING;
			}
			else if(str[i] == null && i < n){
				System.out.println("full pool");
				return statment = KO_FULL_POOL;
			}
			else if(id < 0 ){
				System.out.println("id non valido");
				return statment = ID_NOT_VALID;
			}
			else{
				str[i] = new StringUtils(id,word);
			System.out.println("STRING_POOL_SUCCES Code Return : " + STRING_POOL_SUCCESS);
			return statment = STRING_POOL_SUCCESS;}
		}
		return statment;
	}
	
	/**
	 * recupera il nome di una stringa in base all'id.
	 * @param recupero l'id da inserire
	 */
	public  void recuperoStringa(int recupero) {
		int j = 0;
		int n = str.length;
		int posizione = -1;
		while(( j < n ) && posizione == -1 ) {
			if(str[j].getID() == recupero)
				posizione = j;
			j++;
		}
		System.out.println(str[posizione].getNomeID());
	}
	
	
	private  int identifier;
	private  String nomeid;
	//rimozione o inserimento avvenuto con successo
	final int  STRING_POOL_SUCCESS = 0;
	//identificatore già presente nel contenitore
	final int KO_DUPLICATE_FOUND = 1;
	//la stringa è nulla
	final  int KO_NULL_STRING = 2;
	//il contenitore è pieno
	final  int KO_FULL_POOL = 3;
	//l'identificatore non è un intero positivo
	final int ID_NOT_VALID = 4;