Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: ShiShi on 16-01-2009, 12:56:32



Title: Esercizio asterischi
Post by: ShiShi on 16-01-2009, 12:56:32
Code:
/*Scrivere un metodo che prenda come parametro formale un array di stringhe A
e restituisca in output un array B che sia una copia di A in cui tutti i caratteri,
ad eccezione dell'ultimo, dell'ultima stringa sono sostituiti con un asterisco.*/

public class Esercizio03 {
        public static void main (String [] args) {
    String [][] A = {{"abcds", "akjhdjnf", "ahjdco"},
                      {"adddd", "aaaao"}};
            A=metodo(A);
            for (int i=0; i<A.length; i++) {
                    System.out.println ("");
                for (int k=0; k<A[i].length; k++)
                    System.out.print (A[i][k]+"|");
                }
    }
   
static String [][] metodo (String [][] A) {
    for (int i=0; i<A.length; i++)
        for (int j=0; j<A[i].length; j++) {
                 A[i][j]=metodo2(A[i][j]);
            }
        return A;
    }

static String metodo2 (String A) {
        String O="";
    for (int i=0; i<A.length(); i++)   
    O+="*";
    for (int j=A.length()-1; j<A.length(); j++)
        O+= A.charAt(j);   
        return O;
    }
}

Non riesco a lasciare solo l'ultimo carattere nell'ultima stringa  .poverinoi Qualcuno può darmi una mano?
Ottengo questo output

Code:
>java Esercizio03

*****s|********f|******o|
*****d|*****o|>Exit code: 0


Title: Re:Esercizio asterischi
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 16-01-2009, 14:58:57
Intanto devo farti notare che hai malinteso il testo dell'esercizio: il metodo da scrivere deve prendere come parametro formale un array di stringhe, non un array di array (cioè array bidimensionale) di stringhe.
Inoltre, sempre secondo il testo della consegna, solo l'ultimo stringa copiata da A deve avere tutti i suoi caratteri, eccetto l'ultimo, uguali all'asterisco, infatti:
Quote
restituisca in output un array B che sia una copia di A in cui tutti i caratteri, ad eccezione dell'ultimo, dell'ultima stringa sono sostituiti con un asterisco.
è semanticamente equivalente a:
Quote
restituisca in output un array B che sia una copia di A in cui tutti i caratteri dell'ultima stringa sono sostituiti con un asterisco, ad eccezione dell'ultimo.
(ho solo spostato l'inciso alla fine del periodo) .smile

Questo è un codice che fa al caso tuo
Code:
/*Scrivere un metodo che prenda come parametro formale un array di stringhe A
e restituisca in output un array B che sia una copia di A in cui tutti i caratteri,
ad eccezione dell'ultimo, dell'ultima stringa sono sostituiti con un asterisco.*/

public class Esercizio03
{
    static String [] metodo (String [] A)
    {
        String [] B = new String  [A.length];
       
        //gestisce esplicitamente il caso di array vuoto
        if (A.length == 0) return B;
       
        //ricopia tutte le stringhe tranne l'ultima
        for (int i = 0; i < A.length - 1; i++)
            B [i] = A [i];
       
        //usa due indici calcolati una sola volta per motivi di efficienza
        int lastIndex = A.length - 1, max = A [lastIndex].length () - 1;

        //inizializza l'ultima stringa dell'array B da restituire
        B [lastIndex] = "";

        //mette in tale stringa esattamente n-1 asterischi,
        //avendo posto n = "la lunghezza dell'ultima stringa di A"
        for (int i = 0; i < max; i++)
            B [lastIndex] += "*";
       
        //accoda l'ultimo carattere dell'ultima stringa di A all'ultima stringa di B
        B [lastIndex] += A [lastIndex].charAt (max);
       
        //restituisce infine B
        return B;
    }
   
    public static void main (String [] args)
    {
        String [] b = metodo (args);
        for (int i = 0; i < args.length; i++)
            System.out.println (b [i]);
    }
}


Title: Re:Esercizio asterischi
Post by: ShiShi on 16-01-2009, 16:16:08
Grazie reversengineer .smile allora lo so fare, cioè l'avevo fatto anche così e mi sembrava errato.
Se voglio fare invece array bidimensionale con ogni lettera di ogni stringa sostituita con asterisco tranne l'ultima lettera dell'ultima stringa?(in pratica come per errore volevo fare prima)
Solo per saperlo fare io, mi sono fissata   ormai :"-(, se sai come si potrebbe fare...