Esercizio su programmazione ad oggetti

di il
4 risposte

Esercizio su programmazione ad oggetti

Questo è il main e l'errore lo da nel main ... aiuti?




package es1;

import javax.swing.JOptionPane;

public class Es1 {

    public static Programma creaProgramma() {
        Programma p;
        p = new Programma(JOptionPane.showInputDialog("Come si chiama?"),
                JOptionPane.showInputDialog("Chi è il produttore?"),
                Integer.parseInt(JOptionPane.showInputDialog("Che versione è?")),
                Integer.parseInt(JOptionPane.showInputDialog("Che sistema operativo?")),
                Integer.parseInt(JOptionPane.showInputDialog("Di che anno è?")));
        return p;
    }

    public static void main(String[] args) {
        final int DIMENSIONE_CONTENITORE = 5;
        Programma p;
        Contenitore libreria;
        libreria = new Contenitore(DIMENSIONE_CONTENITORE);
        boolean esci = false;

        for (int i = 0; i < DIMENSIONE_CONTENITORE; i++) {

            libreria.setProgramma(creaProgramma(), i);

        }

        while (!esci) {
            switch (JOptionPane.showInputDialog("1 ) Trova informazioni programma"
                    + "\n2 ) sostituisci un programma "
                    + "\n3 ) elimina un programma "
                    + "\n4 ) Scrivi il nome di un progamma e controlla se è presente"
                    + "\n5 ) Controlla quanti programmi in comune ci sono."
                    + "\n6 ) esci.")) {

                case "1":
                    int x = Integer.parseInt(JOptionPane.showInputDialog("Di quale programma "
                            + "vuoi leggere le informazioni?\n\n" + libreria.toString())) - 1;

                    if (libreria[x] != null) {
                        JOptionPane.showMessageDialog(null,
                                "Nome:\n                         " + libreria.getProgramma(x).getNome()
                                + "\nProduttore:\n                         " + libreria.getProgramma(x).getProduttore()
                                + "\nVersione:\n                         " + libreria.getProgramma(x).getVersione()
                                + "\nSistema Operativo:\n                         " + libreria.getProgramma(x).getSo()
                                + "\nAnno:\n                         " + libreria.getProgramma(x).getAnno());
                    } else {
                        JOptionPane.showMessageDialog(null, "VUOTO");
                    }
                    break;
                case "2":

                    int n;
                    do {
                        n = Integer.parseInt(JOptionPane.showInputDialog("In che posizione vuoi mettere il programma?\n\n"
                                + libreria.toString())) - 1;
                    } while (n > DIMENSIONE_CONTENITORE);
                    libreria.setProgramma(creaProgramma(), n);
                    JOptionPane.showMessageDialog(null, libreria.toString());

                    break;
                case "3":
                    libreria.killProgramma(Integer.parseInt(JOptionPane.showInputDialog("Quale programma vuoi togliere? "
                            + "(Inserire numero della posizione)" + libreria.toString())) - 1);
                    break;
                case "4":
                    String nn = JOptionPane.showInputDialog("Che nome?");
                    libreria.cercaProgrammaPerDenominazione(nn);
                    break;
                case "5":
                    Contenitore libreria2;
                    libreria2 = new Contenitore(DIMENSIONE_CONTENITORE);
                    for (int i = 0; i < DIMENSIONE_CONTENITORE; i++) {
                        libreria2.setProgramma(creaProgramma(), i);
                    }
                    if (libreria.confrontaContenitore(libreria2) > 0) {
                        JOptionPane.showMessageDialog(null, "La prima e la seconda libreria hanno in comune "
                                + libreria.confrontaContenitore(libreria2) + " programmi.");
                    } else {
                        JOptionPane.showMessageDialog(null, "La prima e la seconda libreria non hanno in comune "
                                + "alcun programma");
                    }

                    break;
                case "6":
                    esci = true;
                    break;

            }
        }
    }

}




questa è la classe programma
package es1;

public class Programma {

    private String nome;
    private String produttore;
    private int versione;
    private int so;
    private int anno;

    public Programma(String nome, String cognome, int giornoDiNascita, int meseDiNascita, int annoDiNascita) {
        this.nome = nome;
        this.produttore = cognome;
        this.versione = giornoDiNascita;
        this.so = meseDiNascita;
        this.anno = annoDiNascita;
    }

    public String getNome() {
        return nome;
    }
    public int getVersione() {
        return versione;
    }     
    public String getProduttore() {
        return produttore;
    }
    public int getSo() {
        return so;
    }
    public int getAnno() {
        return anno;
    }

    
}


questa è la classe contenitore
package es1;

public class Contenitore {

    private Programma[] libreria = null;
    private int numeroProgrammi;

    public Contenitore(int n) {
        libreria = new Programma[n];
        numeroProgrammi = libreria.length;

    }

    public Programma getProgramma(int posizione) {
        if (posizione < numeroProgrammi) {
            return libreria[posizione];
        } else {
            return null;
        }

    }

