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

Discussione: Stringa vuota

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    10

    Stringa vuota

    Devo controllare se l'utente inserisce una stringa vuota. Per farlo uso il metodo trim. Il tutto funziona ma accade una cosa strana ... Se all'inserimento non scrivo niente e premo invio non compare il messaggio di errore che ho impostato e affinchè questo accada devo premere invio nuovamente. Questo mi accade solo per il primo inserimento; infatti sempre nella stessa esecuzione ma ad inserimenti successivi questo non succede. Come mai ???

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: Stringa vuota

    Originariamente inviato da mirko89
    Come mai ???
    Non sono bravo come indovino .... posta il codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    10
    [b]QUESTA E LA CLASSE COL MAIN[b/]
    codice:
    public class CuoriSolitariMain 
    {
     private static final String MESSAGGIO_NICKNAME="Inserire nickname: ";
     private static final String MESSAGGIO_ETA="Inserire età: ";
     private static final String MESSAGGIO_SESSO="Inserire M se maschio oppure F se femmina: ";
     private static final String MESSAGGIO_SEGNO="Inserire segno zodiacale%n";
     private static final String MESSAGGIO_SEGNO_PARTNER="Inserire segno zodiacale del partner ideale%n";
     private static final String MESSAGGIO_INIZIALE="Benvenuto!";
     private static final String MESSAGGIO_INTESTAZIONE="%nInserisci i tuoi dati Cuore Solitario!%n";
     private static final int MAGGIORE_ETA=18;
     private static final int SOGLIA_ETA=120;
     private static final String MESSAGGIO_MAGGIORE_ETA="Servizio riservato ai maggiorenni!";
     private static final String MESSAGGIO_SOGLIA_ETA="Età improbabile!";
     
     public static void main(String[] args) 
     {
      saluta();
      stampa_intestazione();
      CuoreSolitario persona1=creaDati();
      stampa_intestazione();
      CuoreSolitario persona2=creaDati(); 
      persona1.check_affinità(persona2);
     }
    	 
     
     public static void saluta()
     {
      System.out.println(MESSAGGIO_INIZIALE);
     }
    	 
     
     public static CuoreSolitario creaDati()
     {
      String nickname_in=MyUtil.leggiStringa(MESSAGGIO_NICKNAME);
      int età_in=MyUtil.leggiInteroRange(MESSAGGIO_ETA, MESSAGGIO_MAGGIORE_ETA, MESSAGGIO_SOGLIA_ETA, MAGGIORE_ETA, SOGLIA_ETA);
      char sesso_in=MyUtil.leggiCarattere(MESSAGGIO_SESSO);
      Zodiaco segno_in=Zodiaco.leggiSegno(MESSAGGIO_SEGNO);
      Zodiaco segnoPartner_in=Zodiaco.leggiSegno(MESSAGGIO_SEGNO_PARTNER);
      return new CuoreSolitario(nickname_in,età_in,sesso_in,segno_in,segnoPartner_in);
     }
    	 
     
     public static void stampa_intestazione()
     {
      System.out.printf(MESSAGGIO_INTESTAZIONE);
     }
    }


    E QUESTA E' UNA CLASSE DOVE C'E' UN METODO PER LEGGERE STRINGHE CON RELATIVI CONTROLLI

    codice:
    import java.util.*;
    public class MyUtil 
    {
     private static Scanner lettore=creaLettore();
     private static final String ERRORE_STRINGA_VUOTA="Errore: nessun carattere inserito!";
     private static final String ERRORE_FORMATO_CARATTERE="Errore: inserire M o F!";
     private static final String ERRORE_FORMATO_INTERO="Errore: inserire un numero intero!";
     
     public static Scanner creaLettore()
     {
      Scanner lettore=new Scanner(System.in);
      String aCapo=System.getProperty("line.separator");
      lettore.useDelimiter(aCapo);
      return lettore;
     }
    
     
     public static String leggiStringa(String messaggio)
     {
      boolean finito=false;
      String stringaLetta="";
      do
      {
       System.out.printf(messaggio);  
       stringaLetta=lettore.next();
       stringaLetta=stringaLetta.trim();
       if (!stringaLetta.equals(""))
    	    finito=true;
       else
    	    System.out.println(ERRORE_STRINGA_VUOTA);
      }
      while(!finito);
      return stringaLetta;
     }
    
     
     public static int leggiIntero(String messaggio)
     {
      boolean finito=false;
      int valoreLetto=0;
      do
      {
       System.out.printf(messaggio);
       if(lettore.hasNextInt())
       	{
    	 valoreLetto=lettore.nextInt();
    	 finito=true;
       	}
       else
       {
    	 System.out.println(ERRORE_FORMATO_INTERO);
    	 String daButtare=lettore.next();
       }
      }
      while(!finito);
      return valoreLetto;
     }
    
     
     public static char leggiCarattere(String messaggio)
     {
      boolean finito=false;
      char carattereLetto='\0';
      do
      {
       String lettura=leggiStringa(messaggio);
       lettura=lettura.toUpperCase();  
       if (lettura.length()>2)									//controllo che venga inserito 1 solo carattere
    	    System.out.println(ERRORE_FORMATO_CARATTERE);
       else
           {
    	    carattereLetto=lettura.charAt(0);
    	    if((carattereLetto=='M')||(carattereLetto=='F'))
    	    	finito=true;
    	    else
    	    	System.out.println(ERRORE_FORMATO_CARATTERE);	
           }
      }
      while(!finito);
      return carattereLetto;
     }
     
     
     public static int leggiInteroRange(String messaggio,String messaggioErroreMin,String messaggioErroreMax,int sogliaMin,int sogliaMax)
     {
      boolean finito=false;										
      int valoreLetto=0;
      do
      {
       valoreLetto=leggiIntero(messaggio);
       if ((valoreLetto>=sogliaMin)&&(valoreLetto<=sogliaMax))
    	   finito=true;
       else
       	{
    	   if (valoreLetto>sogliaMax)
    	   {
    	   	System.out.println(messaggioErroreMax);
    	    finito=false;   
    	   }
    	   else
    	   {
    		System.out.println(messaggioErroreMin);
    	    finito=false;
    	   }
       	}
      }
      while(!finito);
     return valoreLetto;
     }
    }

  4. #4
    Una curiosità: perchè fai tutto static?

  5. #5
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Originariamente inviato da Gianpaolo69
    Una curiosità: perchè fai tutto static?
    Mi unisco per chiedere perchè oltre a mettere tutto static metti tutto anche final.. dal momento in cui si mette final non è superfluo mettere static?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,305
    Originariamente inviato da Pacio88
    dal momento in cui si mette final non è superfluo mettere static?
    No: il modificatore final ha significato diverso da static:

    Il modificatore final:
    - Quando è applicato ad una variabile indica che si tratta di una costante.
    - Quando è applicato ad un metodo indica che questo non può essere ridefinito tramite overriding nelle sottoclassi.
    - Quando è applicato ad una classe indica che non è possibile creare delle sottoclassi.


    Il modificatore static indica, invece, che quella variabile/metodo non è legata ad una particolare istanza della classe, ma è legatto alla classe stessa.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Originariamente inviato da LeleFT
    No: il modificatore final ha significato diverso da static:

    Il modificatore final:
    - Quando è applicato ad una variabile indica che si tratta di una costante.
    - Quando è applicato ad un metodo indica che questo non può essere ridefinito tramite overriding nelle sottoclassi.
    - Quando è applicato ad una classe indica che non è possibile creare delle sottoclassi.


    Il modificatore static indica, invece, che quella variabile/metodo non è legata ad una particolare istanza della classe, ma è legatto alla classe stessa.


    Ciao.
    Grazie per il breve riassunto.. ma continuo a non capire...
    Se la variabile di una classe è costante non è sottointeso che sarà uguale per ogni istanza di quella classe e quindi è come se fosse dichiarata con "static"?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da Pacio88
    Se la variabile di una classe è costante non è sottointeso che sarà uguale per ogni istanza di quella classe e quindi è come se fosse dichiarata con "static"?
    codice:
    class Qualcosa {
        static final int a = 123;
        static int b = 123;
        final int c = 123;
        int d = 123;
    }
    'a' è "di classe" e final. Essendo di classe ce n'è solo 1 di quella variabile, indipendentemente dal numero di istanze (oggetti) della classe ed essendo final non è modificabile = è una "costante".

    'b' è "di classe" ma non è final. Ce n'è solo 1 di quella variabile e non essendo final è modificabile. Concettualmente la puoi vedere come una variabile "globale".

    'c' è "di istanza" e final. Ogni istanza della classe ha la "sua" variabile 'c' ed essendo final non è modificabile = è una costante. Messa così ha poco senso/utilità .... se alla variabile fosse assegnato un valore calcolato o il valore di ritorno di un metodo, avrebbe più senso/utilità.

    'd' è "di istanza" e non final. Ogni istanza della classe ha la "sua" variabile 'd', il cui valore può cambiare non essendo final.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,305
    Originariamente inviato da Pacio88
    Grazie per il breve riassunto.. ma continuo a non capire...
    Se la variabile di una classe è costante non è sottointeso che sarà uguale per ogni istanza di quella classe e quindi è come se fosse dichiarata con "static"?
    No: se una variabile è costante significa che, per quelll'istanza della classe, quella variabile assumerà quel determinato valore costante. Questo non significa che tutte le istanze di quella classe condividono la stessa variabile, quindi non significa affatto che quella variabile possa essere acceduta con la forma NomeClasse.variabile.

    Per capire bene questa differenza ti consiglio anche un interessante link: http://en.wikipedia.org/wiki/Final_(Java)

    Una variabile final diventa costante perchè l'assegnazione a tale variabile può avvenire una sola volta: questo significa che il valore "costante" può essere deciso all'interno del costruttore della classe e, quindi, essere diverso da istanza a istanza. Il valore non è noto a tempo di compilazione (diverso è per i valore static final), ma solo a tempo di esecuzione.

    Esempio:

    codice:
    public class MiaClasse {
       private final int valoreCostante;
    
       public MiaClasse(int val) {
          // assegno qui il valore e non lo posso più cambiare dopo
          valoreCostante = val;
       }
    }
    In questo caso, quindi, ciascuna istanza può avere il suo valore costante:

    codice:
    MiaClasse[] mc = new MiaClasse[10];
    for(int j=0; j<10; j++) {
       mc[j] = new MiaClasse( j );
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Ti consiglierei di modificare questo pezzo di codice:

    codice:
       stringaLetta=stringaLetta.trim();
       if (!stringaLetta.equals(""))
          finito=true;
       else
          System.out.println(ERRORE_STRINGA_VUOTA);
    con:

    codice:
       if (stringaLetta!=null && !stringaLetta.trim().equals(""))
          finito=true;
       else
          System.out.println(ERRORE_STRINGA_VUOTA);
    Ovviamente sarebbe interessante scoprire se ottenevi una NullPointerException o altro...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

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 © 2024 vBulletin Solutions, Inc. All rights reserved.