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

    [JAVA]confronto stringhe

    Ciao a tutti

    Ho un problema che mi stà assillando...

    Ho usato un do-while nel mio programma.

    Quando esce dal loop il programma termina.

    Come condizione nel while ho messo che il loop deve continuare finche viene inserita la lettera s.

    Prima ho preso in input la risposta dopodiche nella condizione del while metto:

    while(risp=="s")

    solo che anche se l'utente inserisce s il loop termina comunque!!!

    Ho provato anche a mandare in output la variabile risp e mi da infatti la lettera che ho inserito.

    Dovrebbe funzionare ma nn sò perchè non funziona!!

    Vi prego aiutatemi sono proprio all'inizio...
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Le stringhe sono Oggetti e non si confrontano con l'operatore ==, ma usando il metodo equals() fornito per tutti gli Object:

    while (risp.equals("s")) {
    ...
    }

    Un confronto effettuato con l'operatore == confronta indirizzi di memoria (puntatori) e tipi di dati primitivi, non contenuti di oggetti.


    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

  3. #3
    Caspita grazie lo provo subito!!!

    Senti una cosa...

    Mi senbra che forse eri tu che avevi risposto a quel trhead mio vecchio solo che nn mi ero spiegato bene...

    Allora uso il DataInputStream

    e uso il readChar per prendere in input un carattere...

    Solo che invece si salvarmi il carattere mi salva nella variabile un punto di domanda...


    Grazie ancora ciao !!!!!!!!!!!!!!!!!!!!ciao :metallica :metallica :metallica :metallica :metallica :metallica
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Ti ho appena realizzato al volo una classe che ti legge da tastiera un carattere.
    La puoi usare per leggere un carattere e memorizzarlo in una variabile char.
    codice:
    import java.io.*;
    
    public class LeggiCarattere {
       private InputStreamReader isr;
       private BufferedReader br;
    
       public LeggiCarattere() {
          isr = new InputStreamReader( System.in );
          br = new BufferedReader( isr );
       }
    
       public char readChar() {
          String tmp = null;
          try {
             tmp = br.readLine();
          } catch (Exception e) { e.printStackTrace(); }
          return (tmp.equals("")) ? '\0' : tmp.charAt(0);
       }
    }
    Ti posto del codice d'esempio di utilizzo:
    codice:
    public void mioMetodo {
       LettoreCarattere lc = new LettoreCarattere();
       char mioCarattere = lc.readChar();
       // Ora nella variabile mioCarattere hai il carattere letto da tastiera
    }
    N.B.: Ho realizzato la classe in modo che se l'utente digita una stringa al posto di un singolo carattere, la classe accetta solamente il primo carattere della stringa.
    Se l'utente non inserisce niente (preme solamente INVIO), il metodo readChar restituisce il carattere NULL: 0x00

    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

  5. #5
    grazie mille!! mi stai aiutando molto!!

    ciao ciao
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  6. #6
    Grazie ancora il tuo esempio funziona al 100%

    Ho capito anche i metodi...


    Ciao ciao
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Mi fa piacere che ti sia stato utile. E la cosa più importante è che tu sia riuscito a capire il funzionamento dei metodi: io ho imparato molto guardando il codice scritto da altri, è sempre una buona fonte!


    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

  8. #8
    Ciao!

    Senti una cosa avrei bisogno ancora di aiuto...

    Io ho dichiarato una matrice e fin qui tutto ok.

    finche la dichiaro all'inizio della classe tutto va bene..

    Ma però se la dichiaro + avanti nel codice magari dentro un try..

    ---------------------------------------------------

    try {

    ciao = Integer.valueOf(testo.readLine()).intValue();

    int[] voti = new int[ciao];

    }

    ------------------------------------------------------

    così facendo mi dice che la var nn è dichiarata....

    Vabbe spero che anche stà volta avrai la pazienza di darki una mano...

    ciao ciao e grazie mille!!! :metallica :metallica
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    E' giusto che faccia così: è una questione di visibilità delle variabili.

    Ogni variabile (che sia un oggetto o un tipo di dato primitivo) è visibile solamente nel blocco in cui è definita ed in quelli in esso innestati. Al di fuori di essi la variabile non è visibile.

    Per aiutarti a capire se una variabile è visibile in un blocco o meno dovresti tenere presente la struttura di annidamento di ogni blocco (un blocco è una porzione di codice racchiusa dalle parentesi graffe, questo significa un metodo, un ciclo for o while, un blocco if...).
    A questo punto osservi a che livello di annidamento è stata DICHIARATA la variabile e sai che tutte le parti di codice ad un livello più interno (ma appartenente a quello) possono vederla. Per capirlo pensa ad una cosa del genere: quando entri nella classe sei all'entrata di una stanza; tutto ciò che vedi all'interno di questa stanza lo conoscono anche tutte le persone che sono dentro a tutte le porte che ci sono in quella stanza (tutti i metodi della classe), perchè, per entrare nella porta, devono essere passati da lì; a questo punto ti sposti dentro ad un metodo ed è come se aprissi una delle perte di quella stanza; quando sei dentro questa porta hai davanti una nuova stanza con, magari, altre porte e altre cose; a questo punto conosci tutti gli oggetti che ci sono nella stanza, ma anche quelli della stanza precedente per la quale sei passato.

    Questo è un esempio di codice con relative visibilità:
    codice:
    class MiaClasse {
       int variabile; // questa variabile sarà visibile OVUNQUE: è dentro la prima stanza!
    
       public MiaClasse() {
          // Qui sono in una stanza, ho aperto una porta della stanza principale
          variabile = 0; // Posso farlo: variabile è dichiarata in una stanza per la quale sono già passato
          int a; // questa è visibile solo qui dentro e nelle parti di codice interne
       }
    
       public mioMetodo() {
          // Ho aperto una porta della stanza principale
          a = 2; // ERRORE: questa io non la conosco; per arrivare qui non sono passato per la stanza MiaClasse()
          for (int i=0; i<50; i++) {
             // Questo è un blocco dove è stata definita la variabile i: la vedo solo qui dentro!!
             System.out.println(i);
          }
       }
    }
    Spero di essere stato abbastanza chiaro. L'argomento non è dei più semplici e tutti (o quasi) appena iniziano a programmare prima o poi si scontrano con questo problema.
    Altri preferiscono una rappresentazione ad albero per evidenziare la visibilità (o scoping) delle variabili, ma io, personalmente, non lo trovo molto intuitivo... preferisco la storiella delle stanze (me la sono inventata apposta per spiegare lo scoping ad un mio amico e ho notato che ha funzionato).

    Per altri chiarimenti, sono sempre disponibile.

    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
    Ma perchè non usate la classe Keyboard creata dagli autori del libro "JAVA fondamenti di progettazione software" è una figata molto più semplice prendere interi stringhe char ect da tastiera. Il mio professore ce l'ha consigliato ed effettivamente ti agevola la vita ed è fatta prprio bene.

    il link è il seguente: http://duke.csc.villanova.edu/jss1/b...s/keyboard.jsp

    qui trovate il package cs1 e varie cose come anche il file sorgente della Keyboard

    fatemi sapere!

    tommisceddu
    www.matteosteri.it

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.