Dizionario con chiave

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Dizionario con chiave

    @migliorabile
    Ma come è un casino il mio codice..... l ho provato e funziona perfettamente forse mi potrei risparmiare di assegnare la lettera della parola allo schema
    @xneo
    la funzione sigma viene espletata qui
       for(int j = i ;j< lettera.length; j++){
                  //Controllo che non vengano occoppiate 2 lettere alla stessa chiave;
                  if(arrParola[i]!=arrParola[j] && lettera[i]==lettera[j]){
                     return false;
                  }
                  
    se nello schema c'è una lettera maiuscola uguale ad una a cui è già stata assegnata una minuscola e la lettera minuscola corrispondente è diversa da quella assegnata da come ritorno false.
    Comunque proverò a fare altre prove con le mappe che magari è più semplice senza fare 2 cicli.
  • Re: Dizionario con chiave

    Quella non è la funzione Sigma. Come ti stiamo dicendo @migliorabile e io, la funzione Sigma è un dizionario, una mappa, una funzione, un'array, non so in che altro modo chiamarla.
    Nel codice che hai postato stai controllando che nella parola e nello schema ci devono essere solo lettere maiuscole uguali.
    Fermati a ragionare (ti avevo postato anche un ragionamento con un esempio) perchè così effettivamente stai andando a tentoni.

    PS: Ti do ancora un altro piccolo aiuto.
    Il metodo lo puoi chiamare:
    public static boolean eIstanza(String schema, int[] sigma) {} //o Map<String, String> sigma
    oppure come
    public boolean eIstanza(String schema) {}
    a patto che hai una variabile di istanza int[] sigma o Map<String, String> sigma
  • Re: Dizionario con chiave

    Così va meglio ?
    
    	 public boolean cercaParola1(String schema){
    				char[] letteraParola =parola.toCharArray();
    				char[] letteraSchema =schema.toCharArray();
    				HashMap<Character,Character> mSchema = new HashMap<>();
    				
    				if(letteraParola.length!= letteraSchema.length)
    					return false;
    				for(int i= 0 ; i< letteraSchema.length; i++){
    					if(Character.isLowerCase(letteraSchema[i])&& letteraSchema[i]!= letteraParola[i]){
    						return false;
    					}else 
    						if (!mSchema.containsKey(letteraSchema[i])){
    							mSchema.put(letteraSchema[i],letteraParola[i]);
    						}else
    							if(mSchema.get(letteraSchema[i])!=letteraParola[i] ){
    								return false;
    							}
    						
    				}
    				     return true;
    				     }
    		 
    
  • Re: Dizionario con chiave

    Se guardi bene io non sto solo controllando che ci siano lettere maiuscole uguali ma anche che non ci siano lettere minuscole diverse in quella posizione .... ho fatto 2 cicli apposta!
    cmq ora mi da problemi perchè termina il programma quando non dovrebbe e non capisco il motivo
  • Re: Dizionario con chiave

    E perchè mai dovresti fare questi controlli?
  • Re: Dizionario con chiave

    Appunto per evitare la ripetizione della stessa chiave a lettere diverse
  • Re: Dizionario con chiave

    Non ci siamo, tu stai confondendo lo schema con la funzione Sigma. Nella funzione ci deve essere per ogni chiave (che è unica per definizione) un solo valore. Nello schema e nella parola le lettere possono essere anche tutte uguali.
  • Re: Dizionario con chiave

    Ma è quello che faccio ......cmq l ho riscritto con le mappe hai visto ?

    stev809 ha scritto:


    Così va meglio ?
    
    	 public boolean cercaParola1(String schema){
    				char[] letteraParola =parola.toCharArray();
    				char[] letteraSchema =schema.toCharArray();
    				HashMap<Character,Character> mSchema = new HashMap<>();
    				
    				if(letteraParola.length!= letteraSchema.length)
    					return false;
    				for(int i= 0 ; i< letteraSchema.length; i++){
    					if(Character.isLowerCase(letteraSchema[i])&& letteraSchema[i]!= letteraParola[i]){
    						return false;
    					}else 
    						if (!mSchema.containsKey(letteraSchema[i])){
    							mSchema.put(letteraSchema[i],letteraParola[i]);
    						}else
    							if(mSchema.get(letteraSchema[i])!=letteraParola[i] ){
    								return false;
    							}
    						
    				}
    				     return true;
    				     }
    		 
    
  • Re: Dizionario con chiave

    Non era quello che stavi facendo.
    Poi, come ti ho detto, ma funzione la devi già avere da qualche parte e la devi usare in sola lettura nell'algoritmo.

    private Map<String, String> sigma=...; //letta da file, costruita da qualche metodo, generata dall'Alto, boh?

    ti riscrivo l'agoritmo di @migliorabile devi leggerlo, capirlo e tradurlo in Java
    boolean eIstanza(schema, parola, sigma):
        se schema e parla hanno lunghezza diversa allora return false
        for i da 0 a lunghezza(schema)-1:
            se schema[i] è minuscolo e schema[i] è diverso da parola[i] allora return false
            altrimenti se schema[i] è maiuscolo e sigma.get(schema[i]) è diverso da parola[i] allora return false; //LEGGI BENE QUI!!!!!!!!!!!
        return true;
    Più chiaro di così non si può fare
  • Re: Dizionario con chiave

    Ok ok grazie per il suggerimento ..... ma l algoritmo funziona come l ho scritto io .... visto che mi sa che non l hai letto nemmeno .ti ho anche scritto che l ho modificato.
    Grazie dei tuoi PREZIOSI suggerimenti ne farò tesoro
  • Re: Dizionario con chiave

    L'ho letto e già ti avevo risposto che non andava bene. Poi ti ho risposto ancora con l'algoritmo corretto, quindi era sottinteso che nonostante le modifiche era ancora sbagliato.

    EDIT: Se ci tieni a saperlo, evita di crearti array di char e lavora direttamente con le stringhe.
Devi accedere o registrarti per scrivere nel forum
25 risposte