Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    5

    esrcizio

    Salve ragazzi, sto cercando di risolvere il seguente esercizio ma mi sono bloccato:

    Scrivere un metodo statico iterativo che, dati un array monodimensionale di stringhe a ed un array monodimensionale di interi b, restituisce un array bidimensionale di caratteri c tale che ogni riga c[i] contiene i primi b[i] caratteri della stringa a[i] (letti da sx a dx). Esempio: se a = {“abbcd”, “bcgppkk “, “ab”, “bcd”} e b = {3,4,0,2}, il metodo restituisce l’array c ={{ 'a', 'b', 'b'},{ 'b' ,'c' , 'g', 'p'},{}, {'b', 'c'}}.
    Il metodo deve sollevare un'eccezione se le lunghezze di a e b sono diverse.
    Si assuma 0<= b[i] <= lunghezza (a[i]) per ogni i.

    io ho scritto il seguente codice
    codice:
    public class esecizio
    {
        public static char[][]esecizio(String[]a,int[]b){
            char[][]c =new char[a.length][];
            
            for(int i=0;i<a.length;i++){
                
                     for (int j =0;j<=b[i];j++){
                        
                        c[i][j]=c[i][j]+a[i].charAt(b[j]);
                    }
                }
            }
        }
    il compilatore mi da il seguente errore:; required : char; found: int

    potete aiutarmi, grazie

  2. #2

    Moderazione

    Benvenuto sul forum; ti ricordo che i thread devono avere un titolo un minimo descrittivo del problema e il codice va incluso tra tag [code] ... [/code]. Ora sistemo io, ma tu prima di proseguire dai un'occhiata al regolamento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Hai dichiarato un metodo con valore di ritorno char[][] che però non restituisci mai...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    5
    Si è vero devo mettere return c; prima dell'ultima parentesi graffa, ma in :
    c[i][j]=c[i][j]+a[i].charAt(b[j]); devo fare un cast?

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Mmm no , innanzitutto dimentichi di dare la dimensione ai vari array-riga e poi la "somma" che fai è sbagliata ma in linea di massima ci sei..comunque ti do un aiutino su una procedura più semplice (meglio se ci arrivi tu che ottenere direttamente il codice ) i metodi substring (int inizio , int fine) e toCharArray () di String fanno proprio al caso tuo..con la procedura che ti sto suggerendo un ciclo for ti basta.


  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    5
    forse riesco a risolvere con questo codice perchè devo definire la seconda dimensione dell'array di caratteri senza saperne prima la lunghezza, però non funziona

    codice:
    public static char[][]esercizio(String[]a,int[]b){
            int cont =0;
                   
            for(int i=0;i<a.length;i++){
                         if (a[i].length()>cont) cont=a[i].length();
                        char c = new char[a.length][cont];
                        c[i][cont]=a[i].toCharArray(substring(i),b[i]);
                    }
                }
    
               return c;
                       
            }

  7. #7

    Re: Moderazione

    Ahem...
    Originariamente inviato da MItaly
    ti ricordo che [...] il codice va incluso tra tag [code] ... [/code].
    ... altrimenti perde l'indentazione. Usa il tasto

    per sistemare il tuo post.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Originariamente inviato da mamad
    forse riesco a risolvere con questo codice perchè devo definire la seconda dimensione dell'array di caratteri senza saperne prima la lunghezza, però non funziona

    codice:
    public static char[][]esercizio(String[]a,int[]b){
            int cont =0;
                   
            for(int i=0;i<a.length;i++){
                         if (a[i].length()>cont) cont=a[i].length();
                        char c = new char[a.length][cont];
                        c[i][cont]=a[i].toCharArray(substring(i),b[i]);
                    }
                }
    
               return c;
                       
            }
    no , tu non conosci a priori la lunghezza di ogni array-riga ma ne conosci man mano la dimensione scorrendo le righe all'interno del ciclo for , infatti ogni array-riga avrà dimensione b [i]
    dunque devi , per ogni array-riga , settarne la dimensione e poi metterci i primi b [i] caratteri..questo per come hai impostato la tua procedura.
    Per come ti ho suggerito io è abbastanza più veloce e semplice la cosa , ripeto basta utilizzare substring (int inizio , int fine) e il metodo toCharArray () di String..e basta un solo ciclo!

    Ps. comunque noto che hai alquanto le idee confuse in qualche passaggio , tenti di assegnare un array a una cella di una matrice (che rappresenterebbe una variabile char , un carattere) , richiami metodi (toCharArray (String s , int i)) che non esistono per come da te utilizzati..ti consiglio di rivedere il tuo codice e leggere la documentazione String


  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    5
    forse ho risolto così:

    public static char[][]esercizio(String[]a,int[]b){
    char [][]c=new char[a.length][];


    for(int i=0;i<a.length;i++){
    c[i] = new char[a[i].length()];

    for (int j =0; j<b[i];j++)
    c[i][j]=a[i].charAt(j);
    }
    return c;
    }

    comunque grazie a tutti .........

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    si hai risolto , ma scrivendo c[i] = new char[a[i].length()]; hai delle celle che non utilizzi e quindi non ti servono..quindi potresti migliorarlo riscrivendo la riga citata sopra come
    codice:
    c[i] = new char[b[i]];
    o ancora , ora che ci sei arrivato da te , come ti avevo suggerito io:

    codice:
    public static char [][] metodo (String [] a , int [] b) {
    	char [][] c = new char [a.length][];
    	for (int i=0;i<c.length;i++) {
    		c [i] = a [i].substring (0 , b [i]).toCharArray ();
    	}
    
    	return c;
    }

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.