Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]cambiare un carattere con un altro in un ArrayList

    Ciao facendo un esercizio mi è sorto questo dubbio: se voglio cambiare in un ArrayList<String> il carattere ')' con '.' come faccio?Sò che esiste il metodo replace della classe String ma con gli ArrayList non funziona.
    Questa è la mia improbabilr soluzione:
    codice:
    public void cambia(){
        for(int pos=0;pos<testoMenu.size();pos++){ //verifica ogni posizione dell'array
            if(testoMenu.contains(carattereMenu)){
            String f=testoMenu.set(pos,'.');    
        }
    }
    }
    il punto è che in esecuzione la jvm non cambia nessun carattere.Come è posso cambiare il carattere ')' con '.' ?
    Ultima modifica di el92; 10-03-2015 a 18:21

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Stai confondendo un po' di cose.
    Un ArrayList<String> è una lista di oggetti String. Gli oggetti String sono, per loro natura, immutabili: non si modificano dopo la loro creazione.

    Il metodo replace() della classe String (come qualunque altro metodo di "modifica"), in pratica non modifica nulla: crea e restituisce un nuovo oggetto String che rappresenta l'oggetto di partenza modificato... ma l'oggetto di partenza non subisce alcuna modifica, perchè, come già detto, gli oggetti String non sono modificabili (sono immutabili).

    codice:
    // Esempio
    String s1 = "CULLA";
    String s2 = s1.replace('U', 'O');
    
    System.out.println( s1 );   // Stamperà CULLA
    System.out.println( s2 );   // Stamperà COLLA

    Ora, il metodo contains() che stai usando è quello della classe ArrayList. Tale metodo restituisce true se l'oggetto passato è contenuto nell'ArrayList.

    codice:
    ArrayList<String> lista = new ArrayList<String>();
    lista.add("CULLA");
    lista.add("COLLA");
    
    System.out.println( lista.contains("CULLA") );   // Stamperà true
    System.out.println( lista.contains("L") );   // Stamperà false

    Tu gli stai passando un carattere (o, non meglio specificato, oggetto carattereMenu). Dato che stai lavorando su un ArrayList di oggetti String, il metodo contains() si aspetta un oggetto String (e non un carattere, a meno che la stringa non sia composta da un solo carattere, ma si tratta comunque di un oggetto String di lunghezza 1) e restituisce true se la stringa passata è contenuta nell'ArrayList...

    Insomma... stai facendo una grandissima confusione.

    Spiega cosa hai in mano (come strutture dati), cosa vuoi fare (che elaborazione) e come intendi procedere per ottenerlo perchè non si è capito molto.


    Ciao.
    Ultima modifica di LeleFT; 10-03-2015 a 18:40
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ciao il mio scopo è creare una classe menu che dovra' permettere di:
    - aggiungere un'opzione al menu
    - preparare il menu per la stampa (toString)
    - resettare il menu (cancellare tutte le opzioni)
    - cambiare il carattere dopo il numero dell'opzione (es '.' invece di ')')
    L'esercizio propone di usare gli array.Io ho voluto utilizzare gli arraylist...non sò mi sembrava più semplice.
    tutto il codice è:
    codice:
    import java.util.*;
    class Menu {
    ArrayList<String> testoMenu;
    int contaOpzioni;
    char carattereMenu;
    Menu(){
    contaOpzioni=0;
    testoMenu=new ArrayList<String>();
    carattereMenu=')';
    }
    public void aggiungo(String opzione){
    testoMenu.add(opzione);
    }
    public void resetta(){
    testoMenu.clear();
    }
    public void cambia(){
        for(int pos=0;pos<testoMenu.size();pos++){ //verifica ogni posizione dell'array
            if(testoMenu.contains(carattereMenu)){
            String f=testoMenu.set(pos,".");    
        }
    }
    }
    public String toString(){
    String s="";
    for(int pos=0;pos<testoMenu.size();pos++)
    s=s+testoMenu;
    return s;
    }
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Array o ArrayList non fa differenza... non è che l'esercizio ti proponeva di usare gli array per i menu al posto delle String, che sono immutabili? Se invece di usare degli oggetti String, usassi degli oggetti char[], chiaramente potresti sostituire ciascun singolo carattere.

    Ad ogni modo, se l'ArrayList contiene oggetti String, non puoi usare il contains() passandogli una variabile char... non funzionerà mai. Il compilatore non segnala nulla poichè il metodo contains() è definito per un Object dall'interfaccia List, quindi fa un autoboxing e lo accetta.

    Non ti serve nemmeno cercare la posizione del carattere... il metodo replace() sostituisce da solo TUTTE le occorrenze di un carattere con un altro. Se le voci di menu non contengono più di un carattere ')' allora lo puoi usare direttamente, altrimenti dovrai fare un lavoro più certosino.

    codice:
    public void cambia(){
        for(int pos=0;pos<testoMenu.size();pos++){ //verifica ogni posizione dell'array
            // Ottengo il menu
            String str = testoMenu.get( pos );
    
            // Cambio (non mi interessa nemmeno di sapere dove si trova il carattere)
            testoMenu.set(pos, str.replace(')','.') );
        }
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ciao grazie 1000 per le risposte l'esercizio finalmente viene dovrò fare più esercizi

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 © 2025 vBulletin Solutions, Inc. All rights reserved.