|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
[Java] Problema nello scrivere una classe di metodi utili per le stringhe
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: Codice:
/* 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
}
}
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: Codice:
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);
}
}
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
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.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
ho dato un'occhiata veloce.. non dovresti mettere
Codice:
GestoreStringhe. esempio: Codice:
String nomecognome = GestoreStringhe.trasformaInUna(nome, cognome); |
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
Quote:
Vedendo quello che dice il compilatore sembra che dipenda dai metodi toUpercase e toLoverCase ma non capisco perchè...come devo cambiare per risolverli? TNX |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Quote:
Fai come suggerisce ndakota e mettici un bel GestoreStringhe. prima delle tue chiamate
__________________
iMac 27" 5K |
|
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
Quote:
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 |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
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 |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
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...
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
|
|
|
|
|
#11 | |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Eheh capita
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 Ciauz
__________________
iMac 27" 5K |
|
|
|
|
|
#13 | |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:26.




















