Pages: [1] 2   Go Down
Print
Author Topic: array frastagliati  (Read 2108 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
giuseppe64
Matricola
*
Offline Offline

Posts: 17


« on: 20-01-2012, 18:23:10 »

ciao a tutti vorrei un aiuto con gli array frastagliati in particolare le matrici...vorrei sapere come si fa per esempio a fare la somma di una colonna in una matrice frastagliata...quale è l'idea? devo cercare prima la riga massima? grazie a tutti quelli che mi aiuteranno
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #1 on: 20-01-2012, 18:35:33 »

ciao a tutti vorrei un aiuto con gli array frastagliati in particolare le matrici...vorrei sapere come si fa per esempio a fare la somma di una colonna in una matrice frastagliata...quale è l'idea? devo cercare prima la riga massima? grazie a tutti quelli che mi aiuteranno

Per fare la somma di una colonna, dipende quale, devi considerare sempre la prima riga, verificare se sia presente quella colonna, e scendere di riga per riga.
Logged

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

Gender: Male
Posts: 28


« Reply #2 on: 20-01-2012, 18:50:05 »

Ciao, ho un problema simile al tuo riguardante gli array frastagliati scansionandoli per colonne.

Ho dei dubbi riguardo l'utilizzo del "length"...

Utilizzo 2 indici "i" e "j", dove "i" è il numero di righe e "j" è il numero di colonne. Inoltre creo un array frastagliato "A".

Inizializzo l'array frastagliato dando ad ogni indice la sua "sottodimensione".

Adesso utilizzo 2 cicli for per scansionare per colonne l'array frastagliato:

Code:
for(j=0; j<A[i].length; j++)
     for(i=0; i<A.length; i++)

Se fosse stato un array bidimensionale non frastagliato non avrei avuto problemi, ma qui ottengo un errore: "Out of bounds".

Mi chiedo se dipende dal "mio" uso del length e ricordo che il mio intento è quello di scansionare l'array frastagliato per colonne. Non vi sto a scrivere che tipo di operazione devo fare con questa scansione, non credo che vi sia utile per aiutarmi.

Help
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #3 on: 20-01-2012, 19:12:07 »

@Luca:Copia l' intero codice che hai scritto.

Nel secondo for leggo che inizializzi la i, in quel modo nel primo for non sa come regolarsi con
Code:
A[i].length

@giuseppe:

l' idea è di avere il for più interno che scorre le colonne e avanza finché non si sofferma sulla colonna che ti interessa, e fa la somma degli elementi se la j coincide con la colonna voluta, poi si esce da questo for e si scende sotto grazie al for esterno che fa avanzare la riga.
« Last Edit: 20-01-2012, 19:28:20 by Daréios89 » Logged

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

Gender: Male
Posts: 28


« Reply #4 on: 20-01-2012, 19:29:41 »

È un metodo. Scrivo l'esercizio:

 Scrivere un metodo che prenda in input un array bidimensionale frastagliato A
    di Stringhe, ed un stringa Str, e restituisca un boolean che indichi
    se Str è sottostringa di tutte le stringhe presenti in una qualche colonna
    di A.

Invece di "Str" ho messo "y"

Code:
static boolean metodoEx(String [][] matrix, String y)
{
int i=0, j=0, index1=0, index2=y.length()-1, counter=0, maincounter=0;

for(j=0; j<matrix[i].length; j++)
{
maincounter=0;
for(i=0; i<matrix[i].length; i++)
{
counter=0;
while(index2 < matrix[i][j].length())
{
if(y.equals(matrix[i][j].substring(index1, index2)))
counter++; // Se una stringa dell'array contiene la mia sottostringa allora incremento il contatore
index1++;    //indici per il substring
index2++;
}
if(counter > 0)
maincounter++;

if(maincounter==matrix.length) //Se a fine colonna il maincounter è = alla dimensione della colonna, allora è true
return true;
}
}
return false;
}
Logged
Luca_Comis
Matricola
*
Offline Offline

Gender: Male
Posts: 28


« Reply #5 on: 20-01-2012, 19:43:32 »

Mi sono appena accorto che sbaglio con l'uso degli indici del substring...
Dovevo inizializzare index2= y.length();, ma non ho centrato ancora l'errore.
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #6 on: 20-01-2012, 19:48:55 »

Cioè nel senso che se io ho:

Code:
String [][] s={{"ciao","mamma"},
                       {"arricciao","bò","niente"},
       {"miao"}};

Mi restituisce true perchè c' è la sottostringa "iao"?
Logged

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

Gender: Male
Posts: 28


« Reply #7 on: 20-01-2012, 19:53:21 »

Già. Ovviamente se "iao" sarebbe la stringa Str. Nel mio caso y
Logged
giuseppe64
Matricola
*
Offline Offline

Posts: 17


« Reply #8 on: 20-01-2012, 20:19:44 »

se prendo come esempio la parte di esercizio postata da luca ( che indichi
    se Str è sottostringa di tutte le stringhe presenti in una qualche colonna
    di A.)

io dovrei scansionare ogni colonna e vedere se il numero di sottostringhe che trovo sono uguali al numero di elementi presenti nella colonna x esempio

ciao          mamma
arricciao   bò            niente
miao
 come faccio a controllare che nella colonna 3(2) è presente una sola stringa ed è sottostringa di "nte"?? non so se ho reso l'idea abbastanza chiara...
x sapere se e sottostringa so come si fa..il problema è sapere quanti elementi ci sono in ogni colonna
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #9 on: 20-01-2012, 20:22:14 »

Si peppe l' hai resa, ci sto lavorando sono arrugginito  cry

Secondo me ci vogliono 3 cicli for per questo esercizio di Luca, secondo me il resto va bene, ci sto lavorando adesso e dopo cena.
Logged

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

Gender: Male
Posts: 28


« Reply #10 on: 20-01-2012, 20:32:45 »

Troppo gentile Daréios89 
Logged
giuseppe64
Matricola
*
Offline Offline

Posts: 17


« Reply #11 on: 20-01-2012, 20:42:27 »

ok cosi serve anche a me io a quando ho capito serve calcolare la lunghezza massima della riga x il resto non lo so
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #12 on: 20-01-2012, 23:10:37 »

Mi arrendo...troppo complicato (per me), e sono stanco, non funziona in tutti i casi....vi posto il codice senza commenti, ma così non funziona bene:

Code:
public class Frastagliati2
{
public static void main(String [] args)
{
String [][] s={{"ciao","mamma"},
                      {"arricciao","mam","niente"},
      {"ao"}};
     
     System.out.println(metodoEx(s,"ao"));
     // metodoEx(s,"iao");
     
     
}



static boolean metodoEx(String [][] matrix, String y)
{
int i=0, j=0, index1, index2, counter, maincounter, missed;




for(int r=0; r<matrix.length-1; r++)
       {
for(j=0; j<matrix[r].length; j++)
{
missed=0;
maincounter=0;

for(i=r;i<matrix.length; i++)
{
index1=0;
index2=y.length();
counter=0;


 
if(i<matrix[i].length||j==0)
{
while(index2 <=matrix[i][j].length())
{

//System.out.println(matrix[i][j].substring(index1, index2));
if(y.equals(matrix[i][j].substring(index1, index2)))
counter++; // Se una stringa dell'array contiene la mia sottostringa allora incremento il contatore

index1++;    //indici per il substring
index2++;

}

//System.out.println(maincounter);
if(counter > 0)
maincounter++;





if(matrix.length==missed+maincounter)
{

//Se a fine colonna il maincounter è = alla dimensione della colonna, allora è true
return true;
}

}
else
missed++;
}
}
}

   
return false;
}
}

Questo è quello di giuseppe....non so se ci sono errori:

Code:
public class Frastagliati
{
public static void main(String [] args)
{
int[][] a={{1,2,3},
          {4},
          {8,9,10,14}};
   

int column=3;

int somma=0;
 

for(int r=0; r<a.length; r++)
{
for(int j=0; j<a[r].length; j++)
{
if(j==column-1)
somma+=a[r][j];
}
}

if(somma!=0)
     System.out.println("La somma degli elementi è "+somma+'.');
else
System.out.println("Errore....non esiste la colonna "+column+'.');
}

}
« Last Edit: 20-01-2012, 23:17:06 by Daréios89 » Logged

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

Gender: Male
Posts: 28


« Reply #13 on: 21-01-2012, 01:30:57 »

Daréios grazie mille per il tuo aiuto continuerò a sbatterci la testa per trovare la soluzione  pc
Logged
giuseppe64
Matricola
*
Offline Offline

Posts: 17


« Reply #14 on: 21-01-2012, 09:40:48 »

grazie...luca fammi sapere perchè mi interessa anche a me
Logged
Pages: [1] 2   Go Up
Print
Jump to: