Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    codice:
    public static char[] rimuoviDuplicati(char[] unArray) {		
    		boolean[] bArray = new boolean[unArray.length];
    		
    		for(int i = 0; i < unArray.length - 1; i++) {
    			int j = i + 1;
    			int n = j;
    			for(j = n; j < unArray.length; j++) {
    				if(unArray[i] == unArray[j]) {
    					bArray[j] = true;
    					
    				}
    			}
    			
    		}
    		
    		int count = 0;
    		
    		for(int i = 0; i < bArray.length; i++) {
    			
    			if(bArray[i] == false) {
    				count++;
    			}
    			
    		}
    		char[] temp = new char[count];
    		
    		//codice per riempire il nuovo Array
    		
    		return temp;
    			
    		}
    Ho dato una "sistemata" al metodo rimuoviDuplicati. il quale scova tutti i duplicati e assegna il valore "true" per ogni duplicato trovato.
    Quindi nel caso sopra, l'array booleano diventa: {false, false,true,false,true true} il che è giusto

    vengono contati quanti false ci sono (3) e da questi ho la dimensione del nuovo array. Unica cosa che (se il procedimento sopra è corretto) mi resta da fare è riempire il nuovo array.. ma per farlo che logica devo usare? Nel senso, quale/i array devo scorrere? Avevo pensato una maniera simile ma non funziona:
    codice:
    for(int k = 0; k < bArray.length; k++) {
    			
    			if(bArray[k] == false) {
    				for(int j = 0; j < temp.length; j++) {
    					temp[j] = unArray[k];
    				}
    			}
    			
    		}
    Grazie ancora per la disponibilità

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Angelo82 Visualizza il messaggio
    codice:
    		boolean[] bArray = new boolean[unArray.length];
    Ok

    Quote Originariamente inviata da Angelo82 Visualizza il messaggio
    codice:
    		
    		for(int i = 0; i < unArray.length - 1; i++) {
    			int j = i + 1;
    			int n = j;
    			for(j = n; j < unArray.length; j++) {
    				if(unArray[i] == unArray[j]) {
    					bArray[j] = true;
    					
    				}
    			}
    		}
    Di per sé mi pare funzionalmente corretto ma ...

    1) fai "giri" inutili con le variabili (guarda bene ...)
    2) è ottimizzabile, il ciclo interno puoi NON farlo se bArray[i] è già a true (perché vuol dire che quel valore l'avevi già beccato in precedenza)

    Quote Originariamente inviata da Angelo82 Visualizza il messaggio
    codice:
    	
    		int count = 0;
    		
    		for(int i = 0; i < bArray.length; i++) {
    			
    			if(bArray[i] == false) {
    				count++;
    			}
    			
    		}
    		char[] temp = new char[count];
    Corretto

    Quote Originariamente inviata da Angelo82 Visualizza il messaggio
    Unica cosa che (se il procedimento sopra è corretto) mi resta da fare è riempire il nuovo array.. ma per farlo che logica devo usare? Nel senso, quale/i array devo scorrere?
    Basta un banale ciclo for ma .... servono 2 indici: uno è quello "lineare" nel nuovo array (che tu hai chiamato temp), l'altro è quello nell'array originale, dove però prendi solo i valori con il corrispondente false.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie infinite per il tuo aiuto ed i tuoi suggerimenti, che metterò in pratica per ottimizzare ogni parte del codice

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.