    public void setProgramma(Programma p, int posizione) {
        if (libreria[posizione] == null) {
            numeroProgrammi++;
        }
        libreria[posizione] = p;
    }

    public void killProgramma(int posizione) {
        if (libreria[posizione] != null) {
            libreria[posizione] = null;
            numeroProgrammi--;
        }
    }

    public int getN() {
        return numeroProgrammi;
    }

    public int cercaProgrammaPerDenominazione(String denominazione) {
        int s = -1;
        for (int i = 0; i < libreria.length; i++) {
            if (libreria[i] != null) {
                if (libreria[i].getNome().equalsIgnoreCase(denominazione)) {
                    s = i;
                }
            }
        }
        return s;

    }

    public String toString() {
        String o = "";
        for (int i = 0; i < libreria.length; i++) {
            o += (libreria[i] == null) ? "\n" + (i + 1) + " ) (VUOTO)" : 
                    "\n" + (i + 1) + " ) " + libreria[i].getNome();
        }

        return o;
    }

    public int confrontaContenitore(Contenitore altro) {
        int risultato = 0;

        for (int i = 0; i < this.libreria.length; i++) {
            for (int j = 0; j < altro.libreria.length; j++) {
                if (libreria[i] != null && altro.libreria[i] != null) {
                    if (libreria[i].getNome().equals(altro.libreria[j].getNome()) 
                            && libreria[i].getVersione() == (altro.libreria[j].getVersione())) {
                        risultato++;
                    }
                }
            }
        }

        return risultato;
    }

    //se in un array scrivo lo stesso programma due volte lo conto come un programma diverso?
}

4 Risposte

  • Re: Esercizio su programmazione ad oggetti

    Cherry
    con tutto il rispetto possibile, ma se non dai qualche informazione in più, su cosa fà il programma, su cosa ti aspetti in output, cosa ti spunta di errore, qual'è lo stacktrace, insomma qualche informazione in più che possa far capire noi, come speri che possiamo aiutarti?
    Non puoi spiattellare lì un codice e dire "qui c'è il codice, errore nel main, aiuti.." dai qualche informazioni di più a corredo così da poterti aiutare.
  • Re: Esercizio su programmazione ad oggetti

    Ok lasciate stare l'esercizio che ho messo prima. Adesso ho quest'altro esercizio che non va. Non posto la consegna perché man mano che leggete appena prima nello switch capirete che mi aspetto. Nel main ci sono degli errori, netbeans li segna di rosso. Devo solo correggere quegli errori. Non credo di dover dare altre spiegazioni, credo che si spieghi tutto da sè...

    package es.pkg7.arraylist;
    
    import java.util.ArrayList;
    import javax.swing.JOptionPane;
    
    public class Es7Arraylist {
    
        public static int creaNumero(String o) {
    
            return Integer.parseInt(JOptionPane.showInputDialog(o));
        }
    
        public static Veicolo creaVeicolo() {
            Veicolo a;
    
            a = new Veicolo(creaNumero("Inserire codice (tutto a numeri)"),
                    JOptionPane.showInputDialog("Inserire targa (lettere e numeri)"),
                    JOptionPane.showInputDialog("Inserire marca"),
                    JOptionPane.showInputDialog("Inserire modello"),
                    creaNumero("Inserire numero posti"));
            return a;
        }
    
        public static void main(String[] args) {
            ArrayList<Autonoleggio> garage = new ArrayList<Autonoleggio>();
            while (JOptionPane.showConfirmDialog(null, "Vuoi inserire un veicolo?", "conferma", JOptionPane.YES_NO_OPTION) == 0) {
                garage.aggiungiVeicolo(creaVeicolo());
            }
            String s = JOptionPane.showInputDialog("1) Aggiungi un nuovo veicolo"
                    + "\n2) Elimina un veicolo "
                    + "\n3) Ricerca informazioni veicolo "
                    + "\n4) Ricerca quanti veicoli per unmero di posti "
                    + "\n5) Quante macchine dispone per ogni marca l'autonoleggio"
                    + "\n6) Esci ");
    
            while (!s.equals("6")) {
                switch (s) {
                    case "1":
                        garage.aggiungiVeicolo(creaVeicolo());
                        JOptionPane.showMessageDialog(null, garage.toString());
                        break;
                    case "2":
                        JOptionPane.showMessageDialog(null, garage.rimuovi(creaNumero("Inserisci il codice del veicolo da eliminare\n\n" + garage.toString())));
                        break;
                    case "3":
                        JOptionPane.showMessageDialog(null, garage.ricerca(creaNumero("Inserisci il codice del veicolo di cui vuoi sapere informazioni\n\n" + garage.toString())));
                        break;
                    case "4":
                        JOptionPane.showMessageDialog(null, garage.nPosti(creaNumero("Inserisci il numero posti\n\n" + garage.toString())));
                        break;
                    case "5":
                        JOptionPane.showMessageDialog(null, garage.inventario());
                        break;
                }
            };
    
        }
    
    }
    
    package es.pkg7.arraylist;
    
    public class Veicolo {
    
        private int codice;
        private String targa;
        private String marca;
        private String modello;
        private int posti;
    
        public Veicolo(int codice, String targa, String marca, String modello, int posti) {
    
            this.codice = codice;
            this.targa = targa;
            this.marca = marca;
            this.modello = modello;
            this.posti = posti;
    
        }
    
        public int getCodice() {
            return codice;
        }
    
        public void setCodice(int codice) {
            this.codice = codice;
        }
    
        public String getTarga() {
            return targa;
        }
    
        public void setTarga(String targa) {
            this.targa = targa;
        }
    
        public String getMarca() {
            return marca;
        }
    
        public void setMarca(String marca) {
            this.marca = marca;
        }
    
        public String getModello() {
            return modello;
        }
    
        public void setModello(String modello) {
            this.modello = modello;
        }
    
        public int getPosti() {
            return posti;
        }
    
        public void setPosti(int posti) {
            this.posti = posti;
        }
    
    }
    

    package es.pkg7.arraylist;
    
    import java.util.ArrayList;
    
    public class Autonoleggio {
    
        private ArrayList<Veicolo> garage = new ArrayList<Veicolo>();
    
        public void aggiungiVeicolo(Veicolo a) {
            garage.add(a);
        }
    
        public String rimuovi(int codice) {
            String o = "";
            for (int i = 0; i < garage.size(); i++) {
                if (garage.get(i).getCodice() == codice) {
                    garage.remove(garage.get(i));
                    o = "Il veicolo è stato rimosso";
                    break;
                }
                o = "Errore: nessun veicolo rimosso";
            }
    
            return o;
        }
    
        public String ricerca(int codice) {
            String o = "";
            for (int i = 0; i < garage.size(); i++) {
                if (garage.get(i).getCodice() == codice) {
                    o = "Codice:\n" + garage.get(i).getCodice()
                            + "\n\nTarga:\n" + garage.get(i).getTarga()
                            + "\n\nMarca:\n" + garage.get(i).getMarca()
                            + "\n\nModello:\n" + garage.get(i).getModello()
                            + "\n\nNumero Posti:\n" + garage.get(i).getPosti();
                } else {
                    o = "Il codice inserito non è presente nell'elenco";
                }
            }
    
            return o;
        }
    
        public String nPosti(int n) {
            String o = "Il veicolo/i veicoli con il numero di posti inserito ha/hanno questo codice:\n\n";
            for (int i = 0; i < garage.size(); i++) {
                if (garage.get(i).getPosti() == n) {
                    o += garage.get(i).getCodice() + "\n•   ";
                }
            }
    
            return o;
        }
    
        public String inventario() {
            String o = "";
    
            ArrayList<String> prova = new ArrayList<String>();
            boolean b = false;
    
            for (int i = 0; i < garage.size(); i++) {
                for (int c = i; c < prova.size(); c++) {
                    if (garage.get(i).getMarca().equals(prova.get(c))) {
                        b = true;
                        break;
                    }
                }
                if (!b) {
                    prova.add(garage.get(i).getMarca());
                }
                b = false;
    
            }
            int contatore[] = new int[prova.size()];
            for (int i = 0; i < prova.size(); i++) {
                for (int c = 0; c < garage.size(); c++) {
                    if (prova.get(i).equals(garage.get(c).getMarca())) {
                        contatore[i]++;
                    }
                }
            }
    
            for (int i = 0; i < contatore.length; i++) {
                o += prova.get(i) + "\n         " + contatore[i] + "\n\n";
            }
    
            return o;
    
        }
    
        public String toString() {
            String o = "";
    
            for (int i = 0; i < garage.size(); i++) {
                o += (i + 1) + ") " + garage.get(i).getCodice() + "\n";
            }
    
            return o;
        }
    
    }
    


    Nel main mi sottolinea tutti i metodi, che cosa ho dimenticato di fare/fatto sbagliato? spero mi possiate aiutare
  • Re: Esercizio su programmazione ad oggetti

    Garage è un arraylist che contiene oggetti di tipo Autonoleggio, quindi non puoi applicare i tuoi metodi.
    Devi estrarre ogni oggetto dall'arraylist e a quel punto puoi usarlo.

    Scusa se te lo dico, ma secondo me stai seguendo delle logiche completamente sbagliate.

    Inoltre l'uso smodato di JOptionPane appensantisce di parecchio il programma, usando un normale JFrame potresti lavorare con molto più versatilità e meno dispendio di risorse.
    Inoltre l'uso statico dei metodi nelle main non dico che è sbagliato, ma è poco pratico usarle.
    In più quell'istruzione while (!s.equals("6")) è un ciclo infinito e non appena esprimerai una preferenza userà sempre quell'impostazione.
    Ciao.
  • Re: Esercizio su programmazione ad oggetti

    Farò vedere al profe, grazie comunque
Devi accedere o registrarti per scrivere nel forum
4 risposte