Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    controllo caratteri nella stringa

    Ciao ragazzi,

    sono uno studente universitario molto poco esperto di Java ed ho un problema con le stringhe.

    Ho una classe che legge una stringa in input e vorrei fare in modo di avere un controllo che mi dicesse se nella stringa ci sono solo caratteri o meno.

    A questo proposito vorrei che qualcuno mi correggesse il codice che ho provato a scrivere(niente espressioni regolari o roba simile, non le ho ancora studiate ):

    Aiuto

    public class Termine {


    private String nome;



    public Termine(String nome){ // Costruttore

    this.nome=nome;



    }






    public static Termine ReadTermine(){ // metodo per la lettura del nome e della descrizione del termine

    String nome="nome";
    boolean contenuto;
    do{
    nome =Input.readString("Immetti il termine:");
    nome=nome.toLowerCase();
    /*for(int i=0;i<nome.length()-1;i++)*/{

    int i=0;
    int ch=nome.codePointAt(i);

    while(i<nome.length()-1 && ch>='a' && ch<='z'){

    System.out.println("Procedi!");
    i++;

    }

    }


    if(contenuto=true)
    System.out.println("Procedi!");
    else
    System.out.println("Errore!");


    }while(contenuto=false);


    return new Termine (nome);




    }




    public String getName(){ // metodo che restituisce il nome


    return nome;


    }



    public static boolean controllo(){
    String nome =Input.readString("Immetti il termine:");
    nome=nome.toLowerCase();


    for(int i=0;i<nome.length()-1;i++){
    int ch=nome.charAt(i);
    if(ch>='a' && ch<='z')
    return true;
    else
    return false;




    }
    return false;

























    } }

  2. #2

    Re: controllo caratteri nella stringa

    Originariamente inviato da infoumano86
    public static boolean controllo(){
    String nome =Input.readString("Immetti il termine:");
    nome=nome.toLowerCase();


    for(int i=0;i<nome.length()-1;i++){
    int ch=nome.charAt(i);
    if(ch>='a' && ch<='z')
    return true;
    else
    return false;
    }
    return false;
    La condizione del ciclo non è corretta, sistema così:
    codice:
    i <= nome.length()-1
    oppure
    codice:
    i < nome.length()
    le due condizioni sono equivalenti.

    Inoltre, non è corretta la struttura del codice all'interno del ciclo, perchè in ogni caso il metodo controlla solo il primo carattere.
    Potresti sistemarlo in questo modo:
    codice:
    int ch = nome.charAt(i);
    if( ch < 'a' || ch > 'z' )
      return false;
    e quindi fuori dal ciclo restituisci true.

    N.B. In questo modo però non consideri i caratteri accentati.

    Poi, il metodo ReadTermine penso che vada rifatto.

  3. #3
    Grazie mille!!

    Senti ma se volessi integrare il controllo della stringa dentro il primo ciclo do-while di ReadTermine(), come potrei fare? Ci ho provato ma mi restituisce sempre true e quindi il controllo non è efficace.

    P.S

    Hai detto che rifaresti il metodo ReadTermine(), in che senso?

    Grazie ancora per l'aiuto!

  4. #4
    Originariamente inviato da infoumano86
    Hai detto che rifaresti il metodo ReadTermine(), in che senso?
    Ad esempio:
    1) leggi la stringa dalla console
    2) se la stringa è compatibile, restituisci una nuova istanza di Termine, altrimenti restituisci null.

    E quindi, in base a quanto hai postato, puoi fare:
    codice:
    public static Termine readTermine() {
    
        String input = // lettura dell'input...
    
        if( !controllo(input) )
            return null;
    
        return new Termine(input);
    }

  5. #5
    scusa mi ero dimenticato di specificare che questa classe deve leggere da input, non solo il nome ma anche una descrizione. Per questo ho definito due classi, Termine e Lemma.

    Di conseguenza dovrei duplicare il metodo di controllo, esiste una soluzione più semplice, tipo integrare il for di controllo nel ciclo do-while?

    Ecco il codice che ho provato a scrivere, purtroppo continua a nn funzionare correttamente:

    Termine
    Codice PHP:
         /**
         * Classe Termine
         * 
         * Descrive il nome e la descrizione dell'oggetto termine.
         */


    public class Termine {

        
    String nome;
        
    String descrizione;
        
         
    /**
         * Costruttore Termine vuoto
         */
        
        
    public Termine(String nomeString descrizione){ 
            
            
    this.nome=nome;
            
    this.descrizione=descrizione;
                    
            
        }
        
        


        
        
            
         
    /**
         * Restituisce il nome del termine come stringa.
         * @ return il nome del termine.
         */
        
            
    public String getName(){ 
                
                
                return 
    nome;


                }        
            

                
            
            
             
    /**
             * Restituisce la descrizione del termine come stringa.
             * @ return la descrizione del termine.
             */
            

                
    public String getDesc(){ 
                    
                    
                    return 
    descrizione;


                    }        
            

                } 
    Lemma



    Codice PHP:
    import java.util.Vector;

    /**
     * Classe Lemma
     * estende la classe Termine con la lista dei sinonimi e dei contrari
     * 
     * 
     * 
     * */

    public class Lemma extends Termine{
        
         
    String [] sinonimi;
         
    String [] contrari;    

         public 
    Lemma(String nomeString descrizione) {
            
    super(nome,descrizione);
            
    this.sinonimi=sinonimi;
            
    this.contrari=contrari;
            
        }
        
         public static 
    Lemma ReadLemma(){
             
    // metodo per la lettura del nome e della descrizione del termine
    String nome;

    boolean checkname=false;
    do{
        
    nome=Input.readString("Inserisci il nome del termine");
        
    nome=nome.toLowerCase();
        
    checkname=controllonome(nome);
        if(
    checkname==true)
             
    System.out.println("Nome corretto");
        
        else
            
    System.out.println("Nome sbagliato, riprova!");
        
        
    }while(
    checkname==false );


    String descrizione;
    do{
        
    descrizione=Input.readString("Inserisci la descrizione del termine");
        
    descrizione=descrizione.toLowerCase();
        
        if( !
    controllodesc(descrizione) )
            return 
    null;
        
        
    }while(
    descrizione.equals(""));



    return new 
    Lemma(nomedescrizione);
             

             } 


         public static  
    boolean controllonome(String nome){
        


             for(
    int i=0;i<=nome.length()-1;i++){
             
    int ch=nome.charAt(i);
             if(
    ch<'a' && ch>'z'){
             return 
    false;
             }
             }
             return 
    true;
         
         
         }
         
         
         

         public  static 
    boolean controllodesc(String descrizione){



             for(
    int i=0;i<descrizione.length()-1;i++){
             
    int ch=descrizione.charAt(i);
             if(
    ch>='a' && ch<='z')
             return 
    false;
             }
             return 
    true;
         
         
         }
         
         
         
         
         
         
         
         
         
         
         
         

         
    /**
             * Restituisce i sinonimi del termine.
             * @ return i sinonimi del termine.
             */
            
                
    public String[] getSinonimi(){ 
                    
                    
                    return 
    sinonimi;


                    }        
                
        
                 
    /**
                 * Restituisce i sinonimi del termine.
                 * @ return i sinonimi del termine.
                 */
                
                    
    public String[] getContrari(){ 
                        
                        
                        return 
    contrari;


                        }        
        
        
                    
            
        } 


    Grazie

  6. #6
    Originariamente inviato da infoumano86
    codice:
    public class Lemma extends Termine {
            String [] sinonimi;
            String [] contrari;	
    
    	 public Lemma(String nome, String descrizione) {
    		super(nome,descrizione);
    		this.sinonimi=sinonimi;
    		this.contrari=contrari;
    		
    	}
    Perchè Lemma estende Termine ed ha questa struttura?
    Cosa devi rappresentare esattamente?

    N.B. l'assegnamento a sinonimi ed a contrari è assolutamente sbagliato, in quanto non ci sono i parametri.

    Originariamente inviato da infoumano86
    codice:
    public static Lemma ReadLemma(){
    // metodo per la lettura del nome e della descrizione del termine
    String nome;
    
    boolean checkname=false;
    do{
        nome=Input.readString("Inserisci il nome del termine");
        nome=nome.toLowerCase();
        checkname=controllonome(nome);
        if(checkname==true)
             System.out.println("Nome corretto");
        
        else
            System.out.println("Nome sbagliato, riprova!");
        
        
    }while(checkname==false ); 
    
    String descrizione;
    do{
    	descrizione=Input.readString("Inserisci la descrizione del termine");
    	descrizione=descrizione.toLowerCase();
    	
    	if( !controllodesc(descrizione) )
            return null;
    	
    	
    }while(descrizione.equals(""));
    
    return new Lemma(nome, descrizione);
    }
    Ci sono 3 cose che non vanno bene:
    1) Usi due metodi distinti (controllonome e controllodesc) che fanno la stessa cosa ed in modo sbagliato.
    Il metodo controllonome devi sistemarlo come ti è stato suggerito.
    Invece, per quanto riguarda controllodesc, poichè descrizione quasi sicuramente contiene più di una parola, allora devi fare in modo che il metodo controlli separatemente ogni parola nella descrizione.
    Tali metodi devono essere privati.

    2) il valore restituito da
    codice:
    controllodesc(descrizione)
    devi assegnarlo ad una qualche variabile booleana (come fai con checkname);

    3) la condizione descrizione.equals("") quindi, va sostituita con la variabile booleana.

  7. #7
    scusa la domanda, ma devi solo controllare che nel testo inserito ci siano caratteri senza numeri o vuoi controllare che ci siano solo le lettere dell'alfabeto?
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

  8. #8
    Rispondo alle tue domande.

    1) devo rappresentare un dizionario di sinonimi e contrari che contiene una lista di termini dotati di:

    - nome
    -descrizione
    -sinonimi
    -contrari

    questi elementi devono essere forniti in input dall'utente ed ho bisogno di fare dei controlli di consistenza sui dati. Per questo ho diviso tra le classi "Termine" e "Lemma".

    2) voglio controllare che nella stringa ci siano solo caratteri alfabetici minuscoli.

    Ora, vorrei capire come utilizzare un solo metodo (che funzioni) che mi faccia i controlli su tutte le stringhe senza dover replicare lo stesso metodo.

    P.S

    Sapreste indicarmi passo per passo, un metodo semplice per ordinare alfabeticamente il vettore con la lista dei termini, secondo il nome?

    Grazie mille per l'aiuto

  9. #9
    Originariamente inviato da infoumano86
    1) devo rappresentare un dizionario di sinonimi e contrari che contiene una lista di termini dotati di:
    - nome
    -descrizione
    -sinonimi
    -contrari
    Penso che Lemma debba incapsulare una istanza di Termine e non estendere tale classe.
    Inoltre, i sinonimi e contrari dovrebbero a loro volta essere istanze della classe Termine.

    Originariamente inviato da infoumano86
    Ora, vorrei capire come utilizzare un solo metodo (che funzioni) che mi faccia i controlli su tutte le stringhe senza dover replicare lo stesso metodo.
    Ti conviene avere un unico metodo che prende come parametro una singola stringa, in modo tale da controllare ogni singolo termine ed ogni singola parola delle rispettive descrizioni.

    Originariamente inviato da infoumano86
    Sapreste indicarmi passo per passo, un metodo semplice per ordinare alfabeticamente il vettore con la lista dei termini, secondo il nome?
    Hai 3 strade diverse:
    - definisci un comparatore per le istanze della classe secondo cui intendi ordinare il vettore oppure rendi tali istanze direttamente comparabili;
    - poichè ogni istanza di Termine incapsula un istanza di String (nome), potresti effettuare l'ordinamento basandoti proprio su tale campo (senza implementare alcuna interfaccia), sfruttando, dunque, il metodo compareTo implementato dalla classe String.

  10. #10
    Scusa però potresti farmi un esempio di come implmentare un metodo solo che controlli tutte le stringhe? non riesco a capire come invocarlo nel metodo ReadLemma().

    Un'altra cosa:

    Devo implementare anche la ricerca del termine per nome, lingua, sinonimi, contrari ecc.

    Per questo creerò una classe dizionario che crea una lista di lemmi e poi definisce i metodi per la ricerca. Infine creerò una classe archivio che riceve un oggetto dizionario e permette all'utente di fare tutte le operazioni di aggiunta, rimozione e ricerca nel dizionario.

    Come posso fare per creare un metodo che mi restituisca un oggetto sul qual fare nuove ricerche(così mi è stato specificato)?

    La soluzione con codice è molto gradita

    Grazie davvero a tutti!

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.