Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    4

    Metodo che non funziona

    Ciao a tutti.
    Ho iniziato a studiare java da poco, e provando a costruire un programma che mi calcoli la miscela per la moto ho riscontrato un problema; quando provo ad avviare il programma, dopo aver messo i dati mi scrive questo al posto della quantità d'olio olio.Miscela@3c891d76 ...

    Questa è la mia classe :

    codice:
    public class Miscela {
    
        double benzina,olio,miscela;
        
      /** public Miscela(double benzina,double miscela) {
            this.benzina=benzina;
            this.miscela=miscela;
        }
      */
        
      public double calcolaMiscela(double benzina,double miscela){
          
          olio=(benzina*miscela)*10.0;
          return olio;
      }
        
        
        
    }
    
    e questo è il main 
    
    public class Olio {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            
            Scanner tastiera = new Scanner(System.in);
            
            System.out.print("Litri di benzina: ");
            double benzina = tastiera.nextDouble();
            
            System.out.print("Percentuale Miscela: ");
            double miscela = tastiera.nextDouble();
            
           Miscela mix = new Miscela();
           mix.calcolaMiscela(benzina,miscela);
           
           System.out.println("Per fare la miscela al "+miscela+"%"+" devi aggiungere "+mix+" mL di olio");
        }
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Stai scrivendo a video l'oggetto "mix"... è un oggetto, quindi su di esso verrà invocato il metodo toString(). Tu non hai ridefinito tale metodo, quindi Java scrive ciò che fornise il metodo toString() di Object... ovvero, la locazione in memoria dell'oggetto.

    Quello che devi fare tu è usare il valore di ritorno del metodo calcolaMiscela() (che tu, attualmente, stai semplicemente buttando via).

    codice:
    double calcolato = mix.calcolaMiscela(benzina,miscela);
    System.out.println("Per fare la miscela al "+miscela+"%"+" devi aggiungere "+calcolato+" mL di olio");
    PS: quando posti del codice, usa gli appositi tag CODE in modo da mantenerne la formattazione e l'indentazione.

    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
    Oct 2012
    Messaggi
    4
    ho risolto dichiarando il metodo calcolaMiscela statico , e quindi richiamandolo dentro al main double mix = Miscela.calcolaMiscela(benzina,miscela); , però non ho capito il discorso toString() .. dovrei avrei dovuto mettere toString() ?

    per il mio metodo non statico, pensavo che scrivendo Miscela mix = new Miscela(); avrei creato 1 oggetto mix di tipo Miscela(che non richiede nessun parametro), e poi con mix.calcolaMiscela(benzina,miscela); avrei richiamato il metodo calcolaMiscela dandogli i parametri double.. dove ho sbagliato ?

    grazie per la pazienza

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da adu757
    ho risolto dichiarando il metodo calcolaMiscela statico , e quindi richiamandolo dentro al main double mix = Miscela.calcolaMiscela(benzina,miscela); , però non ho capito il discorso toString() .. dovrei avrei dovuto mettere toString() ?
    Non hai letto bene il mio suggerimento. Non ha alcun senso rendere il metodo statico... semplicemente tu richiamavi il metodo, ma buttavi via il valore di ritorno, ovvero non lo assegnavi a nessuna variabile, cosa che hai fatto dopo averlo reso (inutilmente) statico.

    per il mio metodo non statico, pensavo che scrivendo Miscela mix = new Miscela(); avrei creato 1 oggetto mix di tipo Miscela(che non richiede nessun parametro), e poi con mix.calcolaMiscela(benzina,miscela); avrei richiamato il metodo calcolaMiscela dandogli i parametri double..
    Ed è esattamente così.

    dove ho sbagliato ?
    Nel non assegnare il valore di ritorno ad una variabile (cosa che hai fatto dopo). Vedi il mio primo post: leggi bene entrambe le due righe che ho postato (anche la seconda, a destra) e confrontale con quello che avevi fatto tu.

    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
    Oct 2012
    Messaggi
    4
    ahhhh ho capito !

    Miscela mix = new Miscela();
    double mixDaAggiungere = mix.calcolaMiscela(benzina,miscela);

    grazie mille !

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    4

    Desktop Application

    adesso ho fatto la desktop application, ma se gli dico import miscela.Miscela; mi suggerisce "import from the same package", però il programma funziona..

    altra cosa : come devo fare perchè accetti anche la virgola e non solo il punto per dare un valore double ?

    grazie ancora

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

    Re: Desktop Application

    Originariamente inviato da adu757
    adesso sto cercando di fare anche la desktop application, ho creato i textfield e il button, copiato la classe nel nuovo package, però non so come importare la classe che ho fatto prima, se faccio import miscela.Miscela; mi suggerisce "import from the same package", però il programma funziona..
    Perchè le classi che stanno nello stesso package non serve importarle... sono già disponibili.

    altra cosa : come devo fare perchè accetti anche la virgola e non solo il punto per dare un valore double ?

    grazie ancora
    Le costanti di tipo double devono essere obbligatoriamente indicate col punto (è parte della sintassi del linguaggio). Non puoi indicarle con la virgola che è un elemento che serve ad altro (separatore tra parametri nelle firme e nelle invocazioni dei metodi).

    Puoi voler leggere da tastiera un valore decimale con la virgola, ma questo è un discorso diverso: si deve leggere il valore all'interno di una String, quindi effettuarne il parsing usando il Locale italiano... è un argomento che, al momento, ti consiglierei di lasciare per il futuro; ci arriverai col tempo.


    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.