PDA

View Full Version : [Java] Problema nello scrivere una classe di metodi utili per le stringhe


D4rkAng3l
19-11-2008, 15:43
Per un primo esame di programmazione ad oggetti in Java la professoressa ha fatto in classe il seguente esercizio: scrivere una classe chiamata GestoreStringhe che contiene una serie di metodi utili per operare sulle stringhe, come: invertiStringa, verificaPalindromia, etcetc...

Io l'ho scritta commentandola e studiandomela...ma quando vado a compilarla il compilatore mi dà una serie di errori...in parte li ho risolti..ma questi che rimangono non riesco a risolverli...vi posto quà il codice della classe e l'elenco degli errori:

Classe GestoreStringhe:

/* La classe GestoreStringhe è un contenitore di metodi utili per operare sulle stringhe */
public class GestoreStringhe{

/* Metodo che prende due stringhe: nome e cognome; e che le unisce separandole con uno spazio e mettendo in maiuscolo
le due iniziali ed in minuscolotutto il resto.
Es: nome: "maRiO", cognome: "rOSsi" --> s = "Mario Rossi" */

public static String trasformaInUna(String nome, String cognome){
String s;

s = nome.substring(0,1).toUppercase();
s += nome.substring(1).toLowercase();
s += " ";
s += cognome.substring(0,1).toLowercase()+cognome.substring(1).toLowercase();

return s;
}

/* Metodo che permette di invertire la stringa che prende come parametro. Es: Se il metodo viene invocato con la stringa
S="Roma", esso restituirà il riferimento all'oggetto di tipo String il cui valore è "amoR" */

public static String invertiStringa(String s){
String t; // Stringa da restituire che conterrà l'inversa della stringa s
int i; // Variabile contatore

t = 0; // Inizializzazione: se s è vuota allora verrà restituita la stringa vuota

/* Ciclo che copia in t i caratteri di s a partire dall'ultimo fino al primo */

for(i=s.length()-1; i>=0; i--){ // Per i che parte dalla lunghezza di s meno 1 fino ad aver letto tutti i caratteri
t += s.substring(i,i+1); // Concatena a t l'i-esimo carattere di s
}

return t;
}

/* Metodo che permette di verificare se la stringa che prende come parametro è una stringa palindroma restituendo TRUE
se è vero, FALSE al contrario.
Es: S = "ama" --> restituisce TRUE, S = "ciao" --> restituisce FALSE */

public static boolean verificaPalindromia(String s){

String t; // Conterrà la stringa invertita
t = invertiStringa(s); // Inverte la stringa s e la mette in t

return s.equals(t); // Restituisce il risultato del test di uguaglianza tra s e t che può essere TRUE o FALSE
}

/* Metodo che permette di calcolare il prefisso comune delle due stringhe che prende come parametro */

public static String calcolaPrefissoComune(String s, String t){

int i, min;
boolean trovato; // Diventa TRUE quando si trova un carattere diverso fra s e t
String pref;

if(s.length() < t.length()) min = s.length();

else min = t.length();

trovato = false; // Inizializzazione della variabile trovato a false poichè non è ancora stato trovato un carattere diverso fra s e t
pref = ""; // Inizializzazione delle string pref con la stringa vuota, il prefisso comune è inizialmente nullo
i = 0; // Inizializzazione il contatore a 0

while((i<min) && (!trovato)){ // Finchè il contatore è minore del possibile prefisso e non è stato ancora trovato un carattere diverso fra s e t
if(s.substring(i,i+1).equals(t.substring(i,i+1))){ // Se l'i-esimo carattere delle 2 stringhe è uguale
pref += s.substring(i,i+1); // Concatena a pref l'i-esimo carattere comune alle 2 stringhe
i++; // Incrementa di uno il contatore per andare a testare il prossimo carattere
}
else trovato = true; // Altrimenti impostra trovato a true
}

return pref; // Restituisci il prefisso comune trovato
}
}


ERRORI:

C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>javac TestGestoreStringhe.java
TestGestoreStringhe.java:11: cannot find symbol
symbol : method trasformaInUna(java.lang.String,java.lang.String)
location: class TestGestoreStringhe
String nomecognome = trasformaInUna(nome, cognome);
^
TestGestoreStringhe.java:13: cannot find symbol
symbol : method invertiStringa(java.lang.String)
location: class TestGestoreStringhe
String inversa = invertiStringa(a);
^
TestGestoreStringhe.java:15: cannot find symbol
symbol : method verificaPalindromia(java.lang.String)
location: class TestGestoreStringhe
boolean varbolleana1 = verificaPalindromia(a);
^
TestGestoreStringhe.java:17: cannot find symbol
symbol : method verificaPalindromia(java.lang.String)
location: class TestGestoreStringhe
boolean varbolleana2 = verificaPalindromia(c);
^
TestGestoreStringhe.java:19: cannot find symbol
symbol : method calcolaPrefissoComune(java.lang.String,java.lang.String)
location: class TestGestoreStringhe
String prefissocomune = calcolaPrefissoComune(a, b);
^
5 errors

C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>

Poi ho realizzato anche una classe TestGestoreSTringhe che contiene il main e dove testo i metodi scritti nella classe GestoreStringhe...anche quà ho degli errori...quando provo a compilare questa classe il compilatore è come se non vedesse i metodi definiti nella classe GestoreStringhe:


class TestGestoreStringhe{
/* Il metodo main è necessariamente un metodo di classe */
public static void main(String[] args){

String a = "Ciao";
String b = "CiaoMondo";
String c = "AMA";
String nome = "maRiO";
String cognome = "roSSi";

String nomecognome = trasformaInUna(nome, cognome);

String inversa = invertiStringa(a);

boolean varbolleana1 = verificaPalindromia(a);

boolean varbolleana2 = verificaPalindromia(c);

String prefissocomune = calcolaPrefissoComune(a, b);
}

}


ERRORI:


C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>javac TestGestoreStringhe.java
TestGestoreStringhe.java:11: cannot find symbol
symbol : method trasformaInUna(java.lang.String,java.lang.String)
location: class TestGestoreStringhe
String nomecognome = trasformaInUna(nome, cognome);
^
TestGestoreStringhe.java:13: cannot find symbol
symbol : method invertiStringa(java.lang.String)
location: class TestGestoreStringhe
String inversa = invertiStringa(a);
^
TestGestoreStringhe.java:15: cannot find symbol
symbol : method verificaPalindromia(java.lang.String)
location: class TestGestoreStringhe
boolean varbolleana1 = verificaPalindromia(a);
^
TestGestoreStringhe.java:17: cannot find symbol
symbol : method verificaPalindromia(java.lang.String)
location: class TestGestoreStringhe
boolean varbolleana2 = verificaPalindromia(c);
^
TestGestoreStringhe.java:19: cannot find symbol
symbol : method calcolaPrefissoComune(java.lang.String,java.lang.String)
location: class TestGestoreStringhe
String prefissocomune = calcolaPrefissoComune(a, b);
^
5 errors

C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>

Da che può dipendere tutto ciò?Come posso risolvere?

Grazie
Andrea

banryu79
19-11-2008, 15:46
basta che leggi il testo di ogni errore stampato: ti dice esattamente in che riga di quale file c'è l'errore, qual'è l'errore e il motivo del perchè c'è un errore.

ndakota
19-11-2008, 16:00
ho dato un'occhiata veloce.. non dovresti mettere

GestoreStringhe.


davanti alla chiamata di ogni metodo?
esempio:


String nomecognome = GestoreStringhe.trasformaInUna(nome, cognome);


visto che questi metodi fanno parte di una classe e sono statici..

D4rkAng3l
19-11-2008, 16:34
basta che leggi il testo di ogni errore stampato: ti dice esattamente in che riga di quale file c'è l'errore, qual'è l'errore e il motivo del perchè c'è un errore.

eh ma questolosò...infatti gli altri errori che dava li avevo risolti guardando l'output che dava il compilatore...tranne che questi non riesco a capire da cosa dipendano e come risolverli...

Vedendo quello che dice il compilatore sembra che dipenda dai metodi toUpercase e toLoverCase ma non capisco perchè...come devo cambiare per risolverli?

TNX

Don[ITA]
19-11-2008, 17:07
C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>javac TestGestoreStringhe.java
TestGestoreStringhe.java:11: cannot find symbol
symbol : method trasformaInUna(java.lang.String,java.lang.String)
location: class TestGestoreStringhe
String nomecognome = trasformaInUna(nome, cognome);
^
TestGestoreStringhe.java:13: cannot find symbol
symbol : method invertiStringa(java.lang.String)
location: class TestGestoreStringhe
String inversa = invertiStringa(a);
^
TestGestoreStringhe.java:15: cannot find symbol
symbol : method verificaPalindromia(java.lang.String)
location: class TestGestoreStringhe
boolean varbolleana1 = verificaPalindromia(a);
^
TestGestoreStringhe.java:17: cannot find symbol
symbol : method verificaPalindromia(java.lang.String)
location: class TestGestoreStringhe
boolean varbolleana2 = verificaPalindromia(c);
^
TestGestoreStringhe.java:19: cannot find symbol
symbol : method calcolaPrefissoComune(java.lang.String,java.lang.String)
location: class TestGestoreStringhe
String prefissocomune = calcolaPrefissoComune(a, b);
^
5 errors


Gli errori sono chiarissimi :) toUpperCase() e toLowerCase() non centrano nulla:) L'errore (in rosso) è semplicemente che non trova il simbolo (in blu) corrispondente alle tue chiamate nella tua classe TestGestoreStringhe.

Fai come suggerisce ndakota e mettici un bel GestoreStringhe. prima delle tue chiamate :D

D4rkAng3l
19-11-2008, 17:18
;25084787']Gli errori sono chiarissimi :) toUpperCase() e toLowerCase() non centrano nulla:) L'errore (in rosso) è semplicemente che non trova il simbolo (in blu) corrispondente alle tue chiamate nella tua classe TestGestoreStringhe.

Fai come suggerisce ndakota e mettici un bel GestoreStringhe. prima delle tue chiamate :D

quello l'ho fatto nella classe TestGestoreStringhe che ora l'ha compilata tranquillamente.

Il problema lo dà quando provo a compilare la classe GestoreStringhe che contiene la serie di metodi per operare sulle stringhe e mi dà QUESTI errori:

C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>javac GestoreStringhe.java
GestoreStringhe.java:11: cannot find symbol
symbol : method toUppercase()
location: class java.lang.String
s = nome.substring(0,1).toUppercase();
^
GestoreStringhe.java:12: cannot find symbol
symbol : method toLowercase()
location: class java.lang.String
s += nome.substring(1).toLowercase();
^
GestoreStringhe.java:14: cannot find symbol
symbol : method toLowercase()
location: class java.lang.String
s += cognome.substring(0,1).toLowercase()+cognome.substring(1).toLowercase();
^
GestoreStringhe.java:14: cannot find symbol
symbol : method toLowercase()
location: class java.lang.String
s += cognome.substring(0,1).toLowercase()+cognome.substring(1).toLowercase();
^
GestoreStringhe.java:26: incompatible types
found : int
required: java.lang.String
t = 0; // Inizializzazione: se s Þ vuota allora verrÓ restituita la strin

^
5 errors
dove i simboli sbagliati sono toUppercase e toLowercase

Oceans11
19-11-2008, 19:02
quello l'ho fatto nella classe TestGestoreStringhe che ora l'ha compilata tranquillamente.

Il problema lo dà quando provo a compilare la classe GestoreStringhe che contiene la serie di metodi per operare sulle stringhe e mi dà QUESTI errori:

C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>javac GestoreStringhe.java
GestoreStringhe.java:11: cannot find symbol
symbol : method toUppercase()
location: class java.lang.String
s = nome.substring(0,1).toUppercase();
^
GestoreStringhe.java:12: cannot find symbol
symbol : method toLowercase()
location: class java.lang.String
s += nome.substring(1).toLowercase();
^
GestoreStringhe.java:14: cannot find symbol
symbol : method toLowercase()
location: class java.lang.String
s += cognome.substring(0,1).toLowercase()+cognome.substring(1).toLowercase();
^
GestoreStringhe.java:14: cannot find symbol
symbol : method toLowercase()
location: class java.lang.String
s += cognome.substring(0,1).toLowercase()+cognome.substring(1).toLowercase();
^
GestoreStringhe.java:26: incompatible types
found : int
required: java.lang.String
t = 0; // Inizializzazione: se s Þ vuota allora verrÓ restituita la strin

^
5 errors
dove i simboli sbagliati sono toUppercase e toLowercase

I metodi sono toUpperCase() e toLowerCase(), attento alle maiuscole! ;)

D4rkAng3l
19-11-2008, 19:52
I metodi sono toUpperCase() e toLowerCase(), attento alle maiuscole! ;)

ah ok...ti ringrazio...ho appena iniziato con Java...paura...

D4rkAng3l
19-11-2008, 19:56
doh ora compila ma quando vado ad eseguire la mia applicazione mi dà un errore a run time...nel promp di MsDos mi dice:

C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>java GestoreStringhe
Exception in thread "main" java.lang.NoSuchMethodError: main

C:\Programmi\Crimson Editor\template\esercizi\GestoreStringhe>

Come mai? che significa?

Grazie
Andrea

magix2003
19-11-2008, 20:27
Significa che manca il metodo con signature public static void main(String[] args). Questo metodo è lo starting point per ogni applicazione stand alone (come il main in C/C++). Devi crearne uno per poter fare funzionare un programma...

D4rkAng3l
19-11-2008, 20:30
Significa che manca il metodo con signature public static void main(String[] args). Questo metodo è lo starting point per ogni applicazione stand alone (come il main in C/C++). Devi crearne uno per poter fare funzionare un programma...

no vabbè...c'è che sono rincojonito !!! ho lanciato l'altra classe...infatti funziona :D

Don[ITA]
19-11-2008, 22:21
Eheh capita :D
Io comunque ti condiglio di usare un ide come netBeans o eclipse per scrivere in java. Più semplice veloce e ti risparmi un sacco di tempo a trovare gli errori sintattici :D

Ciauz

D4rkAng3l
19-11-2008, 22:42
;25089372']Eheh capita :D
Io comunque ti condiglio di usare un ide come netBeans o eclipse per scrivere in java. Più semplice veloce e ti risparmi un sacco di tempo a trovare gli errori sintattici :D

Ciauz

la proff ce lo ha esplicitamente vietato per questo primo esame...poi per quello del semestre prossimo dovrebbe essere lecito :D