Pages: [1] 2   Go Down
Print
Author Topic: class, interface, or enum expected...di che si tratta?  (Read 11453 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
gigyrock
Apprendista Forumista
**
Offline Offline

Posts: 107



WWW
« on: 15-03-2011, 11:23:20 »

Salve ragazzi vi posto il testo e il codice che ho scritto, dell'esercizio che sto svolgendo...se ci sono errori di sintassi ecc è perchè ancora non l'ho rivisto, ma il primo errore che mi esce è questo qua: class, interface, or enum expected
e mi esce parecchie volte su quasi tutte le righe, che si trovano all'interno dei due metodi...quindi penso sia qualcosa di sbagliato a monte, che poi provoca questo tipo di errore, qualcuno sa dirmi cos'è?

cmq...
TESTO
Esercizio 2
Scrivere un metodo che prenda come parametri formali un array di stringhe A e restituisca in output
un array B di m stringhe, dove:
• m è la lunghezza media delle stringhe in A di lunghezza maggiore di 5, e
• la i-esima stringa di B è ottenuta concatenando (m*i) asterischi.

E il codice che ho scritto è questo:

Code:
public class eserciziosito2
{
public static void main (String[]args)
{
String []A={ciao, pulce, fame, fumo};

System.out.print(metodoB(calcola_m(A)));

}
}
public static int calcola_m (String[]A)
{
int M;
int c=0; int sommastringhe=0;
for(int i=0;i<A.length;i++)
{
if (A[i].length()>5)
{ c++;
sommastringhe+=A[i].length();
}
}
M=integer.parseint(sommastringhe/c);
return M;
}
public static string[] metodoB (int m)
{ String[]B=new String[m];
for (int i=0;i<B.length;i++)
{
for (int j=0;j<(m*i);j++)
{
B[i]= B[i]+ "*";
}

}
return B;
}

« Last Edit: 15-03-2011, 11:33:53 by gigyrock » Logged
ForbiddenAlex
Matricola
*
Offline Offline

Posts: 36


« Reply #1 on: 15-03-2011, 11:39:14 »

Non ho letto il codice per intero ma ti posso dire che la classe è stata definita contenendo solo il blocco statico main...i metodi li hai messi fuori, ma senza definire altre(eventuali) classi....chiudi la classe al termine della definizione dei metodi e vedi se ti da altri tipi(questo non dovrebbe dartelo più) di errori o eccezioni!
Logged
havoc
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 224


« Reply #2 on: 15-03-2011, 11:50:54 »

Code:
String []A={ciao, pulce, fame, fumo};

Oso un'ipotesi: dovevi mettere le virgolette doppie nelle stringhe.
Logged

gigyrock
Apprendista Forumista
**
Offline Offline

Posts: 107



WWW
« Reply #3 on: 15-03-2011, 11:59:49 »

Allora si le virgolette le ho dimenticate, però il problema era quello di chiudere il main dopo i metodi...quindi grazie =)
però ora ho un'altro problema
cioè:
"
Code:
cannot find symbol
symbol  : method parseInt(int)
location: class java.lang.Integer
M=Integer.parseInt(sommastringhe/c);
vi posto di nuovo il codice per comodità:
Code:
public class eserciziosito2
{
public static void main (String[]args)
{
String []A={"ciao", "pulce", "fame", "fumo"};

System.out.print(metodoB(calcola_m(A)));

}

public static int calcola_m (String[]A)
{
int M;
int c=0; int sommastringhe=0;
for(int i=0;i<A.length;i++)
{
if (A[i].length()>5)
{ c++;
sommastringhe+=A[i].length();
}
}
M=Integer.parseInt(sommastringhe/c);
return M;
}
public static String[] metodoB (int m)
{ String[]B=new String[m];
for (int i=0;i<B.length;i++)
{
for (int j=0;j<(m*i);j++)
{
B[i]= B[i]+ "*";
}

}
return B;
}
}

il risultato dell'operazione "sommastringhe/c" dovrebbe essere un byte, perchè non riesce a convertirlo?
Logged
ForbiddenAlex
Matricola
*
Offline Offline

Posts: 36


« Reply #4 on: 15-03-2011, 12:36:07 »

Prova così:

Code:
public class eserciziosito2
{     


public static void main(String[] args) {
String[] A = {"cane", "scarpa", "pulce", "lama", "monitor"};
String[] B = metodo(A);
for (int i=0; i<B.length; i++)
System.out.println(B[i]);
}

public static String[] metodo(String[] s) {
int stringheMaggioriCinque = 0;
int count = 0;
int m = 0;
for (int i=0; i<s.length; i++) {
if (s[i].length()>5) {
count += s[i].length();
stringheMaggioriCinque++;
}
}
String[] output = new String[stringheMaggioriCinque];
m = count/output.length;

for (int i=0; i<output.length; i++) {
output[i] = "";
int numeroAsterischi = m*i;
for (int j=0; j<numeroAsterischi; j++)
output[i] += "*";
        }
return output;
}
}
Logged
gigyrock
Apprendista Forumista
**
Offline Offline

Posts: 107



WWW
« Reply #5 on: 15-03-2011, 13:24:48 »

Prova così:

Code:
public class eserciziosito2
{     


public static void main(String[] args) {
String[] A = {"cane", "scarpa", "pulce", "lama", "monitor"};
String[] B = metodo(A);
for (int i=0; i<B.length; i++)
System.out.println(B[i]);
}

public static String[] metodo(String[] s) {
int stringheMaggioriCinque = 0;
int count = 0;
int m = 0;
for (int i=0; i<s.length; i++) {
if (s[i].length()>5) {
count += s[i].length();
stringheMaggioriCinque++;
}
}
String[] output = new String[stringheMaggioriCinque];
m = count/output.length;

for (int i=0; i<output.length; i++) {
output[i] = "";
int numeroAsterischi = m*i;
for (int j=0; j<numeroAsterischi; j++)
output[i] += "*";
        }
return output;
}
}
scusami ma è la stessa cosa supergiù, il problema non è quello, il problema è che il risultato di una divisione non è sempre int, mentre a noi serve ottenere un int o comunque arrotondarlo in modo da stampare tanti asterischi quanto è questo int...e in teoria è giusto come faccio io ma perchè in pratica la funzione Integer.parseInt mi da errore???
Logged
ForbiddenAlex
Matricola
*
Offline Offline

Posts: 36


« Reply #6 on: 15-03-2011, 14:03:43 »

per quanto riguarda questa divisione a te non interessa il resto(ad esempio 13/2=6, col resto di 1), devi effettuare una media matematica, se la media viene 6,25(ad esempio), non puoi creare stringhe formate da 6,25 asterischi ma da 6...quindi del resto non ti interessa nulla. A mio avviso la tua implementazione è un pò confusionaria. Per quanto riguarda il parseInt...stai provando ad effettuare il parsing ad intero, di un tipo che già è un intero...quindi è ovvio che ti dia errore...secondo me in questo caso il parseInt non ti serve proprio a nulla!
Logged
gigyrock
Apprendista Forumista
**
Offline Offline

Posts: 107



WWW
« Reply #7 on: 15-03-2011, 14:38:24 »

per quanto riguarda questa divisione a te non interessa il resto(ad esempio 13/2=6, col resto di 1), devi effettuare una media matematica, se la media viene 6,25(ad esempio), non puoi creare stringhe formate da 6,25 asterischi ma da 6...quindi del resto non ti interessa nulla. A mio avviso la tua implementazione è un pò confusionaria. Per quanto riguarda il parseInt...stai provando ad effettuare il parsing ad intero, di un tipo che già è un intero...quindi è ovvio che ti dia errore...secondo me in questo caso il parseInt non ti serve proprio a nulla!
ma come può essere un intero se è una media e quindi una divisione fra interi? E' probabile che venga un numero con la virgola...cosa vuoi dire spiegati meglio? che il casting avviene in automatico? cioè il numero perde i decimali dopo la virgola essendo m un intero? non capisco...perchè ammeno chè non mi sono rincitrullito
m è un intero e assegno ad m una divisione tra interi, il quale risultato non è detto che sia un intero... non capisco   testate testate testate
Logged
ForbiddenAlex
Matricola
*
Offline Offline

Posts: 36


« Reply #8 on: 15-03-2011, 14:50:06 »

Il tipo java int restituisce sempre la parte intera di un numero o delle operazioni effettuate su di esso. Per ottenere il resto intero dovresti usare il modulo. Se per esempio a=13, b=6: a%b=1(dove l'operatore % è il modulo, ovvero il resto intero di una divisione...) se invece tu volessi ottenere il numero con parte intera e parte decimale(virgola mobile) dovresti usare un double.

edit: ma il punto è che,  date le direttive di svolgimento di questo esercizio nello specifico, a te non interessa la parte decimale ma solo quella intera, altrimenti ,a limite puoi fare la seguente:
 - il valore m lo poni come double e utilizzi il metodo Math.round(m) per ottenere un arrotondamento all'intero più vicino alla media calcolata. Alla fine comunque il numero di asterischi dovrà sempre essere un intero!!!
« Last Edit: 15-03-2011, 14:59:06 by ForbiddenAlex » Logged
gigyrock
Apprendista Forumista
**
Offline Offline

Posts: 107



WWW
« Reply #9 on: 16-03-2011, 12:07:14 »


edit: ma il punto è che,  date le direttive di svolgimento di questo esercizio nello specifico, a te non interessa la parte decimale ma solo quella intera, altrimenti ,a limite puoi fare la seguente:
 - il valore m lo poni come double e utilizzi il metodo Math.round(m) per ottenere un arrotondamento all'intero più vicino alla media calcolata. Alla fine comunque il numero di asterischi dovrà sempre essere un intero!!!
Così facendo però stravolgo tutto l'algoritmo, perchè anche l'altro modulo ha bisogno di un int come input che sarebbe m, non mi va di trasformarlo in un double anche perchè l'esercizio è chiaro, richiede un int...qui la questione è come fare il casting da byte a int di questa operazione
Code:
M=(sommastringhe/c)
spero che qualcuno lo sappia...
io ho provato a togliere l'Integer.parseInt...lasciando l'espressione così come l'ho scritta qui sopra, nella speranza che in automatico lui prendesse solo il numero prima della virgola, ma mi da questo errore:
Code:
[Ljava.lang.String;@3e25a5>Exit code: 0

qualcuno mi aiutiiii, non mi va di bloccarmi per una cavolata! =)  pray
Logged
ForbiddenAlex
Matricola
*
Offline Offline

Posts: 36


« Reply #10 on: 16-03-2011, 16:50:34 »

Secondo quanto riportato dal tuo codice hai:

int M;
int c=0; int sommastringhe=0;

dove sono questi fantomatici byte di cui parli? stai cercando di effettuare il casting di qualcosa che nel tuo codice nemmeno hai implementato...tra l'altro i byte non ti servono a nulla in questo caso. Il risultato che ottieni alla fine:

[Ljava.lang.String;@3e25a5>Exit code: 0

non è un errore(infatti in ouput ti dice "Exit code 0", se fosse stato un errore avrebbe stampato: "Exit code 1")... questo messaggio vuole avvertirti del fatto che stai cercando di stampare su standard output(System.out.println per intenderci) un array di stringhe(@3e25a5 dovrebbe indicare l'indirizzo di memoria in esadecimale in cui è contenuto l'array stesso) ma non è possibile stampare l'array per intero senza prima scorrerlo, ti consiglierei di far diventare il main così(che poi è quello che ho fatto io):

public static void main (String[] args)
   {
      String []A={"ciao", "pulce", "fame", "fumo"};
      String[] B = metodoB(calcola_a(A));
                for (int i=0; i<B.length; i++)
       System.out.println(B);
        }

In questo modo riuscirà a stamparti in output le singole stringhe dell'array e non(cosa non possibile) l'array per intero....spero di essere stato chiaro.



« Last Edit: 16-03-2011, 16:52:48 by ForbiddenAlex » Logged
gigyrock
Apprendista Forumista
**
Offline Offline

Posts: 107



WWW
« Reply #11 on: 16-03-2011, 16:57:27 »

Secondo quanto riportato dal tuo codice hai:

int M;
int c=0; int sommastringhe=0;

allora mi sono rincitrullito io
"sommastringhe" è un int supponiamo che sommastringhe=16 che sono la somma di tutti i caratteri delle stringhe maggiori di 5;
e "c" è un int pure supponiamo sia c=3 cioè il numero di stringhe maggiori di 5;
risultato
16/3=5,3333333333 ora 5,3 periodico è un int?Huh?Huh?Huh? no! ecco quale è il mio problema...posso assegnare questo eventuale risultato ad M che è un int?Huh??
Logged
ForbiddenAlex
Matricola
*
Offline Offline

Posts: 36


« Reply #12 on: 16-03-2011, 17:11:51 »

non ti sei rincitrullito...stai semplicemente ingigantendo un problema che infondo è molto più semplice di quel che pensi. 16/3=5,333 è un double. Se imposti(mi pare di avertelo già spiegato) int x=16, int y = 3 ed esegui x/y il risultato sarà un intero, quindi 5 trascurando la parte decimale. Se invece imposti double x=16, double y=3 ed esegui x/y il risultato sarà 5,333(ovvero un double). Secondo punto: che cavolo ci vuoi fare con i byte? Io ancora non l'ho capito, questi sono tipi numerici, non sono mica byte....l'esercizio non richiede l'utilizzo dei byte quindi è anche inutile prendere in considerazione il tipo byte. Se devi avere m*i asterischi, dove m è la media delle stringhe con più di 5 caratteri, che tu arrotondi alla fine o che tu utilizzi una divisione tra interi(che prende la parte intera e basta) alla fine dovrai "PER FORZA" effettuare una moltiplicazione(m*i) che restituisca un intero. Le strade da prendere possono essere 2:

1) dividere direttamente degli interi quindi ottenere un intero.
2) porre m come double ed effettuare un round su di esso(Math.round(m)), funzione che restituisce l'intero più vicino al double in questione.

ps: tra l'altro ho notato che hai inserito, all'interno del tuo array di stringhe, tutte stringhe di lunghezza <=5, quindi la media ti dovrebbe pure generare un errore(Exception NaN: Not a Number...o divided by zero).
Logged
gigyrock
Apprendista Forumista
**
Offline Offline

Posts: 107



WWW
« Reply #13 on: 16-03-2011, 17:24:25 »

a  ok quindi in automatico diventa double...apposto...no pensavo fosse un byte il risultato e non un double...
ok ma ora perchè questo output?
Code:
[Ljava.lang.String;@3e25a5>Exit code: 0
come risolvo?
mi è capitato anche in un altro esercizio...
Logged
ForbiddenAlex
Matricola
*
Offline Offline

Posts: 36


« Reply #14 on: 16-03-2011, 17:26:56 »


[Ljava.lang.String;@3e25a5>Exit code: 0

non è un errore(infatti in ouput ti dice "Exit code 0", se fosse stato un errore avrebbe stampato: "Exit code 1")... questo messaggio vuole avvertirti del fatto che stai cercando di stampare su standard output(System.out.println per intenderci) un array di stringhe(@3e25a5 dovrebbe indicare l'indirizzo di memoria in esadecimale in cui è contenuto l'array stesso) ma non è possibile stampare l'array per intero senza prima scorrerlo, ti consiglierei di far diventare il main così(che poi è quello che ho fatto io):

public static void main (String[] args)
   {
      String []A={"ciao", "pulce", "fame", "fumo"};
      String[] B = metodoB(calcola_a(A));
                for (int i=0; i<B.length; i++)
       System.out.println(B);
        }

In questo modo riuscirà a stamparti in output le singole stringhe dell'array e non(cosa non possibile) l'array per intero....spero di essere stato chiaro.




Logged
Pages: [1] 2   Go Up
Print
Jump to: