Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17

    problema java

    Ciao a tutti sono nuovo,ho iniziato una scuola di programmazione java da 5 mesi..quindi sarò molto attivo ho parecchi problemi da riusolvere..alcuni li ho sistemati altri sono rimasto bloccato..ne cito uno dove sono paralizzato proprio

    realizzare un programma che chiede all’utente di inserire una frase. Il programma deve contare quante volte compare una lettera nel testo.

    Sono proprio bloccato all'inizio

    public class Esercizio17 {
    public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);

    String frase;


    System.out.print("Inserisci una frase");
    frase=reader.nextLine();
    }
    }

    A questo punto so di dover usare l'indexOf immagino..ma c'è ne sono una decina..ho una lista di tutte le indexOf..ma non capisco le differenze..e sopratutto come risolvere il porblema..con un ciclo? un do while?...Un professore mi dice che queste manipolazioni di stringhe sono parecchie inutili in un futuro,un'altro mi dice che sono importanti...apparte questo mi date una mano per il problema?Per voi sarà facilissimo..Per me non molto..

    Grazie in anticipo a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ciao,

    Prima di tutto, dal punto di vista "stilistico", dovresti lasciare uno spazio così da far inserire l'input non attaccato all'output (risulta di più semplice comprensione).

    codice:
    System.out.print("Inserisci una frase: "); // lasciando appunto uno spazio alla fine

    le indexOf() si utilizzano per cercare un carattere, o meglio, per sapere se all'interno della stringa c'è un determinato carattere e saperne l'indice (l'utilizzo è proprio sapere a quale indice si trova il carattere che cerchi). Nel tuo caso non ti servono, semplicemente perchè se compare 10 volte il carattere 'a', ti troverà sempre il primo.

    Ti espongo due delle possibili strade:
    1) Utilizzare StringBuffer, ed indexOf(). In pratica, leggi con indexOf il carattere che cerchi, e lo rimuovi tramite lo StringBuffer; continui ciclicamente sino a che non ci sono più caratteri.
    2) Quello che seguirei io: scorrere tutta la stringa con un for, ed utilizzare charAt(index) per confrontare il carattere che prendo con quello che cerco.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17
    Originariamente inviato da Patrick Jane
    Ciao,

    Prima di tutto, dal punto di vista "stilistico", dovresti lasciare uno spazio così da far inserire l'input non attaccato all'output (risulta di più semplice comprensione).

    codice:
    System.out.print("Inserisci una frase: "); // lasciando appunto uno spazio alla fine

    le indexOf() si utilizzano per cercare un carattere, o meglio, per sapere se all'interno della stringa c'è un determinato carattere e saperne l'indice (l'utilizzo è proprio sapere a quale indice si trova il carattere che cerchi). Nel tuo caso non ti servono, semplicemente perchè se compare 10 volte il carattere 'a', ti troverà sempre il primo.

    Ti espongo due delle possibili strade:
    1) Utilizzare StringBuffer, ed indexOf(). In pratica, leggi con indexOf il carattere che cerchi, e lo rimuovi tramite lo StringBuffer; continui ciclicamente sino a che non ci sono più caratteri.
    2) Quello che seguirei io: scorrere tutta la stringa con un for, ed utilizzare charAt(index) per confrontare il carattere che prendo con quello che cerco.
    Ciao prima di tutto grazie..arriviamo al problema..il professore non ha spiegato nè la StringBuffer nè ancora i cicli for...solo if, while, do while,
    ..quindi dovrei usare un do while con il charAt credo..
    avresti voglia di farmi entrambi gli esempi?
    Giusto pr imparare anche ad usare la StringBuffer..se riesci usando un do while e non ancora un for..
    se hai voglia..
    Grazie di tutto

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da Erik91
    Ciao prima di tutto grazie..arriviamo al problema..il professore non ha spiegato nè la StringBuffer nè ancora i cicli for...solo if, while, do while,
    ..quindi dovrei usare un do while con il charAt credo..
    avresti voglia di farmi entrambi gli esempi?
    Giusto pr imparare anche ad usare la StringBuffer..se riesci usando un do while e non ancora un for..
    se hai voglia..
    Grazie di tutto
    StringBuffer (è sincronizzata; capirai le differenze più avanti) e StringBuilder vengono utilizzati per gestire le Stringhe, ma al contrario di String non creano una nuova Stringa; String invece ad ogni modifica che fai, crea un nuovo oggetto String per rappresentare la tua Stringa.

    L'esempio con lo StringBuffer in quel modo ti farebbe solo perdere del tempo, sarebbe più brutto, e probabilmente è anche meno efficiente.

    Il while è un ciclo iterativo come il for, quindi puoi usare il while per farlo (ma un for in questo caso è più comodo). Ti mostro solamente il for, e ti spiego 2 cose; ricorda però che qui di norma non troverai il codice bello e pronto, diamo una mano a risolvere i problemi

    codice:
    for(int i=0; i<frase.length(); i++) {
      if(frase.charAt(i) == carattereCercato) {
        contatore++;
      }
    }
    Il ciclo for è composto da 3 parti:

    for(inizializzazione; condizione; iterazione)

    La parte di inizializzazione viene eseguita solo la prima volta, e serve appunto per inizializzare una variabile con un determinato valore. Nel nostro caso, siccome iniziamo dal primo carattere (e vogliamo scorrerla tutta), partiamo da 0.

    La parte centrale, condizione, viene eseguita sempre. Viene eseguita dopo all'esecuzione di iterazione, e nel ciclo iniziale (il primo insomma), dopo alla parte inizializzazione.

    Iterazione viene normalmente incrementata di una unità; questo perchè di norma si deve scorrere un elenco... se tu dovessi scorrere i numeri dispari da 1 ad N, ti converrebbe scorrere dal numero 1 ed incrementare di 2 unità la variabile (che nel nostro caso è i).

    Per chiarire meglio, accade ciò:
    codice:
    i = 0;
    "se i e' minore della lunghezza della stringa, esegui il ciclo" - In caso contrario, salta all'istruzione dopo alla chiusura del ciclo
    (esegue il ciclo)
    i++
    "se i e' minore della lunghezza della stringa, esegui il ciclo"
    (esegue il ciclo)
    i++
    "se i e' minore della lunghezza della stringa, esegui il ciclo"
    (esegue il ciclo)
    
    // Questo sino a quando i è minore di frase.length()

    Spero di essere stato chiaro.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17
    Originariamente inviato da Patrick Jane
    StringBuffer (è sincronizzata; capirai le differenze più avanti) e StringBuilder vengono utilizzati per gestire le Stringhe, ma al contrario di String non creano una nuova Stringa; String invece ad ogni modifica che fai, crea un nuovo oggetto String per rappresentare la tua Stringa.

    L'esempio con lo StringBuffer in quel modo ti farebbe solo perdere del tempo, sarebbe più brutto, e probabilmente è anche meno efficiente.

    Il while è un ciclo iterativo come il for, quindi puoi usare il while per farlo (ma un for in questo caso è più comodo). Ti mostro solamente il for, e ti spiego 2 cose; ricorda però che qui di norma non troverai il codice bello e pronto, diamo una mano a risolvere i problemi

    codice:
    for(int i=0; i<frase.length(); i++) {
      if(frase.charAt(i) == carattereCercato) {
        contatore++;
      }
    }
    Il ciclo for è composto da 3 parti:

    for(inizializzazione; condizione; iterazione)

    La parte di inizializzazione viene eseguita solo la prima volta, e serve appunto per inizializzare una variabile con un determinato valore. Nel nostro caso, siccome iniziamo dal primo carattere (e vogliamo scorrerla tutta), partiamo da 0.

    La parte centrale, condizione, viene eseguita sempre. Viene eseguita dopo all'esecuzione di iterazione, e nel ciclo iniziale (il primo insomma), dopo alla parte inizializzazione.

    Iterazione viene normalmente incrementata di una unità; questo perchè di norma si deve scorrere un elenco... se tu dovessi scorrere i numeri dispari da 1 ad N, ti converrebbe scorrere dal numero 1 ed incrementare di 2 unità la variabile (che nel nostro caso è i).

    Per chiarire meglio, accade ciò:
    codice:
    i = 0;
    "se i e' minore della lunghezza della stringa, esegui il ciclo" - In caso contrario, salta all'istruzione dopo alla chiusura del ciclo
    (esegue il ciclo)
    i++
    "se i e' minore della lunghezza della stringa, esegui il ciclo"
    (esegue il ciclo)
    i++
    "se i e' minore della lunghezza della stringa, esegui il ciclo"
    (esegue il ciclo)
    
    // Questo sino a quando i è minore di frase.length()

    Spero di essere stato chiaro.
    Allora abbastanza chiaro quasi tutto tranne questo pezzo

    (frase.charAt(i) == carattereCercato)

    gli sto già dicendo cerca la lettera "i" ..non capisco questo pezzo

    public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);

    String frase;
    int contatore = 0;

    System.out.println("Inserisci una frase");
    frase = reader.nextLine();

    for (int i = 0; i < frase.length(); i++) {
    if (frase.charAt(i) == carattereCercato) {
    contatore++;
    }
    }
    System.out.println(contatore);
    }
    }
    Allora partendo da carattereCercato l'hai scritto come variabile da dichiarare...la dichiaro come stringa o come char? e perchè?

    partendo da fatto che lanciato mi dia 0 anche se inserisco parole con la "i"..ho provato a dichiarare carattereCercato come String ,come char ,ma nulla ..non capisco l'utilità di quella variabile e come identificarla....

    se non sbaglio ti controlli con il lenght la lunghezza della parola(o frase) ed incrementi i ad ogni controllo di lettera..dopo ti chiedi se dentro la frase è presente il carattere i ed è uguale a "non so cosa devo inserire li in carattereCercato) allora aumenti il contatore...penso che sia tutto chiaro tranne quel pezzo..

    Grazie per la pazienza..sono alle prime armi..e pensare che dopo gli esercizi con le stringhe ho quelle con le Exception il try catch..li si che tirerò le testate contro il muro..fino ai problemi con variabili somme contatori è sempre filato tutto liscio..con queste stringhe ho rallentato parecchio

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da Erik91
    Allora abbastanza chiaro quasi tutto tranne questo pezzo

    (frase.charAt(i) == carattereCercato)

    gli sto già dicendo cerca la lettera "i" ..non capisco questo pezzo
    Fermo! Io non sto cercando il carattere i, io sto usando i (che è un intero) come "indice" della Stringa! Sto praticamente prendendo il carattere in posizione i.
    Comunque devi imparare ad utilizzare l'API di Java, è molto utile: http://docs.oracle.com/javase/7/docs...harAt%28int%29


    codice:
        public static void main(String[] args) {
            Scanner reader = new Scanner(System.in);
    
            String frase;
            int contatore = 0;
            
            System.out.println("Inserisci una frase");
            frase = reader.nextLine();
    
            for (int i = 0; i < frase.length(); i++) {
                if (frase.charAt(i) == carattereCercato) {
                    contatore++;
                }
            }
            System.out.println(contatore);
        }
    }
    Allora partendo da carattereCercato l'hai scritto come variabile da dichiarare...la dichiaro come stringa o come char? e perchè?
    Carattere cercato dev'essere il carattere che vuoi cercare nella Stringa! Quindi deve essere per forza un char! Anche perchè charAt() restituisce un char, e perchè non puoi confrontare le stringhe con == (gli oggetti si confrontano con equals()).


    se non sbaglio ti controlli con il lenght la lunghezza della parola(o frase) ed incrementi i ad ogni controllo di lettera..dopo ti chiedi se dentro la frase è presente il carattere i ed è uguale a "non so cosa devo inserire li in carattereCercato) allora aumenti il contatore...penso che sia tutto chiaro tranne quel pezzo..
    Io ciclo sino a che la variabile i non è lunga quanto la stringa (a che mi serve andare oltre se non ci sono più caratteri da prendere? )

    Se compili il tuo codice, così com'è scritto, non compila proprio. Poichè carattereCercato non esiste. Lo devi dichiarare come char, ed inserire il carattere che vuoi cercare:

    realizzare un programma che chiede all’utente di inserire una frase. Il programma deve contare quante volte compare una lettera nel testo.
    carattereCercato è proprio la lettera che devi contare nel testo, e contatore è una variabile intera che conta quante volte compare.

    Io ti ho detto di dichiararla come variabile... questo è "corretto" se vuoi farla inserire in input, e quindi il carattere varia; altrimenti puoi indicare direttamente il carattere.


    Grazie per la pazienza..sono alle prime armi..e pensare che dopo gli esercizi con le stringhe ho quelle con le Exception il try catch..li si che tirerò le testate contro il muro..fino ai problemi con variabili somme contatori è sempre filato tutto liscio..con queste stringhe ho rallentato parecchio
    Non sono complicati, tranquillo.


    PS: ricorda di postare il codice utilizzando i tag CODE.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17
    Originariamente inviato da Patrick Jane
    Fermo! Io non sto cercando il carattere i, io sto usando i (che è un intero) come "indice" della Stringa! Sto praticamente prendendo il carattere in posizione i.
    Comunque devi imparare ad utilizzare l'API di Java, è molto utile: http://docs.oracle.com/javase/7/docs...harAt%28int%29




    Carattere cercato dev'essere il carattere che vuoi cercare nella Stringa! Quindi deve essere per forza un char! Anche perchè charAt() restituisce un char, e perchè non puoi confrontare le stringhe con == (gli oggetti si confrontano con equals()).




    Io ciclo sino a che la variabile i non è lunga quanto la stringa (a che mi serve andare oltre se non ci sono più caratteri da prendere? )

    Se compili il tuo codice, così com'è scritto, non compila proprio. Poichè carattereCercato non esiste. Lo devi dichiarare come char, ed inserire il carattere che vuoi cercare:



    carattereCercato è proprio la lettera che devi contare nel testo, e contatore è una variabile intera che conta quante volte compare.

    Io ti ho detto di dichiararla come variabile... questo è "corretto" se vuoi farla inserire in input, e quindi il carattere varia; altrimenti puoi indicare direttamente il carattere.




    Non sono complicati, tranquillo.


    PS: ricorda di postare il codice utilizzando i tag CODE.

    codice:
         public static void main(String[] args) {
            Scanner reader = new Scanner(System.in);
    
            String frase;
            int contatore = 0;
            char a = 0;
            
            
            System.out.println("Inserisci una frase");
            frase = reader.nextLine();
    
            for (int i = 0; i < frase.length(); i++) {
                if (frase.charAt(i) == a) {
                    contatore++;
                }
            }
            System.out.println(contatore);
        }
    }
    Non gira ,non capisco cosa sbaglio..quel char a = o non capisco perchè java mi obbliga a inizializzarlo...a farlo mettere per forza =0...comunque anche se lo metto = a 0 non gira...diamine!
    eppure dovrebbe essere così a quanto mi hai spiegato..allora mi sa che non capisco grrr
    perchè mi restituisce 0???se metti ciao dovrebbe darmi uno invece mi da 0

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Dovresti studiarti per bene i fondamentali su un libro.

    char contiene un carattere. I caratteri sono posti tra apici singoli (es. 'c'). Il tuo a non è un carattere! E' una variabile di tipo char, quindi rappresenta un carattere!

    codice:
    import java.util.*;
    
    public class Esercizio17 {
      public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
    
        String frase;
        int contatore = 0;
        char a = 'a';
            
        System.out.println("Inserisci una frase");
        frase = reader.nextLine();
    
        for (int i = 0; i < frase.length(); i++) {
          if (frase.charAt(i) == a) {
            contatore++;
          }
        }
        System.out.println(contatore);
      }
    }

    PS: Prova ora ad impostarlo utilizzando però il ciclo while al posto del for

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    17
    Originariamente inviato da Patrick Jane
    Dovresti studiarti per bene i fondamentali su un libro.

    char contiene un carattere. I caratteri sono posti tra apici singoli (es. 'c'). Il tuo a non è un carattere! E' una variabile di tipo char, quindi rappresenta un carattere!

    codice:
    import java.util.*;
    
    public class Esercizio17 {
      public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
    
        String frase;
        int contatore = 0;
        char a = 'a';
            
        System.out.println("Inserisci una frase");
        frase = reader.nextLine();
    
        for (int i = 0; i < frase.length(); i++) {
          if (frase.charAt(i) == a) {
            contatore++;
          }
        }
        System.out.println(contatore);
      }
    }

    PS: Prova ora ad impostarlo utilizzando però il ciclo while al posto del for
    infatti non capivo perchè mi dava 0...grazie di tutto,ora ne ho un paio simili da fare ci sbatto la testa adesso che ho capito meglio grazie mille

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Prego!

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.