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

    Piccolo aiuto per principiante

    Salve a tutti, sono uno studente autodidatta...
    ho iniziato a studiare java (con zero conoscenze di programmazione) da 2 settimane... con un libro (Manuale-Pratico-Di-Java-Vol-1)
    sono fermo ad un argomento: Le stringhe..
    Volevo provare a scrivere una semplice funzione che legga l'imput inserito da uno pseudo utente e che poi risponda di conseguenza..

    es. Quanti anni hai?
    18
    if (anni >=18)
    istruzione entra
    else
    istruzione esci

    Fino ad ora ho scritto questo codice:
    codice:
    import javax.swing.*;
     public class ControlloAnni {
      public static void main(String argv []) {
     int anni = 0; 
     String s = JOptionPane.showInputDialog("Quanti anni hai?");
     anni = anni + s;
     if (anni >= 18) 
     JOptionPane.showMessageDialog("Accesso consentito!"); 
     else 
     JOptionPane.showMessageDialog("Accesso negato!"); 
    
    /* Ho provato in questo modo ma non va!! 
    * provando a ragionare forse "credo" che non si possa sommare un int ad una stringa e viceversa 
    * ma non so se è quello l'errore.. 
    * Ho provato in tanti altri modi... con s.trim() ed altro.. ma quado compilo mi da sempre errore 
    */
      }
    }
    Potete gentilmente darmi una mano?
    Mi scuso se ho sbagliato a scrivere qualcosa, o se domando info stupide... ma se non riesco a fare questo esercizio non riesco a capire come andare avanti..
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Benvenuto sul forum.

    Innanzitutto ti invito a prendere visione del regolamento interno della sezione, dove sono indicate le norme principali a cui attenersi per l'apertura delle discussioni. In questo caso, il titolo della discussione non è conforme, ma lo aggiusto io.

    Poi, dovresti indicare qual è il problema che hai: hai postato il codice che hai scritto (e lo hai anche fatto correttamente, con l'uso appropriato dei tag CODE), ma non hai detto qual è il problema che incontri. Se hai degli errori (in compilazione/esecuzione) dovresti riportare anche quelli.

    Suggerimenti: stringhe e numeri sono due cose diverse. Se provi a "sommare" un numero ad una stringa, ciò che ottieni è una stringa risultante dalla concatenazione (es, "12" + 3 = "123")

    Se hai una stringa e devi trattarla come numero, devi convertirla. Esiste la classe Integer che riesce a convertire una stringa che rappresenta un intero, Double per una stringa che rappresenta un double, ecc. Ciascuna ha il suo metodo statico "parseXXX": parseInt(), parseDouble(), ecc. che prende come argomento la stringa da parsare e restituisce il valore corrispondente in formato numerico.


    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
    Sep 2012
    Messaggi
    16
    Grazie per la risposta..
    Praticamente non mi compila proprio il sorgnte...
    Quando dal promp dei comandi eseguo: javac ControlloAnni.java

    mi parecchi errori... non riesco a riportarli perchè non mi fa copiare i testi del promp...
    quindi mi da errore sin dal principio, nella compilazione...

    Grazie..

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Jeymax
    Grazie per la risposta..
    Praticamente non mi compila proprio il sorgnte...
    Quando dal promp dei comandi eseguo: javac ControlloAnni.java

    mi parecchi errori... non riesco a riportarli perchè non mi fa copiare i testi del promp...
    quindi mi da errore sin dal principio, nella compilazione...

    Grazie..
    Sì, che te li fa copiare: tasto destro sulla barra del titolo, "Modifica" -> "Seleziona".

    Selezioni la parte da copiare, quindi, tasto destro sulla barra del titolo, "Modifica" -> "Copia".

    Senza indicazioni di sorta obbligheresti gli utenti a copiare il tuo codice, incollarlo su un file, compilarlo, guardarsi gli errori, tornare sul tuo codice ed indicarti le correzioni.


    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
    Sep 2012
    Messaggi
    16
    Seguendo il tuo consiglio ho provato cosi:
    codice:
    import javax.swing.*;
    public class ControlloAnni {
     public static void main(String[] args) {
      int anni = 0;
       int a = 0;
       String s = JOptionPane.showInputDialog("Quanti anni hai?");
       a = Integer.parseInt(s);
       anni = a + s;
      if (anni >= 18)
       JOptionPane.showMessageDialog("Accesso consentito!");
      else
       JOptionPane.showMessageDialog("Accesso negato!");
     }
    }
    Ma niente... mi da sempre una marea di errori in fase di compilazione..

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    16
    C'è l'ho fatta.....(a copiare gli errori)

    codice:
    ControlloAnni.java:11: error: incompatible types
     String s = JOptionPane.showInputDialog("Quanti anni hai?");
                                           ^
      required: String
      found:    java.lang.String
    ControlloAnni.java:13: error: no suitable method found for parseInt(String)
     a = Integer.parseInt(s);
                ^
        method Integer.parseInt(java.lang.String) is not applicable
          (actual argument String cannot be converted to java.lang.String by method
    invocation conversion)
        method Integer.parseInt(java.lang.String,int) is not applicable
          (actual and formal argument lists differ in length)
    ControlloAnni.java:15: error: bad operand types for binary operator '+'
     anni = a + s;
              ^
      first type:  int
      second type: String
    ControlloAnni.java:19: error: no suitable method found for showMessageDialog(Str
    ing)
      JOptionPane.showMessageDialog("Accesso consentito!");
                 ^
        method JOptionPane.showMessageDialog(Component,Object,String,int,Icon) is no
    t applicable
          (actual and formal argument lists differ in length)
        method JOptionPane.showMessageDialog(Component,Object,String,int) is not app
    licable
          (actual and formal argument lists differ in length)
        method JOptionPane.showMessageDialog(Component,Object) is not applicable
          (actual and formal argument lists differ in length)
    ControlloAnni.java:23: error: no suitable method found for showMessageDialog(Str
    ing)
      JOptionPane.showMessageDialog("Accesso negato!");
                 ^
        method JOptionPane.showMessageDialog(Component,Object,String,int,Icon) is no
    t applicable
          (actual and formal argument lists differ in length)
        method JOptionPane.showMessageDialog(Component,Object,String,int) is not app
    licable
          (actual and formal argument lists differ in length)
        method JOptionPane.showMessageDialog(Component,Object) is not applicable
          (actual and formal argument lists differ in length)
    .\String.java:11: error: cannot find symbol
    System.out.print(String);
                     ^
      symbol:   variable String
      location: class String
    7 errors

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    stai facendo l'errore di prima :
    perchè fai
    codice:
    anni = a +s;
    ??
    Come ti ha detto LeleFT int + stringa --> stringa che tu stai assegnando a una variabile intera , è un errore!
    dovresti fare
    codice:
    anni = a;
    o ancora più diretto
    codice:
    int anni = Integer.parseInt (JOptionPane.showInputDialog ("Quanti anni hai?"));
    Passiamo avanti , la classe JOptionPane non dispone di un metodo showMessageDialog strutturato come lo stai invocando tu (showMessageDialog (Object o))
    String (come tutti gli oggetti , seppur implicitamente) estende Object

    guarda le varie forme del metodo sulla documentazione ufficiale:
    Documentazione


  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quella serie di errori non è data dal codice che hai postato nel tuo penultimo intervento.
    Ricorda che se fai delle modifiche, devi dirlo, postandone il codice. Non ha senso postare una serie di errori che si riferiscono a codice che gli utenti non possono conoscere.

    Il codice del tuo penultimo post genera la seguente lista di errori:

    codice:
    ControlloAnni.java:8: incompatible types
    found   : java.lang.String
    required: int
       anni = a + s;
                ^
    ControlloAnni.java:10: cannot find symbol
    symbol  : method showMessageDialog(java.lang.String)
    location: class javax.swing.JOptionPane
       JOptionPane.showMessageDialog("Accesso consentito!");
                  ^
    ControlloAnni.java:12: cannot find symbol
    symbol  : method showMessageDialog(java.lang.String)
    location: class javax.swing.JOptionPane
       JOptionPane.showMessageDialog("Accesso negato!");
                  ^
    3 errors
    Il primo, alla riga 8, ti dice che non puoi sommare un numero e una stringa, assegnando il risultato ad una variabile numerica. Per il motivo che ti ho detto all'inizio: una stringa "sommata" ad un numero, genera una stringa dalla concatenazione dei due (e non è ciò che vuoi ottenere). Infatti, mi chiedo perchè di quella somma... il valore numerico degli anni ce l'hai già nella variabile "a".

    Il secondo ed il terzo riguardano l'uso improprio del metodo showMessageDialog di JOptionPane (vedi documentazione della classe). JOptionPane non ha alcun metodo showMessageDialog che prende come parametro unicamente una stringa. Tale metodo, infatti, vuole almeno un componente "padre" da cui far dipendere il messaggio. Puoi passargli null, ma ciò non significa che puoi omettere il parametro:

    codice:
    JOptionPane.showMessageDialog(null, "Accesso negato!");
    Stessa cosa per il messaggio di accesso consentito.


    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

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    16

    [RISOLTO]

    Grazie a tutti ragazzi...
    alla fine ho risolto seguendo il consiglio di zipangulu
    con questo codice:

    codice:
    import javax.swing.*;
    public class ControlloAnni {
     public static void main(String[] args) {
     int anni = Integer.parseInt (JOptionPane.showInputDialog (null,"Quanti anni hai?"));
     if (anni >= 18)
      JOptionPane.showMessageDialog(null,"Accesso consentito!");
     else
      JOptionPane.showMessageDialog(null,"Accesso negato!");
     }
    }
    Grazie ancora...
    P.S: da come è finita, ho capito che la stringa non è servita a nulla...

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Bene.
    Ora prova a vedere cosa accade quando:

    1) Confermi la finestra di dialogo scrivendo qualcosa che non sia un numero (es: "Ciao")
    2) Confermi la finestra di dialogo senza scrivere nulla
    3) Clicchi sul pulsante "Annulla" della finestra di dialogo.

    Sono dei casi "particolari", ma molto comuni quando si ha a che fare con l'input da tastiera. Un buon esercizio è quello di trovare una soluzione affinchè questi tre casi particolari vengano intercettati e gestiti.


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