Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] dom ande sui sorgenti

    Salve a tutti!
    In preparazione di un test su java mi sono creato un oiccolo esercizio x tenermi in allenamento con la programmazione....

    Praticamente si ha una un base (classe Station) ceh contiene un ArrayList di calcolatori (classe Calcoltare) i quali svolgono funzioni matematiche e lementari, il tutto corredato da una piccola interfaccai grafica.
    Posto innanzi tutto i sorgenti:


    public class Calcolatore implements Serializable {
    private String nome;
    private int primo;
    private int secondo;
    private int terzo;
    private static final long serialVersionUID=45L;
    public Calcolatore (int primo, int secondo,int terzo,String nome)
    {
    this.primo=primo;
    this.secondo=secondo;
    this.terzo=terzo;
    this.nome=nome;

    }

    public void sommaFile() throws IOException
    {
    FileWriter w;
    w =new FileWriter("add.txt");
    int a;
    a=primo+secondo+terzo;
    String ris= "Risultato somma: " +a;
    w.write(ris);
    w.flush();
    w.close();

    }


    public String comparaNum(int a, int b)

    {
    if (a==b) return("I valori sono uguali");
    else return("I valori sono diversi");
    }

    public String getNome() {
    return nome;
    }

    public void setNome(String nome) {
    this.nome = nome;
    }

    public int getPrimo() {
    return primo;
    }

    public void setPrimo(int primo) {
    this.primo = primo;
    }

    public int getSecondo() {
    return secondo;
    }

    public void setSecondo(int secondo) {
    this.secondo = secondo;
    }

    public int getTerzo() {
    return terzo;
    }

    public void setTerzo(int terzo) {
    this.terzo = terzo;
    }



    public String toString()
    {
    return "NOME: " + nome + " PRIMO: "+ primo + " SECONDO: "+ secondo + " TERZO: " + terzo;
    }



    }



    public class Station implements Serializable,Cloneable {
    private int code;
    private String name;
    private static final long serialVersionUID=8L;
    ArrayList <Calcolatore> cellula =new ArrayList<Calcolatore>();


    public Station (int code, String name)
    {
    this.code=code;
    this.name=name;
    }



    public int getCode() {
    return code;
    }



    public void setCode(int code) {
    this.code = code;
    }



    public String getName() {
    return name;
    }



    public void setName(String name) {
    this.name = name;
    }

    public void aggiungiCalc(int primo,int secondo,int terzo,String nome)
    {
    Calcolatore alpha=new Calcolatore(primo,secondo,terzo,nome);
    cellula.add(alpha);

    }

    public void printer ()
    {
    for (Calcolatore k:cellula)
    System.out.println(k);
    }


    public Object clone()
    {
    try {

    Station clonato= (Station) super.clone();
    clonato.cellula=((ArrayList<Calcolatore>)cellula.c lone());
    return clonato;
    }
    catch (CloneNotSupportedException r){return null;}



    }

    public void remove(int i)
    {
    cellula.remove(i);
    }

    public void SUM(int i) throws IOException
    {
    cellula.get(i).sommaFile();
    }

    }



    public class MyFrame extends JFrame implements ActionListener {

    ImageIcon ok=new ImageIcon("prova.gif");
    JButton dentro = new JButton("carica");
    JButton confronta = new JButton("Confronta");
    JButton stampa = new JButton("Stampa");
    JButton deser = new JButton("Deserializza");
    JButton ser = new JButton("Serializza");
    JTextField uno = new JTextField("0",5);
    JTextField due = new JTextField("0",5);
    JTextField del = new JTextField("0",5);
    JTextField sum = new JTextField("0",5);
    JTextField addname = new JTextField(5);
    JTextField addfirst = new JTextField("0",5);
    JTextField addsecond= new JTextField("0",5);
    JTextField addterzo = new JTextField("0",5);
    JLabel r=new JLabel ("Risultato: \r\n\r\n");
    JLabel con=new JLabel ("--> Comparazione < --");

    public MyFrame(){
    super("NASA CALCULATOR");
    Container c=getContentPane();

    setSize(555,555);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel pan=new JPanel();
    JPanel pan2=new JPanel();
    JPanel pan3=new JPanel();
    JPanel pan4=new JPanel();
    pan4.setVisible(false);
    c.setLayout(new BorderLayout());
    c.add(pan,BorderLayout.NORTH);
    c.add(pan2,BorderLayout.WEST);
    c.add(pan3,BorderLayout.SOUTH);


    pan2.setLayout(new GridLayout (1,2));
    pan.add(dentro);
    pan.add(sum);
    pan2.add(ser);
    pan3.add(stampa);
    pan3.add(deser);
    pan3.add(del);
    deser.addActionListener(this);
    ser.addActionListener(this);
    dentro.addActionListener(this);
    stampa.addActionListener(this);
    pack();
    setVisible(true);

    /*try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAn dFeelClassName());
    }
    catch (Exception j) {System.out.println("Errore");}
    }
    */
    }



    public void actionPerformed(ActionEvent ev)
    {
    Station orchidea=new Station(9876,"Orchidea_STAT");
    orchidea.aggiungiCalc(34, 90, 8, "NASA1");
    orchidea.aggiungiCalc(1, 2, 3, "NASA2");
    Object puls=ev.getSource();





    //orchidea.aggiungiCalc(12, 5, 8, "NASA2");
    //orchidea.aggiungiCalc(44, 7, 8, "NASA3");
    //Calcolatore k=new Calcolatore (6,5,11,"NASAONE");



    /*if (puls==somma){
    String cap=sum.getText();
    int n=Integer.parseInt(cap);
    try {orchidea.SUM(n);
    JOptionPane.showMessageDialog(null,"File add.txt generato con successo!!");}
    catch (IOException e){System.out.println("Intercettata eccezione: ");}
    }*/


    if (puls==dentro)
    {


    //orchidea.aggiungiCalc(12, 5, 8, "NASA2");
    orchidea.aggiungiCalc(44, 7, 8, "NASA3");
    System.out.println("Oggetti inseriti");

    }

    if (puls==stampa)
    {
    orchidea.printer();

    }





    if (puls==ser)
    {

    FileOutputStream f =null;
    ObjectOutputStream o=null;


    try{
    f= new FileOutputStream ("save.bin");
    o=new ObjectOutputStream(f);
    }
    catch(IOException k ){System.out.println("Intercettata eccezione: ");}

    try{
    o.writeObject(orchidea);
    o.close();

    }

    catch(IOException k ){System.out.println("azzz");}
    System.exit(1);
    }


    if (puls==deser)
    {

    FileInputStream f =null;
    ObjectInputStream o=null;


    try{
    f= new FileInputStream ("save.bin");
    o=new ObjectInputStream(f);
    Station ok=(Station) o.readObject();
    o.close();
    ok.printer();
    }


    catch(InvalidClassException k2 ){System.out.println("Porc1");}
    catch(IOException k3 ){System.out.println("Porc2");}
    catch(ClassNotFoundException k4 ){System.out.println("Porc3");}

    }

    }

    }



    public class Programma {
    public static void main (String [] args)
    {


    MyFrame f= new MyFrame();

    }
    }




    LE MIE DOMANDE SONO:

    1) Nella clase myFrame, la funzione dentro (in neretto) "Dovrebbe" caricarmi nell'arraylist un nuovo calcolatore ivece... non lo fa!!! se invece metto la funzione aggiungiCalc come all'inizio della classe viene aggiunto correttamente!!! Sapete dirmi come mai la funzione dentro non mi carica un tubo??

    2) X esercitarmi su un interfaccia clonable ho provveduto ad implementarla per clonare una nuova stazione, sapete dirmi se semanticamente è giusta la mia rodefinizione di object.clone()??

    Vi ringrazio infinitamenet per le vostre risposte!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Moderazione

    Ho spostato la discussione nel forum dedicato a Java.
    In futuro, poni qui le tue domande relative a questo linguaggio.

    Ho inoltre corretto il titolo per renderlo più significativo riguardo al problema.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] dom ande sui sorgenti

    Originariamente inviato da cavalieredimart
    1) Nella clase myFrame, la funzione dentro (in neretto) "Dovrebbe" caricarmi nell'arraylist un nuovo calcolatore ivece... non lo fa!!! se invece metto la funzione aggiungiCalc come all'inizio della classe viene aggiunto correttamente!!! Sapete dirmi come mai la funzione dentro non mi carica un tubo??
    In actionPerformed() hai creato un nuovo oggetto Station ma ... quando actionPerformed termina, quell'oggetto non è più referenziato, quindi va in pasto al g.c.
    Ehm, forse non è quello che volevi fare ... rivedi il "design".

    Originariamente inviato da cavalieredimart
    2) X esercitarmi su un interfaccia clonable ho provveduto ad implementarla per clonare una nuova stazione, sapete dirmi se semanticamente è giusta la mia rodefinizione di object.clone()??
    In linea di massima è corretto ma nota che:
    - Il return null nel catch non è il massimo. Visto che la tua classe è Cloneable e supporta clone() e la super-classe è Object che sicuramente non lancia CloneNotSupportedException proprio perché la tua classe è clonabile, il CloneNotSupportedException in teoria non "dovrebbe" mai capitare. Se dovesse mai capitare, allora è un errore grave che dovresti segnalare non ritornando null ma lanciando un Error, es. InternalError.

    - Hai un warning per via del "unchecked cast" a ArrayList<Calcolatore> (non lo puoi impedire ... lo puoi sopprimere con una annotazione).

    - Il clone sul ArrayList fa una "shallow copy" ovvero l'ArrayList che ottieni è in effetti un nuovo oggetto, distinto dall'ArrayList originale ma gli elementi fanno riferimento agli stessi identici oggetti della collezione originale. Visto che Calcolatore è "mutabile" se cambi lo stato di un Calcolatore dalla Station clonata, "vedi" la modifica anche dalla Station originale!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.