Avatar billede suix Nybegynder
20. december 2006 - 13:07 Der er 8 kommentarer og
1 løsning

Optælling af array

Hej eksperter,
Jeg har et array med omkring 1500 elementer, bestående af kommuner. Jeg vil gerne have arrayet 'sorteret', så jeg får hvilke værdier og hvor mange af hver returneret?
Avatar billede cayman Nybegynder
20. december 2006 - 14:07 #1
Hej,

Jeg er ikke helt sikker på hvad det er din opgave består i ..

I java er der tradition for at sortere med en Comparator. Det er et sted at starte. Sådan een kan du selv kode, og derved kan du så opsamle data om, hvormange af de 1500 der har hvilke attributter.
Avatar billede kalp Novice
20. december 2006 - 15:44 #2
mere information...

hvilke værdier taler du om... ?

uddyb... du taler alt for indforstået.
Avatar billede cayman Nybegynder
20. december 2006 - 16:53 #3
:o)

Jeg taler ikke om værdier.

Jeg fortæller dig at du er nødt til at sige lidt mere om hvori din opgave består.
Som det er nu, ved jeg ikke andet end at du vil sortere et array, og at du vil have talt dine objecter op på een eller anden måde..

Og så siger - til din information - at man bruger Comparator klasser når man laver sortering i javaklasser. Comparator er et interface du kan implementere.  Derefter kan du benytte din Comparator til at sortere med:
Collections.sort(list, comparator), hvor "list" er en dit Array oversat til en java.util.List.
Avatar billede mikkelbm Nybegynder
20. december 2006 - 18:00 #4
>> cayman

Mon ikke du forveksler kalp med suix :) ?
Avatar billede kalp Novice
20. december 2006 - 18:15 #5
:o)
Avatar billede suix Nybegynder
20. december 2006 - 21:51 #6
Ok, jeg har et array med kommunenavne ala: Aalborg, Hals, osv. Mange af navnene går igen i arrayet. Jeg vil så gerne have array sorteret, således, at jeg får både værdierne, altså Aalborg, Hals osv, og hvor mange gange de eksisterer i arrayet. Helt specifikt prøver jeg at afbilde arrayet grafisk, med EasyCharts som kræver værdierne som input. Håber I forstår, eller kan jeg godt prøve at forklare bedre...
Avatar billede cayman Nybegynder
21. december 2006 - 08:52 #7
Undskyld - my bad  ..  :o)

Jeg regner med du har følgende klasser:
Kommune kommune. <implements Comparable>
Kommune[] kommunerne.

1. Nu forstår jeg bedre. Jeg tror jeg ville starte med at lave arrayet om til en collection.

List kommuneList = new ArrayList();
kommuneList.addAll(kommunerne);

2. Derefter vil jeg sortere det efter kommunenavne med Comparator-pattern.

En comparator kan se således ud:
public class KommuneComparator implements Comparator {
    public int compare(Object o1, Object o2) {
        Kommune kommune1 = (Kommune)o1;
        Kommune kommune2 = (Kommune)o2;
        return (kommune1.getNavn().compare(kommune2.getNavn()))
    }
}

List sortedKommuneList = Collections.sort(kommuneList, new KommuneComparator());


3. Så vil jeg iterere igennem min sorterede liste med en counter der tæller een op hele tiden.

Hertil ville opfinde en klasse der kunne indeholde både en Kommunne og et tal:
KommuneWrapper kommuneWrapper;

Og en liste til at holde dem i:
List kommuneWrappers = new ArrayList();

String oldName = "";
int counter = 0 ;
for (int i=0; i<sortedKommuneList.size(); i++){
  Kommune kommune = (Kommune)sortedKommuneList.get(i);
  if (!(kommune.getNavn().equals(oldName))){
      kommuneWrappers.add(new KommuneWrapper(kommune, counter));
      counter = 0;
  }
  oldName=kommune.getNavn();
  counter++;
}

4. Så har du en sorteret liste af KommuneWrappers du kan bruge ..

Det er pseudokode, og ikke hverken kompileret ekker testet :)
Avatar billede suix Nybegynder
23. februar 2007 - 20:16 #8
Jeg har gjort det på en lidt anden måde:
public void sort (Vector dataGF,Vector ugeregisGF)
    {
        Collections.sort(ugeregisGF);
        Collections.sort(dataGF);
        if (kommunerCB.isSelected())
        {
            int tal = 0;

            for (int i = 1; i < dataGF.size(); i++) {
                if (dataGF.get(i).equals(dataGF.elementAt(i - 1))) {
                    tal++;
                } else {
                    count.add("" + tal);
                    data.add(dataGF.elementAt(i).toString());
                    tal = 0;
                }
            }
        }
        if (ugeregisGF.size()>0)
        {
            int tal = 1;
            for (int i = 1; i < ugeregisGF.size(); i++) {
                if (ugeregisGF.get(i).equals(ugeregisGF.elementAt(i - 1))) {
                    tal++;
                }
                else
                {
                    count.add("" + tal);
                    data.add(ugeregisGF.elementAt(i).toString());
                    tal = 1;
                }
            }
            barchart();
        }
Nu er data'en korrekt sorteret i de 2 vectorer, nemlig kommunenavn, og antal gange de er angivet. Nu vil jeg gerne have dem over i Easycharts, som tager en double og streng-array som input.

public void cirkel()
    { 
        double[] sampleValues = new double[] {40,3000,1000};
        Color[] sampleColors = new Color[] {new Color(0xcead9c), new Color(0x9c8400), new Color(0xadc694), new Color(0xcecece), new Color(0xe7ce6b)};
        PieChart chart = new PieChart();
        chart.setSampleCount(5);
        chart.setSampleValues(0,sampleValues);
        chart.setSampleLabels(new String[] {"Aalborg\n","Hjørring\n","Brønderslev\n","Thisted\n","Læsø\n"});
        chart.setSampleLabelsOn(true);
        chart.setSampleLabelStyle(Chart.OUTSIDE);
        chart.setPercentLabelsOn(true);
        chart.setPercentLabelStyle(Chart.OUTSIDE);
        chart.setFont("outsideLabelFont", new Font("Arial", Font.BOLD, 11));
        chart.setSampleColors(sampleColors);
        chart.setSliceSeperatorColor(Color.white);
        chart.set3DModeOn(true);
        chart.setDepth(0.12);
        chart.setAngle(55);
        chart.setPieRotationOn(true);
        chart.setBackground(Color.white);
        com.objectplanet.chart.NonFlickerPanel p = new com.objectplanet.chart.NonFlickerPanel(new BorderLayout());
        kommunerP.add("Center", chart);
    }
Håber der er en der kan hjælpe her, så det bliver dynamiske værdier i vectorerne og ikke de statiske der i forvejen er angivet.
Avatar billede suix Nybegynder
03. juli 2008 - 11:49 #9
Det er løst.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester