2013-07-31 10 views
11

Ho bisogno di aiuto con una domanda sui compiti a cui sto lavorando. Ho bisogno di creare una classe "Libreria" che contenga una serie di oggetti Song (capacità di 10). Quindi creare un metodo addSong. Ecco quello che ho finora:Riempimento di un array con oggetti

public class Library{ 

    Song[] arr = new Song[10]; 

    public void addSong(Song s){ 
     for(int i=0; i<10; i++) 
      arr[i] = s; 
    } 
} 

La mia domanda è: C'è un altro modo per riempire la matrice? in seguito avrò bisogno di cercare una canzone basata su un valore di indice. Quindi creerò un metodo come: canzone pubblica getSong (int idx) Grazie in anticipo per le vostre risposte!

+0

Il vostro istruttore consentono di utilizzare ArrayLists? – hexafraction

+7

Non stai "aggiungendo" canzoni lì, stai sostituendo tutto il contenuto dell'array (voglio dire, rendendo tutti e 10 gli elementi della stessa canzone). Prova ad usare ArrayList, è meglio che farlo "fatto a mano". –

+0

-1 mancanza di impegno, mancanza di chiarezza. – Ankit

risposta

4

Se si hanno veramente a utilizzare un array (e non un ArrayList o LinkedList), questa soluzione può essere il giusto per voi:

public class Library{ 

    private Song[] arr = new Song[10]; 
    private int songNumber = 0; //the number of Songs already stored in your array 

    public void addSong(Song s){ 
     arr[songNumber++] = s; 
    } 
} 

Se si vuole evitare un runtime-exeption se si aggiungono più di 10 canzoni:

public void addSong(Song s){ 
    if(songNumber<10) 
    { 
     arr[songNumber++] = s; 
    }else{ 
     //what to do if more then 10 songs are added 
    } 
} 
+2

Non devi + + songNumber e controlla se è <10 – Chaos

+0

Ovviamente, l'ho completamente dimenticato. – cdMinix

+1

Penso che lo stesso 'songNumber ++' valga per l'opzione metodo alternativo – Smit

1

Utilizzare un ArrayList anziché un array. In questo modo è possibile utilizzare la funzione ArrayList.add() da aggiungere alla fine dell'array e la funzione ArrayList.get(int index) per ottenere la voce dell'array all'indice index.

public class Library{ 

    ArrayList<Song> arr = new ArrayList<Song>(); 

    public void addSong(Song s){ 
     arr.add(s); 
    } 

    public Song getSong(int index){ 
     return arr.get(index); 
    } 
} 
2

Ci sono diversi modi per farlo.

La logica che stai utilizzando è più o meno ok.

Ma quello che state facendo qui:

public void addSong(Song s){ 
    for(int i=0; i<10; i++) 
     arr[i] = s; 
} 

sta riempiendo tutta la matrice canzoni con la stessa canzone, forse questo sarebbe meglio:

public void addSong(Song s, int index){ 
     arr[index] = s; 
} 

Naturalmente, se si passa un negativo indice, o un indice superiore a 9, sarai nei guai.

+1

Poiché questa è una libreria, non vorrai richiedere all'utente di specificare la posizione per aggiungere la canzone. – sdamashek

+1

@ Vacation9 ha ragione, penso che dovremmo mantenere un indice intero privato per tenere traccia della prossima posizione dell'array – Chaos

+0

@ Vacation9 Vedo dove stai andando, sì non dovrebbe, e il consiglio del caos è buono. – jsedano

0

Per espandere sulla risposta Vacation9s':

ArrayList<Song> songArray = new ArrayList<Song>(); 

public void addSong(Song s){ 
    songArray.add(s); 
} 
+0

Non puoi usare arrayList. Spiacente, dovrei aver menzionato nell'OP – DaniFC