Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643

    Problema nello scrivere una classe di metodi utili per gestire 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
       }
    }
    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.S tring)
    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);
    	}
    	
    }
    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.S tring)
    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. #2
    Con una dichiarazione del genere:

    Codice PHP:
    String nomecognome trasformaInUna(nomecognome); 
    stai richiamando il metodo trasformaInUna nella classe in cui è scritta la linea, e cioè TestGestoreStringhe. Ma ovviamente in questa classe non esiste.

    Trattandosi di metodi statici la chiamata giusta è:

    Codice PHP:
    String nomecognome GestoreStringhe.trasformaInUna(nomecognome); 
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    ok perfetto ho capito come risolvere nella classe TestGestoreStringa (errore di distrazione) ma nella classe GestoreSTringa invece? è come se il problema dipendesse dai metodi toLowercase e toUppercase (almenomi pare...) ma non capisco perchè

  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Scritto da D4rkAng3l
    ok perfetto ho capito come risolvere nella classe TestGestoreStringa (errore di distrazione) ma nella classe GestoreSTringa invece? è come se il problema dipendesse dai metodi toLowercase e toUppercase (almenomi pare...) ma non capisco perchè
    E quale sarebbe questo errore?
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    Originariamente inviato da @DI3GO@
    E quale sarebbe questo errore?
    scusa non capisco cosa intendi dire?
    Il problema è che quando provo a compilare la classe GestoreStringa mi dà i seguenti 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.subst ring(1).toLowercase();
    ^
    GestoreStringhe.java:14: cannot find symbol
    symbol : method toLowercase()
    location: class java.lang.String
    s += cognome.substring(0,1).toLowercase()+cognome.subst ring(1).toLowercase();
    ^
    GestoreStringhe.java:26: incompatible types
    found : int
    required: java.lang.String
    t = 0; // Inizializzazione: se s Þ vuota allora verrÓ restituita la stringa vuota

    ^
    5 errors

    da che dipende?

  6. #6
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    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.subst ring(1).toLowercase();
    ^
    GestoreStringhe.java:14: cannot find symbol
    symbol : method toLowercase()
    location: class java.lang.String
    s += cognome.substring(0,1).toLowercase()+cognome.subst ring(1).toLowercase();
    ^
    ....leggi come ha Scritto toUpperCase e toLowerCase.....

    GestoreStringhe.java:26: incompatible types
    found : int
    required: java.lang.String
    t = 0; // Inizializzazione: se s Þ vuota allora verrÓ restituita la stringa vuota

    ^
    Se vuoi inizializzare una stringa non devi metterci un intero....te lo dice anche l'errore di compilazione....Semma devi mettere null, oppure "0", poi usando gli opportuni metodi di controllo delle stringhe che non è == 0, ma .equals( "0" );
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    Originariamente inviato da @DI3GO@
    ....leggi come ha Scritto toUpperCase e toLowerCase.....



    Se vuoi inizializzare una stringa non devi metterci un intero....te lo dice anche l'errore di compilazione....Semma devi mettere null, oppure "0", poi usando gli opportuni metodi di controllo delle stringhe che non è == 0, ma .equals( "0" );
    ok...ora compila...non pensavo che toUpperCase e toLowerCase fossero case sensitive...avendo appena iniziato non sapevo neanche la storia del null...cmq se si parla di stringhe puoi usare == al posto di equals (è l'unico caso in cui funziona) poichè per Java le stringhe sono costanti...la proff c'ha fatto due palle su sta cosa

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    doh...si lo compilama provando ad eseguire la mia stupidissima micro applicazione mi dà il seguente errore a runtime:

    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? da che dipende? come risolvere?

    Tnx
    Andrea

  9. #9
    Devi lanciare TestGestoreStringhe (che ha il main) e non GestoreStringhe
    Al mio segnale... scatenate l'inferno!

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    Originariamente inviato da D4rkAng3l
    doh...si lo compilama provando ad eseguire la mia stupidissima micro applicazione mi dà il seguente errore a runtime:

    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? da che dipende? come risolvere?

    Tnx
    Andrea
    oddio quanto sò rincoglionito questa sera...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.