Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Java || Array

  1. #1

    Java || Array

    Salve, ho un piccolo problema… Dunque sto studiando Java da poche settimane e per memorizzare bene il tutto associo sempre esercizi pratici.

    Sto creando un piccolo JukeBox che mi permetta di memorizzare alcune canzoni da 3 classi (Canzone Italiana, Canzone Straniera, Inno Nazionale), in ognuna di queste classi ho creato il metodo costruttore. Ovviamente ognuna delle classi ha delle variabili diverse. Ora in una classe principale col metodo main, ho creato l’oggetto da ogni singola classe inizializzando direttamente l’oggetto grazie al metodo costruttore. Però vorrei che questi 3 oggetti vengano memorizzati all’interno di un array creato in un’altra classe, ma non ho la piu’ pallida idea di come si possa fare.

    Supponiamo che ho creato 3 classi:

    Public class CanzoneItaliana{

    public String nome;
    public String cognome;

    }

    Public class CanzoneStraniera{

    public String nome;
    public String lingua;

    }

    Public class InnoNazionale{

    public String nazione;
    public String durata;
    }

    Poi nella classe Principal ecol metodo main ho creato i seguenti oggetti:

    Public class Principale{

    CanzoneItaliana oggetto1 = new CanzoneItaliana(inizializzo le variabili);
    CanzoneStraniera oggetto2 = new CanzoneStraniera(inizializzo le variabili);
    InnoNazionale oggetto3 = new InnoNazionale(inizializzo le variabili);


    p.s

    Ovviamente le variabili le ho inizializzate così in quanto ho dichiarato il metodo costruttore in ogni classe.
    }

    Ora il problema sta in questo, ho creato un’altra classe JukeBox e ho inserito un arrey

    Canzone[]nome = new Canzone[3];

    Come faccio a memorizzare in questo arrey le variabili della classe CanzoneItaliana, della classe CanzoneStraniera, della classe InnoNazionale?

    nome[0]= cosa:P?...

    Insomma vorrei proprio che in

    Nome[0] mi memorizzasse l’oggetto con le variabili inizializzate della classe Canzone Italiana
    Nome[1] mi memorizzasse l’oggetto con le variabili inizializzate della classe Canzone Straniera
    Nome[2] mi memorizzasse l’oggetto con le variabili inizializzate della classe InnoNazionale


    Grazie in anticipo.

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

    Re: Java || Array

    Originariamente inviato da PiccoloMago
    Ora il problema sta in questo, ho creato un’altra classe JukeBox e ho inserito un arrey

    Canzone[]nome = new Canzone[3];

    Come faccio a memorizzare in questo arrey le variabili della classe CanzoneItaliana, della classe CanzoneStraniera, della classe InnoNazionale?
    La questione è che le 3 classi che hai scritto non hanno nulla in "comune", se non per l'unico fatto che tutte derivano da Object.

    Quindi al limite uno potrebbe fare:

    Object[] canzoni = new Object[3];
    canzoni[0] = new CanzoneItaliana (....);
    canzoni[1] = new CanzoneStraniera (....);
    ....

    Ma ovviamente ti sarebbe ben poco utile.

    Devi sfruttare l'ereditarietà e il polimorfismo. Realizza una piccola gerarchia di classi dove c'è una classe "base" (es. Canzone) e una serie di sotto-classi (es. CanzoneItaliana ecc....).
    E se vuoi sfruttare bene queste cose, dovresti mettere nella classe base le proprietà che sono comuni (es. la "durata" la puoi mettere nella classe base Canzone) e poi man mano nelle sotto classi "specializzare" il comportamento, aggiungendo anche proprietà più specifiche.

    P.S. Ah, dovresti "incapsulare" meglio i dati: le variabili di istanza dovrebbero essere 'private', non 'public' e dovresti mettere dei metodi "getter" ed eventualmente "setter" (se vuoi che lo stato sia "mutabile").
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    ...

    intanto grazie della risposta andbin ^^, volevo dirti che io ho già eseguito l'ereditarietà, e ora ti spiego per bene lo script.

    //Questa è la classe principale

    public class Canzone{

    private String titolo;

    }

    e poi ho creato le altre classi

    public class CanzoneItaliana extends Canzone{

    private string nome;
    private string cognome;


    }

    stessa cosa ho fatto con :

    public class CanzoneStraniera extends Canzone{

    private string nome;
    private string cognome;
    private string lingua;

    }

    public class InnoNazionale {

    private string nazione;
    private string durata;

    }

    ovviamente in ogni classe ho eseguito l'incapsulamento e ho dichiarato un metodo dettagli() che mi torna il nome, il cognome etc...

    ora l'array l'ho creato nella classe Canzone quindi per memorizzare come faccio?

    Canzone[]canzoni = new Canzone[3]
    canzoni[0] = new CanzoneItaliana(nome,cognome);
    canzoni[1] = new CanzoneStraniera(nome,cognome,lingua);
    canzoni[2] = new InnoNazionale(nazione, durata);

    cos'i?

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

    Re: ...

    Originariamente inviato da PiccoloMago
    un metodo dettagli() che mi torna il nome, il cognome etc...
    Il ritorno di un String che fornisce una rappresentazione "testuale" dell'oggetto, è il compito del metodo toString(). Non inventarti altri metodi (se non ci sono motivi particolari). Fai l'override di toString().
    E comunque dovresti mettere i getter (/setter) per ogni singola proprietà.

    Originariamente inviato da PiccoloMago
    ora l'array l'ho creato nella classe Canzone quindi per memorizzare come faccio?

    Canzone[]canzoni = new Canzone[3]
    canzoni[0] = new CanzoneItaliana(nome,cognome);
    canzoni[1] = new CanzoneStraniera(nome,cognome,lingua);
    canzoni[2] = new InnoNazionale(nazione, durata);
    Le prime 2 assegnazioni sono ok. Ma InnoNazionale estende Canzone??? Perché nel codice sopra non hai usato extends ....
    Se InnoNazionale estende Canzone, ovviamente è ok come assegnazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    ....

    si si ^^ anche InnoNazionale estende Canzone, in poche parole canzone ha una variabile "titolo" che sarà presente in tutte e tre le classi^^

    per quanto riguarda i get e set li ho già messi nell'incapsulamento era per non scrivere tutto il codice^^.

    Tuttavia però, nel momento in cui faccio:

    Canzone[]canzoni = new Canzone[3]
    canzoni[0] = new CanzoneItaliana(nome,cognome);
    canzoni[1] = new CanzoneStraniera(nome,cognome,lingua);
    canzoni[2] = new InnoNazionale(nazione, durata);

    Mi dice ad ogni singolo spazio dell'arrey di creare la classe nome, la classe cognome e così via...

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.