Esercizio carattere che si ripete di più

di il
28 risposte

28 Risposte - Pagina 2

  • Re: Esercizio carattere che si ripete di più

    '=!' non esiste, forse intendevi '!='
  • Re: Esercizio carattere che si ripete di più

    Ho corretto il codice. Aveva alcuni errori logici che non permettevano la corretta gestione della stringa vuota. Stampava sì "", ma perchè il carattere ASCII 0 non è rappresentabile ( NULL ).

    Adesso dovrebbe andare.
    public class Main {
    
        public static int max(int[] vettore) { //ritorna il massimo in un array di interi
            int i, max = 0, pos = -1;    //<--- -1 indica che non esistono numeri >0
            
            vettore['\n'] = 0;  //elimina gli 'a capo' dal conteggio
    
            for (i = 0; i < vettore.length; i++) {
                if (max < vettore[i]) {
                    max = vettore[i];
                    pos = i;
                }
            }
            
            System.out.println("max()  int="+(int)pos+"  char="+(char)pos);
            
            return pos;
        }
    
        public static char carattere(char[] str) {
            int[] occorrenze = new int[255]; //caratteri ascii
            int i;
    
            for (i = 0; i < str.length; i++) {
                occorrenze[(int) str[i]]++;
            }
            
            int max = max(occorrenze);
            
            if(max==-1)
                return ' ';
    
            return (char) max; //carattere più presente
        }
    
        public static void main(String[] args) {
    
            String input = JOptionPane.showInputDialog("Inserisci la stringa da analizzare");
    
            char[] caratteri = input.toCharArray();
    
            char c = carattere(caratteri);
            
            if(c!=' '){
            JOptionPane.showMessageDialog(null, "Il carattere che viene ripetuto più volte è '"+c+"'.");
            }
            else {
                JOptionPane.showMessageDialog(null, "Il carattere che viene ripetuto più volte è lo spazio.");
            }
    
        }
    }
  • Re: Esercizio carattere che si ripete di più

    occorrenze[(int) str]++


    occorrenze e' un array. In ogni posizione e' contenuto il numero di ripetizioni della lettera corrispondente. All'inizio ogni elemento e' 0 perchè la stringa non e' ancora stata esaminata.

    A ogni carattere corrisponde un numero tra 0~255 (Caratteri ASCII, googla un po').

    (int) str e' il numero corrispondente alla i-esima lettera della stringa.

    ++ incrementa di 1 la variabile "occorrenze[(int) str]"



    Prova il nuovo codice e dicci se riscontri altri errori. Non esitare a chiedere spiegazioni

    Ciao
  • Re: Esercizio carattere che si ripete di più

    Versione migliorata ma più difficile da capire:
    public static int[] max(int[] vettore) { 
            int i, pos = 0;    
    
            for (i = 0; i < vettore.length; i++) 
                if (vettore[pos] < vettore[i]) 
                    pos=i;
            
            if(vettore[pos]==0){
                return null;
            }
            
            int cnt = 0;
            
            for (i = 0; i < vettore.length; i++)   //si sarebbe anche potuta usare una lista...
                if(vettore[i]==vettore[pos])
                    cnt++;
            
            int[] a = new int[cnt];
            
            for (i = 0,cnt = 0; i < vettore.length; i++) {
                if(vettore[i]==vettore[pos]){
                    a[cnt++] = i;
                }
            }
            
            return a;
        }
    
        public static int[] occorrenze(char[] str) {
            int[] occorrenze = new int[255]; //caratteri ascii
            int i;
    
            for (i = 0; i < str.length; i++) {
                occorrenze[(int) str[i]]++;
            }
            
            return occorrenze;
        }
    
        public static void main(String[] args) {
            
            String input = JOptionPane.showInputDialog("Inserisci la stringa da analizzare");
    
            char[] caratteri = input.toCharArray();
    
            int[] occorrenze = occorrenze(caratteri);
            
            int[] caratteriCheCompaionoPiuVolteNellaStringa = max(occorrenze);
            
            if(caratteriCheCompaionoPiuVolteNellaStringa==null){
                JOptionPane.showMessageDialog(null, "Il carattere che viene ripetuto più volte è lo spazio.");
            }
            else {
                StringBuilder msg = new StringBuilder();
                for(int c : caratteriCheCompaionoPiuVolteNellaStringa){
                    msg.append((char)(c)+" ");
                }
                
                JOptionPane.showMessageDialog(null, "I caratteri ripetuti piu volte sono "+msg.toString());
            }
    
        }
  • Re: Esercizio carattere che si ripete di più

    Se io volessi creare un vettore di cui conosco la dimensione man mano?
    Cioè quandi inizializzo il vettore ancora non so che dimensione avrà, lo scopro man mano, c'è un modo per farlo?
  • Re: Esercizio carattere che si ripete di più

    Certo, ma non con un vettore statico. Puoi utilizzare, ad esempio, ArrayList.
  • Re: Esercizio carattere che si ripete di più

    Ok, adesso vado a vedere che cos'è grazie mille
  • Re: Esercizio carattere che si ripete di più

    Sono passata ad un altro esercizio e non ne ho capito la consegna:
    Esercizio 9
    Si scriva un programma che riceve un array di interi A e ristituisce un array di interi i cui valori sono una espansione del contenuto di A effettuata in modo tale da preservarne la somma degli elementi .In particolare ogni valore positivo di A deve essere sostituito con una sequenza equivalente di 1, mentre ognivalore negativo con -1 .Gli eventuali elementi di valore 0 non devono essere considerati durante la espansione
    Esempio:
    A=[-2,0,2,-3,0,2,-4] dovra ristituire : [-1, -1 , 1, 1 ,-1, -1, -1, 1 , 1 , -1 , -1, -1 , -1]


    Ho capito che se il numero è negativo devo fare un altro array che restituisce -1, 1 se è positivo e non metto niente se c'è zero...
    Il resto non l'ho capito...
  • Re: Esercizio carattere che si ripete di più

    Per ogni elemento N dell'array{
    Se N è positivo: Inserisci nell'array N volte 1
    Se N è negativo: Inserisci nell'array N volte -1
    }
  • Re: Esercizio carattere che si ripete di più

    Ah, adesso ho capito.
    in questo bisognerà usare l'arrayList...
  • Re: Esercizio carattere che si ripete di più

    Come non detto, l'ho fatto senza arrayList ed è venuto comunque
  • Re: Esercizio carattere che si ripete di più

    Posta il codice
  • Re: Esercizio carattere che si ripete di più

    Due cicli while, un if e il gioco è fatto!!
  • Re: Esercizio carattere che si ripete di più

    Usando solo array
    static int valAssoluto(int i){
            return (i>0) ? i : -i;
        }
        
        static int[] fillVector(int[] v, int pos,int num, int rep){
            while(rep>0){
                v[pos++] = num;
                rep--;
            }
            
            return v;
        }
        
        static int countElem(int v[]){
            int cnt = 0;
            
            for(int i : v){
                cnt+=valAssoluto(i);
            }
            
            return cnt;
        }
        
        public static void main(String[] args) {
            int a[] = {1,-3,3,-1,0,1};
            
            int ris[] = new int[countElem(a)];
            int pos = 0; 
            
            for(int i : a){
               ris = fillVector(ris,pos,(i>0) ? 1 : -1, valAssoluto(i));
               pos+=valAssoluto(i);
            }
            
            System.out.println(Arrays.toString(ris));
        }
Devi accedere o registrarti per scrivere nel forum
28 risposte