Pages: 1 [2]   Go Down
Print
Author Topic: Metodo Prima Prova  (Read 3398 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #15 on: 12-12-2010, 12:40:51 »

Raggione hai testate!

Si vede che ero addummisciuto boh.

A questo punto si può benissimo usare la versione con un solo parametro di substring
Code:
S1 [i][j] = S [i][j].substring (x - 8);

Per quanto riguarda l'inserimento dentro il primo ciclo for della new, beh si a prima vista l'avevo fatto anche io in un for che faceva solo quello.
Code:
for (int i = 0; i < S.length; i++)
    S1 [i] = new String [S [i].length];
prima del resto del codice, per poi accorgermi che potevo farlo in un'unica soluzione senza problemi univ.


Di conseguenza, anche mioMetodoElegante va cambiato, addirittura semplificato pray
Code:
    public static String [][] mioMetodoElegante (String [][] S)
    {
        String [][] S1 = new String [S.length][];
       
        for (int i = 0; i < S.length; i++)
        {
            S1 [i] = new String [S [i].length];
            for (int j = 0; j < S [i].length; j++)
            {
                int x = S [i][j].length (); S1 [i][j] = "";
                for (int z = 0, max = Math.max (0, 8 - x); z < max; z++) S1 [i][j] += "=";
                S1 [i][j] += S [i][j].substring (Math.max (0, x - 8));
            }
        }
        return S1;
    }
In pratica è cambiata solo l'ultima concatenazione con lettura su S1 [i][j] boh.
« Last Edit: 12-12-2010, 12:46:25 by reversengineer » Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #16 on: 12-12-2010, 13:34:02 »

Grazie mille!!!  ok

Adesso ho le idee più chiare!  

Un'ultima cosa....tu hai fatto notare, precedentemente, che avresti utilizzato in modo differente il boolean
Quote
La variabile trovato è assolutamente inutile in quel codice.
Le due return che ne restituiscono il valore possono essere sostituite dalle return della rispettiva costante (true o false).

In che senso?
Code:
trovato=true;
return trovato;
Ho scritto cosi poichè l'esercizio dice
Quote
...restituisca un boolean che indichi se esiste un tappeto in A il cui valore differisce al più di una unità da quello di un tappeto in B
quindi "credo" che al primo tappeto possa uscire e quindi il return all'interno di tutti i cicli avrebbe un senso  boh


Riporto di seguito un esercizio più semplice, ma in cui ho utilizzato il boolean e il return alla stessa maniera
Code:
/* Scrivere un metodo che prenda in input una matrice A di long ed un array S di byte, e restituisca un boolean
che indichi se esistono due valori x e y in S tali che la somma degli elementi nella riga di indice x di A sia pari
a quella della riga di indice y di A (Non si possono usare array ausiliari)*/

public boolean Metodo(long[][] A, byte[] S)
{
boolean trovato;
for(int k=0;k<S.length-1,k++)
{
long sommaX=0,sommaY=0; trovato=false;
x=S[k];y=S[k+1];
if((x<A.length)&&(y<A.length))
{
for(int j=0;j<A[i].length;j++)
{
sommaX+=A[x][j];
sommaY+=A[y][j];
}
}
if(sommaX==sommaY)
{
trovato=true;
return trovato;
}
}
return trovato;
}

« Last Edit: 12-12-2010, 13:35:55 by Luxandro » Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #17 on: 12-12-2010, 14:26:03 »

Il codice di quest'ultimo esercizio non compila perché hai usato delle variabili mai dichiarate, cioè "simboli non definiti" direbbe il compilatore (variabili x e y) oppure hai usato una variabile (trovato) non inizializzata (nel caso in cui S.length fosse <= 1 faresti return trovato, senza mai essere entrato nel ciclo for e quindi senza mai averla inizializzata).

Ti lascio una versione corretta del codice prima con la variabile booleana trovato (inutile) e poi senza, così vedi la differenza ok:
Code:
   public boolean Metodo (long [][] A, byte [] S)
    {
     boolean trovato = false;
     for (int a = 0; a < S.length - 1; a++)
        for (int b = a + 1; b < S.length; b++)
        {
            int x = S [a], y = S [b];

            if (x < A.length && y < A.length)
            {
                long sommaX = 0, sommaY = 0;

                //posso usare la sola A [x].length anche per limitarmi in A[y], poiché A si suppone matrice (quindi arraby bidimensionale rettangolare)
                for (int c = 0; c < A [x].length; c++)
                {
                    sommaX += A [x][c];
                    sommaY += A [y][c];
                }
                
                if (sommaX == sommaY)
                {
                    trovato = true;
                    return trovato;
                }
            }
        }
    
     return trovato;
    }
    
    public boolean Metodo2 (long [][] A, byte [] S)
    {
     for (int a = 0; a < S.length - 1; a++)
        for (int b = a + 1; b < S.length; b++)
        {
            int x = S [a], y = S [b];

            if (x < A.length && y < A.length)
            {
                long sommaX = 0, sommaY = 0;
                
                    //posso usare la sola A [x].length anche per limitarmi in A[y], poiché A si suppone matrice (quindi arraby bidimensionale rettangolare)
                for (int c = 0; c < A [x].length; c++)
                {
                    sommaX += A [x][c];
                    sommaY += A [y][c];
                }
                
                if (sommaX == sommaY)
                    return true;
            }
        }
    
     return false;
    }
« Last Edit: 12-12-2010, 14:34:14 by reversengineer » Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #18 on: 12-12-2010, 14:38:08 »

Si lo so! errori di distrazione  cry  a volte assegno senza dichiarare  boh

Code:
public boolean Metodo(long[][] A, byte[] S)
{
for(int k=0;k<S.length-1,k++)
{
long sommaX=0,sommaY=0; trovato=false;
int x=S[k],y=S[k+1];
if((x<A.length)&&(y<A.length))
{
for(int j=0;j<A[i].length;j++)
{
sommaX+=A[x][j];
sommaY+=A[y][j];
}
if(sommaX==sommaY)
return true;
}
return false;
}
« Last Edit: 12-12-2010, 16:08:06 by Luxandro » Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #19 on: 12-12-2010, 16:36:28 »

Code:
public boolean Metodo2 (long [][] A, byte [] S)
    {
     for (int a = 0; a < S.length - 1; a++)
        for (int b = a + 1; b < S.length; b++)
        {
            int x = S [a], y = S [b];

            if (x < A.length && y < A.length)
            {
                long sommaX = 0, sommaY = 0;
                
                    //posso usare la sola A [x].length anche per limitarmi in A[y], poiché A si suppone matrice (quindi arraby bidimensionale rettangolare)
                for (int c = 0; c < A [x].length; c++)
                {
                    sommaX += A [x][c];
                    sommaY += A [y][c];
                }
                
                if (sommaX == sommaY)
                    return true;
            }
        }
    
     return false;
    }
Ma perchè usi 3 cicli for??
Ne basterebbero 2, uno che "cicla" l'array e l'altro che "cicla" le righe della matrice...
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #20 on: 12-12-2010, 17:13:07 »

Ma perchè usi 3 cicli for??
Ne basterebbero 2, uno che "cicla" l'array e l'altro che "cicla" le righe della matrice...
.

Se guardi bene cosa dice la consegna dell'esercizio:
Quote
Scrivere un metodo che prenda in input una matrice A di long ed un array S di byte, e restituisca un boolean
che indichi se esistono due valori x e y in S tali che la somma degli elementi nella riga di indice x di A sia pari
a quella della riga di indice y di A (Non si possono usare array ausiliari)
ti accorgerai che non è stato mai specificato che x e y fossero due valori consecutivi in S, mentre il tuo codice arbitrariamente lo suppone e li sceglie secondo tale restrizione .

Quindi, se devo scegliere due elementi da un array, devo fare due cicli (in realtà se ne può fare uno moooooolto lungo e fare calcoli in mezzo, ma questa è programmazione criptica avanzata univ ).
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #21 on: 12-12-2010, 17:14:58 »

Hai ragione!  [Emoticon] Asd

Lo stesso errore dell'altro esercizio  testate
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
Pages: 1 [2]   Go Up
Print
Jump to: