Visualizzazione dei risultati da 1 a 9 su 9

Discussione: java_stringTokenizer

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    37

    java_stringTokenizer

    Buongiorno a tutti!!
    Allora adesso vi spiego per bene.
    Ho un sito di ricette da fare con un database in cui per ogni riga ho la ricetta e nella colonna "ingredienti" ho messo il seguente esempio di stringa:
    "ciliegine di mozzarella gr,30,pomodorini,3,pizzico di origano,1"

    Vorrei dividere la stringa con tokenizer perchè vorrei calcolarmi le quantità di ingredienti, in base al numero di persone dato da input.
    Quindi in html ho:

    <center>
    <form method="post" action="/servlet/Ricette">
    <h3><font color=black>Scrivi il numero di persone per cui vuoi la ricetta: </font></h3></br>
    <input type="text" name="persone" value="persone">
    </form>
    <h3>10. Pomodorini e Mozzarella</h3>
    </br>

    Nella query della servlet java, estraggo la ricetta che mi viene selezionata dal link che prima di mettere Tokenizer funzionava.
    Non riesco a mettere a posto il calcolo delle quantità in modo che mi restituisca il calcolo tra "persone" dato da input e il pezzo di stringa con la quantità.
    C'è qualcuno che mi sa dire come si fa
    Questa è la parte di sevlet in cui ho provato a mettere il Tokenizer, ma non funziona:

    while(r.next())
    {

    String ingredienti = r.getString("ingredienti");
    StringTokenizer st = new StringTokenizer(ingredienti,",");
    while(st.hasMoreTokens())
    {
    String ing = st.nextToken();
    int qty = Integer.parseInt(st.nextToken());

    int pers = Integer.parseInt(persone);
    int qtytot = qty * pers;

    out.println("<font face=cursive><h2>Ingredienti:"+st.nextToke(ing)+"</h2></font><font face=cursive><h2>"+r.getString(qtytot)+"</h2></font>");

    }

    out.println("<font face=cursive><h2>"+r.getString(2)+"</h2></font>");

    out.println("<font face=cursive><h4>Stagione : <font color=black>"+r.getString(3)+"</font></h4><h4>Categoria : <font color=black>"+r.getString(4)+"</font></h4><h4>Luogo d'origine: <font color=black>"+r.getString(5)+"</font></h4><h4>Difficoltà: <font color=black>"+r.getString(6)+"</font></h4><h4>Calorie a persona: <font color=black>"+r.getString(7)+"</font></h4><h4>Ingredienti: <font color=black>"+r.getString("ingredienti")+"</font></h4><h4>Esecuzione: <font color=black>"+r.getString(9)+"</font></h4></font></br>");
    }

    C'è qualcuno che mi sa aiutare?
    Grazie mille dell'attenzione!
    Lau

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    Vediamo se ho capito bene (mi concentro solo sulla parte del Tokenizer).La seguente istruzione
    codice:
    String ingredienti = r.getString("ingredienti");
    fa in modo che alla variabile String ingredienti venga assegnato il seguente valore
    codice:
    String ingredienti = "ciliegine di mozzarella gr,30,pomodorini,3,pizzico di origano,1"
    Giusto?
    Poi tu passi allo StringTokenizer la stringa.

    Se è questo ciò che succede, allora la seconda istruzione all'interno del while provoca un'eccezione NumberFormatException
    codice:
    while (st.hasMoreTokens()) {
       String ing = st.nextToken(); // Qui leggo la stringa "ciliegine di mozzarella gr"
       int qty = Integer.parseInt(ing);  // <-- ERRORE: Non ho un numero
    }
    Poi sono rimasto un po' perplesso quando ho visto l'istruzione successiva
    codice:
    int pers = Integer.parseInt(persone);
    Non ho visto dichiarata da nessuna parte questa variabile persone, ma spero non si riferisca al parametro
    codice:
    <input type="text" name="persone" value="persone">
    a meno che il valore passato non sia di tipo intero...

    Ho capito qualcosa o sono completamente fuori bersaglio? :master:

    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
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    37
    Si "persone" è un numero intero; il numero di persone che viene inserito, tramite il form:

    <form method="post" action="/servlet/Ricette">
    <h3><font color=black>Scrivi il numero di persone per cui vuoi la ricetta: </font></h3></br>
    <input type="text" name="persone" value="persone">
    </form>

    <h3>10. Pomodorini e Mozzarella</h3>
    </br>

    poi (non so è giusto) questo parametro lo recupero nella stessa servlet così:

    String persone = req.getParameter("persone");

    Solo che in quel while mi serviva dichiararlo come intero per moltiplicarlo con le qtà (che in teoria il tokenizer dovrebbe ottenermi).

    Poi come devo fare per stampare in output le qtà giuste?

    Grazie dell'interessamento.

    Lau

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    Io di Servlet non me ne intendo, ma mi sembra che per stampare in output ci sia qualcosa tipo out.print().
    Rimane il fatto che devi gestire il caso in cui stai parsando una stringa, da quando stai parsando un numero: da quel che vedo i numeri sono nei token in posizione pari all'interno della stringa, quindi potresti fare qualcosa del genere:
    codice:
    int i = 0;
    int qty;
    int qtytot = 1;
    while (st.hasMoreTokens()) {
       if ((i % 2) == 1) {
          qty = Integer.parseInt(st.nextToken());
          qtytot = qty * pers;
       } else {
          st.nextToken();
       }
       i++;
    }
    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
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    37
    E' vero!! Hai ragionissima!!!
    Grazie mille!! Ora provo!!
    Un bacio!
    Lau

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    37
    Ciao!! Sono ancora io! Scusa se ti stresso!!
    Ho provato..però dato che il numero di persone lo recupero cosi' nella servlet:
    String persone = req.getParameter("persone");

    ho messo:
    int pers = Integer.parseInt(persone);

    perchè senno' mi dava errore nella moltiplicazione:
    qtytot = qty * pers;

    cmq mi dice che nn trova il db e da lo stesso questo errore:
    java.lang.NumberFormatException: null

    Secondo te è giusto in html scritto così?

    <form method="post" action="/servlet/Ricette">
    <h3><font color=black>Scrivi il numero di persone per cui vuoi la ricetta: </font></h3></br>
    <input type="text" name="persone" value="persone">
    </form>

    <h3>10. Pomodorini e Mozzarella</h3>
    </br>
    <h3>3. Cetrioli e salmone affumicato</h3>
    </br>

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    Se non trova il DB è ovvio che appaia l'eccezione NumberFormatException, in quanto Integer.parseInt() si trova a parsare un oggetto nullo che non è un numero. Per quanto riguarda il codice HTML, direi che va bene, ma vorrei capire una cosa: il codice è proprio così
    codice:
    <form method="post" action="/servlet/Ricette"> 
    <h3><font color=black>Scrivi il numero di persone per cui vuoi la ricetta: </font></h3></br> 
    <input type="text" name="persone" value="persone"> 
    </form>
    oppure, al posto di
    codice:
    <input type="text" name="persone" value="persone">
    c'è scritto qualcosa di simile a questo
    codice:
    <input type="text" name="persone" value="4">
    Spero che la risposta sia «c'è scritto un numero e non la stringa "persone"».


    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
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    37
    Io veramente avevo scritto value="persone". Pensavo che non fosse un problema che il valore fosse una stringa anche se effettivamente nella casella di testo si inserisce un numero.
    Pensavo che value fosse solo il testo da insrire nella casella prima che si inserisca il numero di persone per cui si vogliono calcolare le quantità.
    Lau

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    D'accordo... l'importante è che poi alla servlet venga passato un numero e non la scritta "persone"

    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

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.