Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    51

    Problema riguardante la stampa/visualizzazione nella programmazione oggetti

    Ragazzi vi pongo un nuovo quesito a partire da questa traccia:


    Un magazzino è costituito da un insieme di diversi tipi di merci e per ogni merce da un certo
    numero di articoli.
    Si implementi una classe Magazzino che realizza un insieme ordinato di merci che ha i seguenti
    costruttori e metodi:
    · public Magazzino(int numeroDiMerci) che definisce un insieme costituito da un numero di
    merci pari a numeroDiMerci. Il costruttore deve impostare a zero il numero di articoli di ciascun
    tipo di merce (Help: a tale scopo si utilizzi una struttura dati di tipo array per simulare il
    magazzino);
    · public void ordine(int tipoMerceOrdinata, int numeroDiMerciOrdinate) che sottrae dal
    tipoMerceOrdinata il numeroDiMerciOrdinate.
    · public void fornitura(int tipoMerceFornita, int numeroDiMerciFornite) che aggiunge al
    tipoMerceFornita il numeroDiMerciFornite.
    Si simuli il funzionamento del magazzino all’interno della classe main per due diversi ordini (ad es.
    merce 3 e 5 per 100 e 200 pezzi) e una fornitura (ad es. merce 6 per 10 pezzi). Si stampino i valori
    finali di merci nel magazzino.
    N.B.: Si scriva la classe Magazzino e la classe Main in due files differenti. Stampare un valore
    finale significa aggiungere un ulteriore metodo alla classe Magazzino.

    Mentre questo è il codice:

    Main:

    codice:
    public class JavaApplication27 {
    
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // Fase di input
            Scanner sc= new Scanner (System.in);
            System.out.println("Inserisci il numero di merci");
            int numerodimerci=sc.nextInt();
            int ord[]=new int[numerodimerci];
            int forn[]=new int[numerodimerci];
            int somma[]=new int[numerodimerci];
           for (int i=0;i<numerodimerci;i++){
      System.out.println("Inserisci il valore delle forniture per tipo");
              forn[i]=sc.nextInt();} 
            for (int i=0;i<numerodimerci;i++){
      System.out.println("Inserisci il valore degli ordini per tipo");
               ord[i]=sc.nextInt();}
            for (int i=0;i<numerodimerci;i++){somma[i]=forn[i]+ord[i];}
           Magazzino mag=new Magazzino(numerodimerci,forn[numerodimerci]);
            //Fase di output
            
         }
        }

    Magazzino

    codice:
    public class Magazzino {private int numerodimerci;int numeroarticoli; int[] mag;int forn[];int ord[];
    
    
    public Magazzino (int numerodimerci,int numeroarticoli){
        this.numeroarticoli=numeroarticoli;
        this.numerodimerci=numerodimerci;
        mag= new int[this.numerodimerci];
        forn=new int[this.numerodimerci];
        ord=new int[this.numerodimerci];
    for(int i=0;i<numerodimerci;i++){
    mag[i]=0;}
    }
    public void Fornitura (int tipodimercefornita,int numerodimercefornita){tipodimercefornita=numerodimerci;
    for (int i=0;i<numerodimerci;i++){forn [i]=forn[i]+mag[i];}
    }
    
    
    public void Ordine (int tipodimerceordinata,int numerodimerceordinata){tipodimerceordinata=numerodimerci;
    for (int i=0;i<numerodimerci;i++){if (ord[i]<mag[i]){ord[i]=mag[i]-ord[i];}
    else {System.out.println("Non ci sono sufficienti scorte in magazzino");}
    
    
    }
    }
    
    
    public void Visualizza (double somma[]){for (int i=0;i<numerodimerci;i++){somma [i]=forn[i]+ord[i];
    System.out.println("Il valore restante nel magazzino è"+somma[i]);}
    }
    }

    P.S.Non so se ci sono errori poichè mi manca l'output del main... Grazie mille in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    51
    Il problema è che non so come collegare la classe secondaria,cioè magazzino, al main per poter stampare i valori...

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    La stai facendo molto più complicata di quel che è richiesto (e non stai nemmeno seguendo quel che è richiesto dalla traccia).

    La classe Magazzino deve avere un costruttore che prende 1 solo valore intero. Nel tuo svolgimento, tale classe prende 2 parametri. Già qui lo svolgimento dell'esercizio è sbagliato.

    Se ci pensi bene, la cosa è molto più semplice di quel che stai facendo tu. La classe Magazzino deve avere 1 solo array di interi. Il costruttore prende un intero che indica la dimensione di tale array, quindi dimensiona questo array e inizializza tutti i suoi valori a 0.

    Le due operazioni prendono entrambe 2 valori interi: il primo è l'indice dell'array da andare a modificare, mentre il secondo è il valore da aggiungere o togliere a quella posizione dell'array.

    Fine.

    Per visualizzare lo stato del magazzino hai implementato il metodo Visualizza (ps: in Java i nomi dei metodi iniziano con la lettera minuscola, solo le classi hanno l'iniziale maiuscola). Questo metodo dovrebbe semplicemente scorrere l'array e stampare i valori.


    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    51
    Scusami,però non ho capito la parte delle operazioni mi puoi fare un esempio sulla prima parte,se non chiedo troppo??Perchè io a livello pratico ho capito ma non so tradurlo poi nella classe magazzino...Cioè in pratica per ogni valore dell'array io devo togliere gli ordini,però il problema è che se inizializzo tutto a 0 il magazzino conterrà 0 valori di tutto e quindi il magazzino assumerebbe valori negativi...Sono alquanto confuso su questo esercizio...

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da hhh6 Visualizza il messaggio
    Scusami,però non ho capito la parte delle operazioni mi puoi fare un esempio sulla prima parte,se non chiedo troppo??Perchè io a livello pratico ho capito ma non so tradurlo poi nella classe magazzino...Cioè in pratica per ogni valore dell'array io devo togliere gli ordini,però il problema è che se inizializzo tutto a 0 il magazzino conterrà 0 valori di tutto e quindi il magazzino assumerebbe valori negativi...Sono alquanto confuso su questo esercizio...
    C'è scritto nella consegna di inizializzare tutto a zero...
    Riguardo il poter avere quantità negative: la consegna non parla di come gestire questo caso. Quindi:
    1 - te ne freghi
    2 - metti tu un controllo che, nel caso in cui si andasse in negativo, blocca l'ordine (magari stampando un messaggio sulla console)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    51
    e riguardo al metodo "ordina" potresti farmi vedere un approccio,perchè,come sottolineato precedentemente ho complicato le cose....

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Non credo che il tuo professore si aspetti che vengano effettuati degli ordini, prima che vengano fatte le forniture... anche nella vita reale, prima di poter vendere un prodotto è necessario farne il carico a magazzino (mica posso vendere un prodotto che non ho).
    Detto questo, se proprio vogliamo accertarci che vi sia sufficiente merce a magazzino per poter accettare l'ordine, basta un banalissimo if (che immagino ti abbiano abbondantemente spiegato).


    codice:
    // Suppongo che l'array di interi (deve essere 1 solo array) si chiami "mag"
    public void ordine(int tipoMerceOrdinata, int numeroDiMerciOrdinate) {
       if (mag[tipoMerceOrdinata] >= numeroDiMerciOrdinate) {
          // Ordine accettato, effettuo l'operazione
          ...
       } else {
          System.out.println("Ordine non accettato, merce insufficiente!");
       }
    }

    E' di una banalità disarmante.


    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
    Aug 2014
    Messaggi
    51
    scusami ho avuto un momento di lapsus oltre che un piccolo quiproquo con il libro comunque l'ho fatto l'esercizio e lo posto per completezza:

    Main:

    codice:
    public class JavaApplication27 {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // Fase di input
            Scanner sc= new Scanner (System.in);
            System.out.println("Inserisci il numero di merci");
            int numerodimerci=sc.nextInt();
           Magazzino mag=new Magazzino (numerodimerci);
           
           System.out.println("Inserisci il valore di numero di merci fornite");
           int numero=sc.nextInt();
           System.out.println("Inserisci il tipo di merci fornite");
           int tipo=sc.nextInt();
           mag.Fornitura(tipo, numero);
           System.out.println("Inserisci il valore di numero di merci ordinate");
           int numerodimerceordinata=sc.nextInt();
           System.out.println("Inserisci il tipo di merci ordinate");
           int tipodimerceordinata=sc.nextInt();
           mag.Ordine(tipodimerceordinata, numerodimerceordinata);
           mag.Visualizza ();
         }
        }
    Classe magazzino:

    codice:
    package javaapplication27;
    
    
    
    
    public class Magazzino {private int numerodimerci;int mag[];
    
    
    public Magazzino (int numerodimerci){
        
        this.numerodimerci=numerodimerci;
        
        mag= new int[this.numerodimerci];
        
    for(int i=0;i<numerodimerci;i++){
    mag[i]=0;}
    }
    public void Fornitura (int tipo,int numero){
    mag[tipo]+=numero;
    }
    
    
    public void Ordine (int tipodimerceordinata,int numerodimerceordinata){
        if (mag[tipodimerceordinata]>numerodimerceordinata)
        {mag[tipodimerceordinata]-=numerodimerceordinata;}
        else {System.out.println("Non è possibile ordinare la merce");}
    
    
    }
    
    
    
    
    public void Visualizza (){for (int i=0;i<numerodimerci;i++){System.out.println("Il magazzino è equivalente a "+mag[i]);}
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    51
    mi dovete scusare però purtroppo io non ho mai toccato la programmazione e per giunta avevo saltato un capitolo del libro per un errore di comprensione...

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ma davvero il tuo libro usa quella bizzarra naming convention? D:
    Terribile.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.