10 svar
220 visningar
Borisgun är nöjd med hjälpen
Borisgun 12 – Fd. Medlem
Postad: 22 dec 2017 18:41

Bläddra fram och tillbaka funktion i en Arraylist

Hej!

Jag vet inte hur jag ska gå tillväga med att visa de index positioner som jag bläddrar igenom i min Arraylist.

Jag har deklarerat instans variablen "int index = 0". Jag har en klass som heter student som ska returnera namn, efternamn och användarnamn för studenter.

Jag får en error på raden "taStudenter.setText(studentArray.get(index));" om att "student" inte kan konverteras till "String".

Så här ser min kod ut: 

private void btnBackMouseClicked(java.awt.event.MouseEvent evt) {
if (index == 0) {
index = studentArray.size() - 1;
taStudenter.setText(studentArray.get(index)); 
index--;
} else {
taStudenter.setText(studentArray.get(index));
index--;
}

}

Min logik var:


om (if) index == 0
index = arraylist.size() - 1
hämta studenten på den index positionen och visa den
räkna ner index med 1 (index--)
annars (else)
hämta studenten på den index positionen och visa den
räkna ner index med 1 (index--)

Hur ska jag gå tillväga med att hämta studenten på den index positionen och visa den? Har jag ens tänkt rätt?

Stokastisk 3597 – Fd. Medlem
Postad: 22 dec 2017 18:44

Problemet är alltså att du inte kan konvertera studentArray.get(index) till en sträng. Vad är det du vill ska visas i taStudenter? Namnet på studenten? Är det namnet som är lagrat i studentArray? Eller vad är lagrat där?

Borisgun 12 – Fd. Medlem
Postad: 22 dec 2017 18:54

I arrayen är det student namn som är lagrade och jag vill att studentens namn ska visas i min textarea (taStudenter) när användaren trycker på bläddra knappen. Det vill säga studenten som ligger på index positionen 0 och sedan 1 och 2, varje gång användaren trycker på bläddra.

Stokastisk 3597 – Fd. Medlem
Postad: 22 dec 2017 18:55

Så är det strängar som är lagrade i studentArray?

Borisgun 12 – Fd. Medlem
Postad: 22 dec 2017 19:00

public class StudenList extends javax.swing.JFrame {

public ArrayList<student> studentArray;

int index = 0;

public StudenList() {
initComponents();

studentArray = new ArrayList<student>();

studentArray.add(new student("Oscar", "Bäck"));
studentArray.add(new student("Karin", "Bowder"));
studentArray.add(new student("Lucas", "Sallomy"));

fylltext();
}

Det här är vad som är lagrat just nu.

Stokastisk 3597 – Fd. Medlem
Postad: 22 dec 2017 19:01

Okej, då är det alltså objekt av typen student som är lagrade i arrayen.

Då måste du hämta ut namnen på studenten på något sätt när du vill presentera den i textfältet. Har du någon metod på klassen student som gör att du kan hämta ut namnet på studenten?

Borisgun 12 – Fd. Medlem
Postad: 22 dec 2017 19:04

Jag har en get metod som hämtar studentens namn, efternamn och användarnamn. Jag får dock inte använda for eller for each loopar för den här uppgiften. Jag får endast använda Iterator.

Stokastisk 3597 – Fd. Medlem
Postad: 22 dec 2017 19:07

Hmm, konstig begränsning, en for each loop är bara ett smidigt sätt att använda iterators på.

Men hursomhelst, du måste ju då ändra raden

taStudenter.setText(studentArray.get(index).getNamnetPåStudenten());

Det är också en bra praxis att försöka att inte upprepa kod. Så den kod du skrivit i början kan skrivas om som

private void btnBackMouseClicked(java.awt.event.MouseEvent evt) { 
if (index == 0) {
index = studentArray.size() - 1;
}

taStudenter.setText(studentArray.get(index).getNamnetPåStudenten());
index--;

}

 

Om du får det att fungera så märker du nog också att det finns en liten brist i logiken.

Borisgun 12 – Fd. Medlem
Postad: 22 dec 2017 19:15

Jag fick det att funka men den bläddrar bara mellan två av mina objekt. Är det den bristande logiken?

Stokastisk 3597 – Fd. Medlem
Postad: 22 dec 2017 19:16

Ja det är bristande logiken. Det första elementet i en array har index 0. Så din koll "if (index == 0)" kollar om man är på första studenten, inte om man har passerat första studenten.

Borisgun 12 – Fd. Medlem
Postad: 22 dec 2017 19:20

"index == -1" borde fixa det. Tusen tack för din hjälp.

Svara Avbryt
Close