Pages: [1]   Go Down
Print
Author Topic: Non capisco perchè non mi funziona questo metodo...aiutatemi vi prego  (Read 2208 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« on: 30-03-2009, 19:19:33 »

Non riesco a capire perchè la return del valore booleano mi restituisce false mentre non dovrebbe essere così.

Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).*/


class Ex05
{
public static void main(String [] args)
{
long [][] A={{5,5},
   {6,3,0,9},
   {2,2}};
                          System.out.println(prendimatrice(A));
}    




public static boolean prendimatrice(long [][] A)
{
boolean esistono=false;
boolean ESISTONO=false;

for (int r=0; r<A.length-3; r++)
{
for(int k=0; k<A[r].length-2; k++)
{
for(int k1=k+1; k1<A.length; k1++)
{
if(A[r][k]==A[r][k1])
{
esistono=true;
for(int R=r+2; R<A.length; R++)
{
for(int j=0; j<A.length; j++)
{
for(int j1=j+1; j1<A.length; j1++)
if(A[R][j]==A[R][j1])
ESISTONO=true;
if (esistono==false || ESISTONO==false)
esistono=false;
}
}
}

}

}

}
return esistono;
}
}
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #1 on: 30-03-2009, 20:04:12 »

io l'ho fatto così vedi un pò tu..
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).*/
public class prova
  {
  public static boolean metodo(long [][]A)
    {
      int r,r1,c,c1=0;
      int cont=0;
    for(r=0;r<A.length-1;r++)
      {
       
      for(r1=r+1;r1<A.length;r1++)
        {
          for(c=0;c<A[r].length;c++)
          {
           for(c1=0;c1<A[r1].length;c1++)
            {
              if(A[r][c]==A[r1][c1])
              {
              cont++;
              }
            }
          }
        }
      if(cont==2)
        {
        return true;
        }
      }
    return false;
    }
         public static void main (String[]args)
  {

    long m[][]= { { 1,2,3,4},
                    {5,6,7 ,8},
                    {9,5,6 ,12}
                  };
    int i,j;

    for(i=0;i<m.length;i++)
      {
        System.out.println();
        for(j=0;j<m[i].length;j++)
          System.out.print(m[i][j]+" ");
      }

    System.out.println();

    System.out.println(metodo(m));
  }
}
Logged

Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #2 on: 30-03-2009, 20:21:48 »

Quote
io l'ho fatto così vedi un pò tu..
Perdonami, ma l'esercizio non dice che le righe non devono essere consecutive?
In questo modo sarebero consecutive nel tuo codice, comunque io avevo capito che il metodo voleva che  se in una riga ci sono due elementi uguali,e la stessa cosa succede in un'latra riga non consecutiva allora restituisce true, sei sicuro che vuole il confronto tra elementi di righe diverse???
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #3 on: 30-03-2009, 21:10:51 »

guarda ke se cambi i valori nel mio funziona anke se nn sono consecutivi Wink perchè controlla dalla seconda riga in poi di quella ke prende x confrontare!
Logged

Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #4 on: 30-03-2009, 21:17:47 »

Hai ragione...ecco sicuramente devo farmi le lenti degli occhiali nuovi... boh
 pray
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #5 on: 30-03-2009, 21:37:56 »

dai ke al prossimo esame dobbiamo passare pc
Logged

Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #6 on: 30-03-2009, 21:41:23 »

Eh speriamo...ora l'ho fatto senza guardare il tuo, mi riesce, avevo frainteso tutto....cmq passo a cose più difficili....ora mi tocca fare quello sul dizionario, tieniti pronto, o oggi, ma penso più che altro domani, ai miei nuovi interventi!!!!!!!

 I

Ciao ciao!
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
ɹǝǝ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 #7 on: 30-03-2009, 21:45:49 »

Quote
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).*/
Mannaggia a questi esercizi: al posto di "rispettivamente" ovviamente andrebbe scritto "reciprocamente", perché gli elementi sono uguali in modo commutativo e reciproco, non in modo particolare uno rispetto all'altro.
Stavo anche io per pensarla come guitarplaying inizialmente, cioè che bisogna restituire true quando esiste una coppia di righe non consecutive in ciascuna delle quali devono esistere due elementi diversi, ma ho capito che avevano scritto male quando ho letto l'ultima indicazione tra parentesi:
Quote
anche in colonne differenti
E questo va indicato quando gli elementi uguali normalmente uno se li immagina nella stessa colonna solamente (e invece anche su colonne differenti sono conteggiabili) e quando è che potrebbero stare anche in una stessa colonna? Solo se sono su righe diverse, perché sarebbe banale che due elementi nella stessa riga e nella stessa colonna (cioè lo stesso elemento della matrice testate) sono uguali fra di loro.

Ma comunque...

Nella tua soluzione dell'esercizio, guitarplaying, per come hai inteso tu il testo, hai comunque sbagliato la condizione di uscita del primo ciclo for, che deve essere:
Code:
r<A.length-2
e non
Code:
r<A.length-3
.

Stesso errore accade per la condizione di uscita del secondo ciclo for annidato, che deve essere:
Code:
k<A[r].length-1
e non
Code:
k<A[r].length-2
poiché le colonne possono anche essere consecutive (è per le righe che vale il vincolo !)

Stessa cosa dicesi per la condizione di uscita del terzo ciclo for annidato, che deve essere:
Code:
k1<A[r].length
e non
Code:
k1<A.length
(ricorda che k e k1 scorrono insieme coppie di colonne, non una di colonne e l'altra di righe)

Medesimi errori anche negli ultimi due cicli for, che in teoria si propongono di scorrere insieme coppie di colonne della riga di indice R, mentre in realtà seguono il numero di righe. Ovvero:
Code:
j<A.length
e
Code:
j1<A.length
vanno sostituiti entrambi rispettivamente con:
Code:
j<A[R].length
e
Code:
j1<A[R].length

C'è pure una ulteriore considerazione che mi viene di fare relativamente al blocco di codice
Code:
if (esistono==false || ESISTONO==false)
esistono=false;
Ecco questo codice andrebbe eseguito dopo essere uscito da tutti i cicli for, proprio al termine del metodo, perché si rischia di perdere il valore eventualmente trovato true per la variabile booleana esistono quando in realtà tale valore andava conservato per il controllo incrociato (futuro, e a fine codice) con il valore della seconda variabile booleana ESISTONO.

Per il resto il codice va bene.

Piccoli suggerimenti (che si possono seguire o meno, ma che secondo me migliorano la leggibilità):
1) dare alle variabili nomi facilmente ricordabili (come r1 ed r2 per le righe, o c1 e c2 per le colonne, invece di quelli che mi sembrano un po' troppo generici k, k1, j, j1 )
2) mai usare due nomi per le variabili che si differenzino solo per la maiuscolizzazione (es. esistono ed ESISTONO od anche r ed R) perché
        a) non stiamo programmando in C (Java non è un linguaggio spartano) e
        b) è facilissimo confondersi in questo modo.


Ora passiamo agli altri post...
Mi sento di accogliere l'obiezione di guitarplaying quando dice:
Perdonami, ma l'esercizio non dice che le righe non devono essere consecutive?
In questo modo sarebero consecutive nel tuo codice
Perché è vero che nel tuo codice le righe possono essere anche consecutive, mentre il vincolo che non devono essere consecutive è fornito come indicazione da rispettare nel testo dell'esercizio

Mentre per quanto riguarda:
Hai ragione...ecco sicuramente devo farmi le lenti degli occhiali nuovi... boh
 pray
se ti riferisci alla tua obiezione, come dicevo è accoglibile;
se invece ti riferivi al fatto di non aver capito il testo (mi riferisco alla confusione ingenerata dallo scambio di "reciprocamente" con l'ipoteticamente errato "rispettivamente"), è sufficiente chiedere durante l'esame al docente per capire quale dei casi possibili sia quello giusto.

Salutoni a tutti e buona fortuna.ciaociao.

(EDIT: un tag CODE di apertura inserito per sbaglio come /CODE mi ha fatto cassariare per non pochi minuti boh)
« Last Edit: 30-03-2009, 21:53:42 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
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #8 on: 30-03-2009, 21:50:59 »

Grazie reverse, si comunque l'esercizio l'ho corretto come doveva andare, allora avevo trovato un errore nel codice di Atrix...grazie dei suggerimenti mi hai fatto capire dove avevo sbagliato...ciao ciao!
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #9 on: 30-03-2009, 22:34:26 »

non ho capito,il mio è sbagliato??
Logged

feboss
Guest
« Reply #10 on: 31-03-2009, 13:57:50 »

La soluzione dovrebbe fare più o meno così
Code:
public static boolean metodo(int[][] A)
    {
        int cont = 0;
        for (int r = 0; r < A.length - 2; r++)
            for (int r2 = r + 2; r2 < A.length; r2++, cont = 0)
            {
                for (int c = 0; c < A[r].length; c++)
                    for (int c2 = 0; c2 < A[r2].length; c2++)
                        if (A[r][c] == A[r2][c2])
                            cont++;
                if (cont == 2)
                    return true;
                cont = 0;
            }
        return false;

    }
« Last Edit: 31-03-2009, 14:12:52 by feboss » Logged
CollegaCaparezza
Apprendista Forumista
**
Offline Offline

Posts: 141



« Reply #11 on: 31-03-2009, 15:10:27 »

dottori volevo sapere una cosa
siccome vedo molti ragazzi che hanno fatto la seconda e la terza prova di programmazione volevo sapere più o meno come sarà stutturata la terza prova e cosa sarà meglio mettere o omettere nel diagramma uml e nel main
grazie in anticipo
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #12 on: 31-03-2009, 15:55:47 »

per l'uml a mio parere, ma penso che sia così anche per esperienza, più si fa dettagliato, con tutti i metodi get per le variabili, tutti i toString() e preferendo di creare una classe piuttosto che una semplice variabile quando serve è meglio..cioè ad esempio se abbiamo un chip con la memoria possiamo utilizzare un array di byte ma ancora meglio possiamo creare una classe memoria che poi al suo interno ha come variabile l'array..e così per ogni cosa...ad esempio io ho fatto la terza prova del primo appello, quella delle imbarcazioni, e ho implementato anche la classe acqua, non so se qualcun altro ha avuto la mia stessa idea ma suppongo che sia stata premiata visto il voto 
per quanto riguarda il main non ci sono criteri..bisogna scrivere il pezzo di codice che fa esattamente ciò che viene richiesto..niente di più e niente di meno..
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
ɹǝǝ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 #13 on: 31-03-2009, 23:01:14 »

dottori volevo sapere una cosa
siccome vedo molti ragazzi che hanno fatto la seconda e la terza prova di programmazione volevo sapere più o meno come sarà stutturata la terza prova e cosa sarà meglio mettere o omettere nel diagramma uml e nel main
grazie in anticipo

Questo intervento è altamente fuori dal contesto dell'argomento principale.
Conveniva che postavi la tua legittima domanda in un altro topic .
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
Pages: [1]   Go Up
Print
Jump to: