[Java] Arraylist help

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,
sinds een tijdje ben ik bezig met Java.
maar nu heb ik alleen een probleem met een ArrayList, deze list



public class Oefening0706 {
public static void main(String[] args) {
Voorraad voorraad = new Voorraad();

voorraad.voegtoe( new Artikel( "Netbook", 9 ) );
voorraad.voegtoe( new Artikel( "Printer", 8 ) );

voorraad.print();
}
}



maar probeer ik dit te orderen op het aantal, dus waar het minst van zijn (in dit geval de printers (8 stuks)) dat deze boven aan in de lijst komt.
Maar alleen kom ik er niet uit, is er iemand die hier mee kan helpen?

Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Ik zal maar alvast zeggen wat anderen zouden gaan zeggen:
gebruik [code=java] [/code] tags om je code heen
wat heb je zelf al geprobeerd?

Kijk eens naar Collections.sort().

[ Voor 4% gewijzigd door Macros op 18-11-2009 11:45 ]

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • Standeman
  • Registratie: November 2000
  • Laatst online: 18:13

Standeman

Prutser 1e klasse

Verwijderd schreef op woensdag 18 november 2009 @ 11:33:
Hallo,
sinds een tijdje ben ik bezig met Java.
maar nu heb ik alleen een probleem met een ArrayList, deze list



public class Oefening0706 {
public static void main(String[] args) {
Voorraad voorraad = new Voorraad();

voorraad.voegtoe( new Artikel( "Netbook", 9 ) );
voorraad.voegtoe( new Artikel( "Printer", 8 ) );

voorraad.print();
}
}



maar probeer ik dit te orderen op het aantal, dus waar het minst van zijn (in dit geval de printers (8 stuks)) dat deze boven aan in de lijst komt.
Maar alleen kom ik er niet uit, is er iemand die hier mee kan helpen?
Daarvoor moet je een comparator implementeren en kan je via Collections.sort() de lijst sorteren.

Je kan je class Artikel ook comparable laten implementeren.

The ships hung in the sky in much the same way that bricks don’t.


Verwijderd

Topicstarter
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Arrays;

class Person implements Comparable<Person> {
  public Person(String firstName, String surname) {
    this.firstName = firstName;
    this.surname = surname;
  }
  public String toString() {
    return firstName + " " + surname;
  }
  public int compareTo(Person person) {
    int result = surname.compareTo(person.surname);
    return result == 0 ? firstName.compareTo(((Person) person).firstName) : result;
  }
  private String firstName;
  private String surname;
}
public class MainClass {
  public static void main(String[] args) {
    Person[] authors = { new Person("A", "B"), 
                         new Person("C", "D"),
                         new Person("E", "F"), 
                         new Person("Z", "Y"),
                         new Person("X", "T"), 
                         new Person("O", "R") };
    Arrays.sort(authors);
    System.out.println("\nThe cast is ascending sequence is:\n");
    for (Person person : authors) {
      System.out.println(person);
    }
  }
}


Ja zo iets zou ik kunnen doen, maar dan heb ik zeg maar niet met artikel en aantal op voorraad, maar dat lukt mij maar niet :( ik krijg het maar niet voor elkaar.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Wat lukt niet? Je post daarboven een prachtig voorbeeld van een implementatie van een compareTo methode. Wat heb je geprobeert om je artikel class zo aan te passen dat deze ook de comparable interface juist implementeerd?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
haha nouu kijk,
je hebt dus het artikel met een aantal erachter..
nu wil ik hetgene met het minste aantal dat die boven aan komt te staan.
volgens de hierboven gegeven antwoorden moet dat met de "Collections.sort()."
maar daar kom ik echt niet uit :O

Java:
1
2
3
4
5
6
7
8
9
10
11
12
public class Artikel {
  private String Omschrijving;
  private int Aantal;

  public Artikel( String Omschrijving, int Aantal ) {
    this.Omschrijving = Omschrijving;
    this.Aantal = Aantal;
  }
  public String toString() {
    return String.format( "%-40s  Aantal: %4d", Omschrijving, Aantal );
  }
}

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Oefening 0706
public class Oefening0706 {
  public static void main(String[] args) {
    Voorraad voorraad = new Voorraad();

    voorraad.voegtoe( new Artikel( "Netbook", 9 ) );
    voorraad.voegtoe( new Artikel( "Printer", 8 ) );
    voorraad.voegtoe( new Artikel( "Monitor", 10 ) );
    voorraad.voegtoe( new Artikel( "Videokaart", 12 ) );
    voorraad.voegtoe( new Artikel( "Scanner", 4 ) );
    voorraad.voegtoe( new Artikel( "Geheugen", 3 ) );
    voorraad.voegtoe( new Artikel( "Toetsenbord", 13 ) );
    voorraad.voegtoe( new Artikel( "Muis", 14 ) );

    Collections.sort(Voorraad);
    voorraad.print();

  System.out.println("De lijst gesorteerd op numerieke volgorde :");
  System.out.println("");

  }
}

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.*;

public class Voorraad {
  private ArrayList<Artikel> lijst;

  public Voorraad() {
    lijst = new ArrayList<Artikel>();
  }

  public void voegtoe( Artikel artikel ) {
    lijst.add( artikel );
  }

  public void print() {
    System.out.println( "Voorraad" );
        System.out.println( "" );
        System.out.println( "" );
    for( Artikel artikel : lijst ) {
    System.out.println( artikel );
        System.out.println( "" );
    }
  }
}

dat zijn de 3 bestanden die ik gebruik.

en nu moet er dus een lijst komen waarbij degene met het minst aantal (geheugen in dit geval) boven aan komt.

  • Standeman
  • Registratie: November 2000
  • Laatst online: 18:13

Standeman

Prutser 1e klasse

Java:
1
2
   Collections.sort(Voorraad);
      voorraad.print(); 

Je probeert een instance van de class Voorraad te sorteren, maar dat is helemaal geen object dat de List interface implementeerd. Ik neem aan dat dit ook niet compiled.
Je wilt het attribuut lijst in het object voorraad sorteren. Dus daar moet je dus ook wat mee doen.

Kijk nou eens goed naar het Person voorbeeld wat je zelf eerder heb gegeven en probeer uit te vogelen hoe dat nou precies werkt.

[ Voor 14% gewijzigd door Standeman op 19-11-2009 15:39 ]

The ships hung in the sky in much the same way that bricks don’t.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmm..
nu ben ik wel een stap verder maar heb ik nog een probleem, namelijk het getal "4" staat onder "14" bijvoorbeeld. Dit klopt echter niet echt, weet iemand hier raad mee?

Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
Dat is omdat je een stringbased compare doet. De getallen eerst casten naar int (of float/double) en dan vergelijken zal dit oplossen.
Pagina: 1