Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110

    Problema invocazione metodo

    scusate perché mi da errore nell'invocazione del metodo? Mi dice che un metodo registraVendita() deve essere creato mentre il metodo c'è...

    codice:
    import java.util.Scanner;
    
    public class DemoVendite {
    
     private int numerovenduti;
     private int totalevendite;
     private int totalescontati;
     private int costoarticolo;
     private int quantitaingrosso;
     private int scontoingrosso;
     
     
     public void registraVendita(){
         Scanner tastiera = new Scanner(System.in);
         int n;
         
         System.out.println("Inserisci quantità del prodotto da acquistare:");
         n=tastiera.nextInt();
         
         if(n > quantitaingrosso){
             this.costoarticolo = this.costoarticolo - this.scontoingrosso;
             this.totalescontati = this.totalescontati + n;
             
         }
         this.numerovenduti = this.numerovenduti + n;
     }
    
    
        
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            registraVendita();
        }
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    scusate perché mi da errore nell'invocazione del metodo? Mi dice che un metodo registraVendita() deve essere creato mentre il metodo c'è...

    L'errore che ricevi in compilaizone dovrebbe essere qualcosa del genere :
    codice:
    error: non-static method registraVendita() cannot be referenced from a static context

    Questo non significa che il metodo deve essere creato. Ti informa sul fatto che dal metodo main (che è un metodo statico, da qui quel "static context") non puoi richiamare il metodo registraVendita(), che è un metodo non statico.
    Due possibili soluzioni sono :

    - dichiari registraVendita() come static. Questa è una falsa soluzione, nel senso che non riceverai più quell'errore e il programma funzionerebbe in altri casi, ma nel tuo caso in esame riceverai una grossa serie di errori: all'interno del metodo vengono infatti richiamate variabili relative a una specifica istanza di DemoVendite (quelle che richiami con this). Queste non sono appunto variabili statiche o "di classe", quindi un metodo statico non saprebbe come procedere.
    - richiami registraVendita() su un oggetto DemoVendite che istanzi per l'occasione, ad esempio :
    codice:
    new DemoVendite().registraVendita();
    E' però importante capire la distinzione tra variabili/metodi di istanza e variabili/metodi statici, dovresti studiare bene l'argomento

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    E' proprio quello che sto studiando
    Io non voglio che si crei un'istanza per ogni acquisto... il prodotto è sempre e solo uno quindi ho bisogno che in base all'avvio di registraVendita() e all'inserimento dei vari acquisti vadano a modificarsi le variabili inizializzate all'inizio (totalevendite, totalescontati, etc etc). Quindi suppongo serva uno static no?
    Ma dichiarando le variabili all'inizio, come faccio poi a passarle nel metodo senza che mi dia errore?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    Io non voglio che si crei un'istanza per ogni acquisto... il prodotto è sempre e solo uno quindi ho bisogno che in base all'avvio di registraVendita() e all'inserimento dei vari acquisti vadano a modificarsi le variabili inizializzate all'inizio (totalevendite, totalescontati, etc etc). Quindi suppongo serva uno static no?
    Ma dichiarando le variabili all'inizio, come faccio poi a passarle nel metodo senza che mi dia errore?
    Il concetto che devi capire bene è: variabili/metodi "di istanza" (non static) sono associati e distinti per ciascun oggetto creato di una certa classe. Mentre variabili/metodi "di classe" (static) sono per così dire "unici" (=globali), associati alla classe.

    Nel tuo codice all'inizio hai 6 variabili di istanza e registraVendita() è anche di istanza. Il main() è static e in questo contesto le 6 variabili e registraVendita li potresti usare SOLO avendo a disposizione il reference ad un oggetto DemoVendite.

    Ora ... questa classe DemoVendite cosa rappresenta per te? Serve solo per la applicazione o per modellare ciascun prodotto? Presumo sia il primo scenario.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il concetto che devi capire bene è: variabili/metodi "di istanza" (non static) sono associati e distinti per ciascun oggetto creato di una certa classe. Mentre variabili/metodi "di classe" (static) sono per così dire "unici" (=globali), associati alla classe.

    Nel tuo codice all'inizio hai 6 variabili di istanza e registraVendita() è anche di istanza. Il main() è static e in questo contesto le 6 variabili e registraVendita li potresti usare SOLO avendo a disposizione il reference ad un oggetto DemoVendite.

    Ora ... questa classe DemoVendite cosa rappresenta per te? Serve solo per la applicazione o per modellare ciascun prodotto? Presumo sia il primo scenario.
    l'esercizio mi richiede un unico prodotto e facendo partire registraVendite() vorrei che quelle variabili iniziali si aggiornassero e tenessero il passo con i vari acquisti fatti. Come fare? E se fossero più prodotti diversi è possibile comunque avere una somma totale finale di tutti i prodotti acquistati?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    l'esercizio mi richiede un unico prodotto e facendo partire registraVendite() vorrei che quelle variabili iniziali si aggiornassero e tenessero il passo con i vari acquisti fatti. Come fare? E se fossero più prodotti diversi è possibile comunque avere una somma totale finale di tutti i prodotti acquistati?
    Se a te serve che le variabili numerovenduti, totalevendite, ecc.. siano "uniche", le soluzioni sono 2:

    a) Metti le 6 variabili static e metti pure registraVendita() static. In questo modo è tutto un contesto "statico", pertanto main può vedere ed invocare direttamente registraVendita, ecc...

    b) Mantieni le variabili e registraVendita così come sono ora (non static) ma crei 1 (ne basta una!) istanza di DemoVendite, giusto per far partire il tutto invocando registraVendita su una istanza della classe e quindi stando poi nel contesto di questa istanza.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Innanzitutto grazie per le risposte e per la disponibilità! Alla fine ho usato la soluzione b! Ma la domanda che mi viene in mente è: possono le varie istanze andare a modificare una variabile statica?
    Es: varie istanze di acquisto di oggetti e poi una variabile finale statica che somma il numero di oggetti venduti in ogni istanza...

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    possono le varie istanze andare a modificare una variabile statica?
    Certo, perché l'ambito di visibilità (scope) dei membri static è più ampio rispetto a quello dei membri di istanza. Ovviamente conta come sempre il livello di accesso: se una classe A ha un private static int val; una classe esterna B NON può accedere direttamente a val .... perché private.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Ok, faccio qualche prova e vediamo

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.