Pages: 1 2 3 [4] 5 6 ... 9   Go Down
Print
Author Topic: esercizi seconda prova in itinere  (Read 23309 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #45 on: 31-12-2008, 18:01:38 »

Mi ero perso questo passaggio del tuo post, caro Fr3d3R!K
Mettici (visto che lo richiede) anche un controllo del tipo if(S.equals("")) continue; else {fai i dovuti controlli} per saltare stringhe mancanti.
Tuttavia, tale codice non può funzionare in generale nono, poiché S dovrebbe essere una stringa già assegnata in qualche modo scorrendo i due array, e se scorro fuori da un array tentando di leggere una posizione non esistente, sollevo una java.lang.ArrayIndexOutOfBoundException boh
 
è probabile che io non abbia afferrato in pieno il tuo discorso, però può anche darsi di sì, per cui io intanto rispondo  : io non mi sono riferito all'array, ma alla stringa singola, in quanto se era vuota andava saltata ma forse (mi è venuto in mente ora) viene saltata automaticamente ed io ho detto una ca***ta sia prima che ora...
L'errore invece è nel S.equals("") quando invece andrebbe S.length()==0, sbaglio reverse?
« Last Edit: 31-12-2008, 18:05:22 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #46 on: 31-12-2008, 18:04:42 »

Salve a tutti , vorrei un aiuto riguardo questo esercizio della seconda prova itinere ,praticamente non saprei cosa fare XD...

ecco qua la consegna...

Esercizio 8
Scrivere un metodo che prenda come parametro formale un vettore di stringhe e restituisca in output
un vettore di interi contenente in ogni locazione, rispettivamente, la somma dei codici ASCII
maggiori di 32 dei caratteri nella corrispondente stringa in input.

qualcuno mi saprebbe aiutare?
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #47 on: 31-12-2008, 18:17:34 »

Puoi provare, prendendo ogni carattere della stringa corrispondente, memorizzarlo in una variabile temporanea "castato" (cioè (int)(carattere)) ad int (così ottieni il valore numerico del carattere che corrisponde all'ASCII), e poi se è maggiore di 32 lo sommi alla rispettiva locazione dell'array di interi...
« Last Edit: 31-12-2008, 18:23:19 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Gam
Apprendista Forumista
**
Offline Offline

Posts: 385



« Reply #48 on: 31-12-2008, 19:27:41 »

Ciao volevo avere un chiarimento su questo esercizio. Il dubbio era che facendo caso che la stringa non abbia numeri o simboli ma solo lettere è scontato guardando la tabella dei codici ASCII che le lettere siano maggiori di 32.
Quindi significa che la stringa che il metodo prende in considerazione conterrà anche dei numeri e simboli?
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #49 on: 01-01-2009, 17:11:45 »

Code:
public class esercizio7
{
public static int[] CodiciCaratteri(String[] S)
{
int i;
int[] somma=new int[S.length];

for(i=0;i<somma.length;i++) //inizializzazione array di int
somma[i]=0;

for(i=0;i<S.length;i++) //ciclo array di stringhe
for(int j=0;j<S[i].length();j++) //ciclo delle singole stringhe
{
int temp=(int)(S[i].charAt(j));
if(temp>32)
somma[i]+=temp;
}
return somma;
}
public static void main(String[] args)
{
String[] S={"cia ","ti","piace","il","java?"};
int[] somma=CodiciCaratteri(S);
for(int i=0;i<somma.length;i++)
System.out.print(somma[i]+" ");
System.out.println();
}
}
io ho scritto lettere ma le stringhe possono contenere tutti i simboli previsti dal codice ascii.
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #50 on: 01-01-2009, 22:12:32 »

Avrei un problema con l'esercizio 13 , praticamente mi fa Bound of exception , ora vi mostro il mio codice...

la consegna è questa
Esercizio 13
Scrivere un metodo che prenda come parametro formale un array di stringhe A e restituisca in
output una stringa ottenuta concatenando il penultimo e l’ultimo carattere occorrenti nella prima e
nell’ultima stringa in A.
N.B.: Si supponga che A sia non vuoto e che tutte le stringhe in A abbiano più di due caratteri.



import java.lang.*;
import java.math.*;

public class esercizio13
{

   
   public static String metodo(String [] A)
   {
      int i;
      int M;
      int N;
      String G="";
      
      char c;
      
      M=A[0].length();
      N=A.length;
      
      G =G+ A[0].charAt(M);
      G =G+ A[0].charAt(M-1);
      
      M=A[N].length();
      
      G =G+ A[N].charAt(M);
      G =G+ A[N].charAt(M-1);
      
      
      return G;
   
   }




   public static void main(String args[])
   {
      String [] A = {"ciaodfdffdssddd","fidfsdsfdfdfsrltol","deathdfsfdsdfdsnote","flaridsfdsfdfsdsfogme"};
      
      System.out.println(metodo(A));
      
      
      
    }
   
   
}

praticamente me lo compila non dandomi errori , ma poi non me lo esegue , qual'è il problema??
Logged
ɹǝǝ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 #51 on: 01-01-2009, 23:31:06 »

Avrei un problema con l'esercizio 13 , praticamente mi fa Bound of exception , ora vi mostro il mio codice...
[...]
praticamente me lo compila non dandomi errori , ma poi non me lo esegue , qual'è il problema??
Prima di dirti dove sta l'errore, ti vorrei suggerire che la stessa JVM quando ci sono errori ti indica esattamente dove sono, così magari impari anche ad analizzare riga per riga l'output dettagliato dall'esecutore java .

Il tuo codice produce il seguente errore:
Code:
>java esercizio13
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 15
        at java.lang.String.charAt(Unknown Source)
        at esercizio13.metodo(esercizio13.java:20)
        at esercizio13.main(esercizio13.java:40)
Questo output mi dice che il metodo main della classe esercizio13 ha provocato un'eccezione nella riga 40 del file esercizio13.java, che per il tuo codice consiste nella riga
Code:
System.out.println(metodo(A));
Ora se leggi la riga appena sopra nell'output si vede che il metodo metodo della classe esercizio13 ha provocato una eccezione (che poi è quella che è stata fatta avanzare nello stack delle chiamate poiché non gestita precedentemente) in riga 20 del file esercizio13.java, che per il tuo codice consiste nella riga
Code:
G =G+ A[0].charAt(M);
A sua volta vedi che l'eccezione è stata sollevata (thrown) esattamente dal metodo charAt della classe String e l'eccezione è java.lang.StringIndexOutOfBoundsException. Leggendo tale javadoc leggiamo che tale eccezione è lanciata dai metodi di String per indicare che un indice è o negativo oppure che è maggiore oppure che è uguale alla dimensione della stringa. Per alcuni metodi come quello charAt, questa eccezione è lanciata quando l'indice è uguale alla dimensione della stringa.

È proprio questa ultima riga che da una risposta esauriente alla tua domanda.

Con questo non voglio dire che usare il forum per chiedere spiegazioni/suggerimenti/chiarimenti sia sbagliato, solo che prima di farlo è bene usare i mezzi minimi che ciascuno ha sicuramente a disposizione, cioè la lettura all'indietro dello Stack delle chiamate fino a giungere alla eccezione od errore e a chi l'ha generato, documentandosi opportunamente.
Capito quindi l'errore ?
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
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #52 on: 02-01-2009, 12:50:27 »

Problema con un esercizio, anzi con 2!

1)  Scrivere un metodo, che presi 2 array A e B di byte, restituisca l'elemento che occorre piu volte nei 2 array (anche in uno solo)

2)  Scrivere un metodo, che preso un array bidimensionale frastagliato di Stringhe S, restituisca un boolean che indichi se esiste una riga che contiene 2 stringhe che terminano con la stessa coppia di caratteri

Su entrambi ho il problema di non riuscire ad isolare un elemento, per poterlo confrontare con gli altri...
Nel secondo riesco ad estrarre gli ultimi 2 caratteri, però poi non so come confrontarli con gli altri delle stringhe della riga

Spero di non essere stato troppo insistente, e che qualche anima pia possa darmi una mano!
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #53 on: 02-01-2009, 14:55:15 »

reversengineer è il migliore per aiutare ihihi  [Emoticon] Asd
si può usare il metodo replace della classe String???cioè è consentito?
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.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #54 on: 02-01-2009, 15:59:56 »

reversengineer è il migliore per aiutare ihihi  [Emoticon] Asd
si può usare il metodo replace della classe String???cioè è consentito?
tutti i metodi sono ammessi salvo diversa specifica (come ad esempio nell'esercizio del dizionario vengono vietati i metodi di ordinamento). In un esercizio della seconda prova, per portare un altro esempio, veniva vietato l'uso di array ausiliari. Dipende tutto dal testo ma il mio consiglio (generico) è sempre uno: se non è specificato, meglio chiedere, così non si sbaglia sicuro!
@TheSpecialOne: in che senso non riesci a isolare? quando sei dentro il ciclo memorizzi il valore in una variabile temporanea (ad esempio). Poi, per quanto riguarda l'esercizio 1 (e anche il 2 rivedendolo) sono stati postati sorgenti di esercizi quasi uguali (la procedura è sempre la stessa).
1. tieni fisso un elemento con un indice, e con l'altro scorri il primo (e successivamente il secondo) array. Mano a mano che trovi elementi che occorrono più volte li memorizzi nella variabile MAX. Finito il primo controllo incrementi il primo indice e torni a ricontrollare. Ovviamente devi prevedere una forma di controllo "aggiuntiva" (in realtà è quella che deve avvenire prima di tutte) perchè non è detto che i due array abbiano la stessa dimensione, e, senza, c'è la probabilità di generare un ArrayIndexOutOfBoundsExceptions. Ma l'idea di principio è questa.
2. In questo dopo tutti i for di rito, basta solo usare il metodo String.charAt(int) sugli ultimi due caratteri (guarda gli altri sorgenti per esempi), e ritornare true in caso di successo (o false nel caso contrario).
Spero sia tutto chiaro e di essere stato d'aiuto.
Saluti e buon 2009!
« Last Edit: 02-01-2009, 16:07:16 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #55 on: 02-01-2009, 16:55:42 »

Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca un boolean che indichi se esiste una colonna in S contenente due stringhe uguali (saltare le
eventuali stringhe mancanti)
[CUT]
scusa reverse, non vorrei "rovinarti la reputazione" [Emoticon] Asd però ho notato una cosa che mi ha incuriosito parecchio nel tuo codice (oltre alla mancata dichiarazione di r1 ed r2 ma quello immagino sia una semplice dimenticanza ): ho provato il tuo sorgente con questo main:
Code:
public static void main(String[] args)
{
String[][] S={{"sinhg","","dihjh"},{"",""},{"ca"},{"ciao","fdhd","dshgdsh","gsdg"}};
for(int i=0;i<S.length;i++) //questo ciclo serve solo per stampare l'array di input
{
for(int j=0;j<S[i].length;j++) //questo ciclo serve solo per stampare l'array di input
System.out.print(S[i][j]+" ");
System.out.println();
}
System.out.println("---------------------"); //questo serve per separare gli elementi della matrice dal flag
boolean flag=helpVivynz2(S);
System.out.println(flag);
}
e come risultato, come puoi vedere qui sotto, esce TRUE mentre dovrebbe uscire FALSE. Errori o cose simili però io non li ho notati, tu che dici? perchè è strana come cosa...
Code:
>javac helpVivynz2.java
>Exit code: 0
>java helpVivynz2
sinhg  dihjh
 
ca
ciao fdhd dshgdsh gsdg
---------------------
true
>Exit code: 0
Saluti!
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #56 on: 02-01-2009, 17:01:10 »

mi devo ricredere?
comunque è utile l'aiuto di tutti 
si può sistemare questo codice per fargli fare quello che effettivamente dovrebbe?Huh???

Code:
/*Scrivere un metodo che prenda in input una matrice A di long ed un intero m, e restituisca un
boolean che indichi se esistono due righe di A che condividono almeno m elementi (cioè devono
essere presenti in entrambe le righe, anche in posizioni differenti).
N.B.: Si supponga che ogni singola riga di A contenga elementi distinti*/
public class Es39
{
public static boolean mElementi(long[][] A,int m)
{
int cont=0; //conta il numero di elementi uguali
long temp=0;
for(int r=0;r<A.length;r++)
{
cont=0;
for(int c=0;c<A[0].length;c++)
for(int r1=r+1;r1<A.length;r1++)
{
for(int c1=0;c1<A[0].length;c1++)
if(A[r][c]==A[r1][c1])
{
if(temp!=A[r][c]) //per evitare che lo stesso valore venga contato più volte
cont++;
temp=A[r][c];
}
if(cont>=m)
return true;
}
}
return false;
}
}
« Last Edit: 03-01-2009, 10:20:57 by Vivynz » 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 #57 on: 02-01-2009, 20:25:31 »

scusa reverse, non vorrei "rovinarti la reputazione"
Non ti preoccupare, ho subito trattamenti molto peggiori del tuo in precedenti esperienze di forum, se proprio volessimo considerare il tuo intervento un trattamento negativo  .

Quote
[Emoticon] Asd però ho notato una cosa che mi ha incuriosito parecchio nel tuo codice (oltre alla mancata dichiarazione di r1 ed r2 ma quello immagino sia una semplice dimenticanza )
Ammetto di non aver compilato la classe prima di postare pray. r1 ed r2 andavano opportunamente dichiarate (magari nel rispettivo ciclo).

Quote
: ho provato il tuo sorgente con questo main:
Code:
public static void main(String[] args)
{
String[][] S={{"sinhg","","dihjh"},{"",""},{"ca"},{"ciao","fdhd","dshgdsh","gsdg"}};
for(int i=0;i<S.length;i++) //questo ciclo serve solo per stampare l'array di input
{
for(int j=0;j<S[i].length;j++) //questo ciclo serve solo per stampare l'array di input
System.out.print(S[i][j]+" ");
System.out.println();
}
System.out.println("---------------------"); //questo serve per separare gli elementi della matrice dal flag
boolean flag=helpVivynz2(S);
System.out.println(flag);
}
e come risultato, come puoi vedere qui sotto, esce TRUE mentre dovrebbe uscire FALSE.
Errato: secondo la definizione del problema, bisogna restituire true se esistono almeno due stringhe uguali in una stessa colonna, e nel tuo esempio una tale coppia è formata dalle stringhe vuote della colonna 1 (seconda colonna)

In realtà, questa tua osservazione chiarisce cosa non avevi capito quando veniva richiesto di "saltare le eventuali stringhe mancanti" nel testo dell'esercizio.
Stringhe mancanti è abbastanza sicuramente riferito a stringhe che in una data colonna non ci sono, vale a dire che bisogna saltare di controllare le stringhe che in una certa riga non sono presenti a posizioni fuori dalla dimensione dell'array.

Ciao ciao  .
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
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #58 on: 03-01-2009, 11:10:32 »

ragazzi io ho provato a fare l'esercizio n°1 ma non riesco a fermarmi non appena trovo la prima occorrenza.questo è il mio codice:
Code:
/*Esercizio 1
Scrivere un metodo che prenda come parametri formali un array di interi A e restituisca in output un
array di interi B in cui la posizione i-esima contiene l’indice della prima occorrenza di A[i] nel
sottovettore A[ i+1, …, A.length –1 ], oppure –1 se questa non esiste. Si veda l’esempio:
es.: A = [ 3, 2, 4, 3, 4, 3], B = [ 3, –1, 4, 5, –1, –1 ].*/
public class es1{
private int[]a;
private int x;
public es1(int[]a)
{
this.a=a;

}
public void getArray()
{
for (int i=0;i<a.length;i++)
{

for(int j=i+1;j<a.length-1;j++)
{


if(a[i]!=a[j])
{
x=-1;

}else  this.x=j;
}

System.out.print(x);

}
}
}
//per richiamare il metodo che ho fatto:
public class esrcizio1{
public static void main(String args[]){
int []a={ 3,2,4,3,4,3};

es1 b=new es1(a);
b.getArray();
}
}
qualcuno mi potrebbe dire cosa devo cambiare?è da ieri che ci provo ma non riesco a trovare la soluzione.cerfcate di aiutarmi il più presto possibile perchè se riesco a capire come si fa almeno credo che poi sarò in grado di fare gli altri esercizi sulle stringhe!grazie in anticipo dell'aiuto.
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #59 on: 03-01-2009, 12:38:38 »

salve a tutti, mi scuso anticipatamente per il disturbo 
Stamattina, svolgendo per l'ennesima volta un esercizio
Code:
Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe, e
restituisca un array bidimensionale S’ ottenuto da S eliminando le vocali ‘e’, ‘o’.
mi sono accorto di un grande problema, cioè della dimensione degli array frastagliati. Se cambio la dimensione del mio array per testare il metodo, esce dall'array, e di conseguenza mi dà errore.

Ora posto il codice che ho fatto, anche per permettervi di capire meglio il problema di fronte al quale mi trovo, che nello specifico si trova sul for della j.
Inserendo 
Code:
j<S[i].length
esce dall'array, in quanto nell'esempio i è uguale a 2, mentre j=3.
Come posso ovviare a questo problema???

Ecco il main:
Code:
public static void main (String [] args)
{
String [][] S= {{"MAMMA","INTER","LECCE","AIUOLA"},
                        {"MAN","OASIS"},
                        {"AEREO"}};
String [][] SS= elimina (S);      
}

Ed ecco il metodo:
Code:
private static String [][] elimina (String [][] S)
{
String [][] T= new String [S.length][S.length];
String str="";
for (int i=0;i<S.length;i++)
{
for (int j=0;j<S[i].length;j++)
{
for (int h=0;h<S[i][j].length();h++)
{
if (S[i][j].charAt(h) != 'E' && S[i][j].charAt(h) != 'O')
{
str=str+S[i][j].charAt(h);
T[i][j]=str;
}
}
str="";
}
}
return T;
}
Logged
Pages: 1 2 3 [4] 5 6 ... 9   Go Up
Print
Jump to: