RandomOrder

Status
Nicht offen für weitere Antworten.

Moonshine

Mitglied
Hallo,

ich weiß nicht mehr weiter..

also die aufgabe heißt wie folgt:

Man soll ein boolesches Attribut randomOrder anlegen (oke, gemacht)

und dieses Attribut soll angeben, ob die Lieder in der Reihenfolge abgespielt werden, in der sie in der Liste gespeichert sind (LinkedList), wobei nach Erreichen des Listenendes von vorne begonnen wird (RIngstruktur), oder in einer zufälligen Reihenfolge.


Für randomOrder gibt es einen Setter (hab ich auch)

was ich nicht versteh, wie gib ich das mit der Reihenfolge der Lieder an...



Und wie kann man den Index des 'aktuellen' AudioFiles in einem ganzzahligen Attribut angeben??? ^^
 
S

SlaterB

Gast
> und dieses Attribut soll angeben, ob die Lieder in der Reihenfolge
piep

> Und wie kann man den Index des 'aktuellen' AudioFiles
piep

nicht auf wichtige Sachen Bezug nehmen, die noch noch gar nicht erklärt sind, 'die' und 'den' sind da gefährlich, besser 'ein' + 'eine'

richtig lautet es:
"ich habe ein Programm, welches eine Liste von Liedern verwaltet, ..., [viele Zeilen Erklärung] .. wichig ist hierbei auch ein gewisser Index ... [ganz viel Erklärung],
dazu nun folgende Frage ..."

edit: dein Anfang war sogar korrekt
>Man soll ---->ein<---- boolesches Attribut randomOrder anlegen (oke, gemacht)
> und dieses Attribut soll angeben,

------

> wie gib ich das mit der Reihenfolge der Lieder an...

kommt auf den Zugriff auf die Liste an, wenn du den selber programmierst, dann könntest du abhängig von dem boolean entweder nach Lauf-Index gehen oder nach einem zufälligen Index,

wenn die Liste nur an eine fremde Komponente übergeben wird, dann wäre die einzige Möglichkeit für Zufälligkeit,
die Liste zu durchmischen


> den Index des 'aktuellen' AudioFiles in einem ganzzahligen Attribut angeben?

int index = 4;
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 5909

Gast
also diese Beschreibung hilft nicht gerade dir zu helfen. Das einzige was ich daraus ablesen kann ist dass es sich um eine Liste handelt die irgendwie "würfeln" willst und in einer RIngstruktur haben willst.

Um die Liste durchzuwürfeln kannst du z.B. Collections.shuffle(list) nutzen

eine ringstruktur ist einfach

[highlight=java]
// LinkedRingList.java
// Project: util
// Author: Liar
// 30.04.2008 21:16:25

package de.mas.util.collections;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.NoSuchElementException;

/**
* @author Liar
*/
public class LinkedRingList<E> extends LinkedList<E> {

private static final long serialVersionUID = -25374615113953969L;


/* (non-Javadoc)
* @see java.util.AbstractSequentialList#iterator()
*/
@Override
public Iterator<E> iterator() {
return new Iterator<E>() {

Iterator<E> iter = listIterator();

@Override
public boolean hasNext() {
return !isEmpty();
}

@Override
public E next() {
if ( isEmpty() ) {
throw new NoSuchElementException();
}
if ( !iter.hasNext() ) {
iter = listIterator();
}
return iter.next();
}

@Override
public void remove() {
iter.remove();
}

};
}

}

[/highlight]
 

Moonshine

Mitglied
Hallo,
also nach der Reihe nach.

Es existieren schon verschiedene Klassen, darunter die AudioFile-Klasse.

Nun hab ich eine Klasse PlayList angelegt, die von LinkedList (import java.util.LinkedList) abgeleitet ist.

Die LinkedList soll so parametrisiert werden, dass die PlayList NUR AudioFiles enthalten kann..

Ein ganzzahliges Attribut current gibt den Index des aktuellen AudioFiles an. Für dieses Attribt gibt es einen Getter und einen Setter.
Die Methode getCurrentAudioFile gibt das aktuelle AudioFile zurück. Ist die Abspielliste leer, so wird null zurückgegeben.

Ein boolesches Attribt randomOrder, gibt an,ob die Lieder in der Reihenfolge abgespielt werden, in der sie in der Liste gespeichert sind, wobei nach Erreichen des Listenendes von vorne begonnen wird (RIngstruktur) oder in einer zufälligen Reihenfolge. Für randomOrder gibt es einen Setter.



bis jetzt hab ich halt:
Java:
...

public class PlayList extends LinkedList<AudioFile>{

private int current



public int getCurrent() {
            return current;
        }

        public void setCurrent(int current) {
            this.current = current;
        } 
        public String getCurrentAudioFile(){


 }
           
        
        
        
        private boolean randomOrder;
 
G

Gelöschtes Mitglied 5909

Gast
das ist imo ein denkfehler: der player sollte den aktuellen track kennen, die liste nicht. SIe ist nur eine dumme liste.
Und dann musst du imo auch keine ableitung von der LinkedList machen sondern nimmst eine normale. Wenn du zufallswiedergabe haben willst verwende Collections.shuffle(). DIe Ringstruktur kannst du wie oben sehr einfach erhalten. Als repeat funktion kannst du noch sowas machen:

[highlight=java]
public class LinkedRingList<E> extends LinkedList<E> {

private static final long serialVersionUID = -25374615113953969L;

private boolean repeat = true;

/*
* (non-Javadoc)
*
* @see java.util.AbstractSequentialList#iterator()
*/
@Override
public Iterator<E> iterator() {
if ( !repeat ) return listIterator();
return new Iterator<E>() {

Iterator<E> iter = listIterator();

@Override
public boolean hasNext() {
return !isEmpty();
}

@Override
public E next() {
if ( isEmpty() ) {
throw new NoSuchElementException();
}
if ( !iter.hasNext() ) {
iter = listIterator();
}
return iter.next();
}

@Override
public void remove() {
iter.remove();
}

};
}

public boolean isRepeat() {
return repeat;
}

public void setRepeat( boolean repeat ) {
this.repeat = repeat;
}

}
[/highlight]


oder du machst bei random immer sowas:

list.get((int) (Math.random() * list.size() - 1));
 

Landei

Top Contributor
Collections.shuffle ist besser, bei random bekommst du u.U. dasselbe Lied zweimal hintereinander.

OT: Ich verstehe nicht, wieso sich Leute immer noch mit Math.random rumquälen, wo Random.nextInt etc. viel bequemer ist...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben