Avatar billede touel Nybegynder
01. december 2008 - 18:41 Der er 19 kommentarer og
1 løsning

Trække data fra ArrayList

jeg har fire Arraylist som består af forskellige værdier, såsom 1,2,3 etc....

jeg vil gerne køre disse fire AL, og se at hvis eks. 1 er med i alle fire, så skal der tælles hvor mange gange den er med i dem og udskrive en værdi for det. Ligeledes skal der søges efter hvor mange gange 2 kan findes i disse AL, etc....

Jeg vedlægger kode og viser også det output jeg får fra det... Output er forskellig hvergang.



public void setHistogram()
    {
        db = new database();
        help = new dbHelper();
        AL = new ArrayList();

        for(int i=0;i<help.fejl0.size();i++)
        {
            System.out.println("Arraylist fejl0: "+help.fejl0.get(i));
            t0++;
        }
        for(int i=0;i<help.fejl1.size();i++)
        {
            System.out.println("Arraylist fejl1: " +help.fejl1.get(i));
            t1++;
        }
        for(int i=0;i<help.fejl2.size();i++)
        {
            System.out.println("Arraylist fejl2: "+help.fejl2.get(i));   
            t2++;
        }
        for(int i=0;i<help.fejl3.size();i++)
        {
            System.out.println("Arraylist fejl3: "+help.fejl3.get(i));
            t3++;
        }
    }

output:
Arraylist fejl0: 1
Arraylist fejl2: 1
Arraylist fejl3: 1

Ex, her ses det at i 3 AL er et tallet gentaget 3 gange, og udskriver dermed 3 på skærmen...


output:
Arraylist fejl1: 2
Arraylist fejl1: 1
Arraylist fejl1: 1
Arraylist fejl1: 2
Arraylist fejl1: 1

Ex, her er et tallet gentaget 3 gange og 2 tallet gentaget 2 gange. Så der burde udskrives 3 og 2...
Avatar billede arne_v Ekspert
01. december 2008 - 18:51 #1
Lav en HashMap<Integer,Integer> hvor key er det tal og value er antal forekomster.
Avatar billede touel Nybegynder
01. december 2008 - 20:13 #2
hmm -  hvad skal jeg skrive på value's plads? jeg har jo 4 forskellige AL ?
Avatar billede touel Nybegynder
01. december 2008 - 20:54 #3
jeg prøver mig frem med en AL.

HashMap hashtabel = new HashMap();

for(int i=0;i<10;i++)
{
  hashtabel.put(new Integer(j),new Integer(help.fejl0.get(j)) );
}

1. spg her. Under value, er det sidste stadig et Object, hvordan får jeg den til at blive Integer ?
Avatar billede arne_v Ekspert
01. december 2008 - 21:13 #4
HashMap<Integer,Integer> hashtabel = new HashMap<Integer,Integer>();

og inden i dine for loekker:

if(hashtabel.contains(help.fejlx.get(i)) {
  hashtabel.put(help.fejlx.get(i), hashtabel.get(help.fejlx.get(i))++);
} else {
  hashtabel.put(help.fejlx.get(i), 1);
}
Avatar billede touel Nybegynder
01. december 2008 - 21:25 #5
jeg kører med en ældre version af java.. kan ikke skrive generics
Avatar billede arne_v Ekspert
01. december 2008 - 21:28 #6
HashMap hashtabel = new HashMap();

og inden i dine for loekker:

if(hashtabel.contains(help.fejlx.get(new Integer(i))) {
  hashtabel.put(help.fejlx.get(new Integer(i)), new Integer(((Integer)hashtabel.get(help.fejlx.get(new Integer(i)))).intValue()++));
} else {
  hashtabel.put(help.fejlx.get(new Integer(i)), new Integer(1));
}
Avatar billede arne_v Ekspert
01. december 2008 - 21:29 #7
Der er nok gaaet ged i parenteserne. Men du skal caste til Integer ved get
og manuelt konvertere mellem Integer og int.
Avatar billede touel Nybegynder
01. december 2008 - 22:36 #8
melder pas arne... tror ikke jeg har forstået hvad du har skrevet i det sidste.

get metoden skal returnere en int, men klager pt. over at den har fået Integer værdi i sig. Skal konverteringen fra Integer til int ske i get's parenteser, eller efter det ?

og hvordan skal det gøres....
Avatar billede arne_v Ekspert
02. december 2008 - 04:50 #9
Prøv og kør dette lille eksempel og studer det så bagefter:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FejlAntal {
    public static List getFejl() {
        List res = new ArrayList();
        res.add(Arrays.asList(new Integer[] { new Integer(1) }));
        res.add(Arrays.asList(new Integer[] { new Integer(2) }));
        res.add(Arrays.asList(new Integer[] { new Integer(1), new Integer(3) }));
        res.add(Arrays.asList(new Integer[] { new Integer(1), new Integer(3) }));
        return res;
    }
    public static void main(String[] args) {
        List fejl = getFejl();
        Map antal = new HashMap();
        for(int i = 0; i < fejl.size(); i++) {
            List fejlx = (List)fejl.get(i);
            for(int j = 0; j < fejlx.size(); j++) {
                Integer val = (Integer)fejlx.get(j);
                System.out.println("fejl" + i + ": " + val);
                if(antal.containsKey(val)) {
                    Integer tmp = (Integer)antal.get(val);
                    antal.put(val, new Integer(tmp.intValue() + 1));
                } else {
                    antal.put(val, new Integer(1));
                }
            }
        }
        System.out.println("1'ere : " + antal.get(new Integer(1)));
        System.out.println("2'ere : " + antal.get(new Integer(2)));
        System.out.println("3'ere : " + antal.get(new Integer(3)));
    }
}
Avatar billede touel Nybegynder
02. december 2008 - 16:56 #10
res.add(Arrays.asList(new Integer[] {new Integer(help.antalfejl1.get(i)) }));

På "help.antalfejl1.get(i)", siger den "cannot invoke get(int) on the primitive type

int". Hvad betyder det ?
Avatar billede arne_v Ekspert
02. december 2008 - 17:19 #11
at argumentet til get skal vaere Integer ikke int
Avatar billede arne_v Ekspert
02. december 2008 - 17:20 #12
men du skal jo ikke bruge getFejl metoden - du har en dbHelper !
Avatar billede touel Nybegynder
02. december 2008 - 17:44 #13
jeg har taget udpluk fra min Histogram klasse, som indeholder dette kode:

public void setHistogram()
    {
       
        List fejl = histo.getFejl();
            Map antal = new HashMap();
            for(int i = 0; i < fejl.size(); i++) {
                List fejlx = (List)fejl.get(i);
                for(int j = 0; j < fejlx.size(); j++) {
                    Integer val = (Integer)fejlx.get(j);
                    System.out.println("fejl" + i + ": " + val);
                    if(antal.containsKey(val)) {
                        Integer tmp = (Integer)antal.get(val);
                        antal.put(val, new Integer(tmp.intValue() + 1));
                    } else {
                        antal.put(val, new Integer(1));
                    }
                }
            }
            System.out.println("0'ere : " + antal.get(new Integer(0)));
            System.out.println("1'ere : " + antal.get(new Integer(1)));
            System.out.println("2'ere : " + antal.get(new Integer(2)));
            System.out.println("3'ere : " + antal.get(new Integer(3)));
            System.out.println("4'ere : " + antal.get(new Integer(4)));
       
    }
   
    public static List getFejl(){
       
        List res = new ArrayList();
        dbHelper help = new dbHelper();
        database db = new database();
       
        for(int i=0;i<help.fejl0.size();i++)
        {
            res.add(Arrays.asList(new Integer[] { new Integer((Integer.parseInt(help.antalfejl0.get(i).toString()))) }));
            System.out.println("res er 0: " + res.get(i));
    }
        for(int i=0;i<help.fejl1.size();i++)
        {
           
            res.add(Arrays.asList(new Integer[] { new Integer((Integer.parseInt(help.antalfejl1.get(i).toString()))) }));
            System.out.println("res er 1: " + res.get(i));
        }
        for(int i=0;i<help.fejl2.size();i++)
        {
            res.add(Arrays.asList(new Integer[] { new Integer((Integer.parseInt(help.antalfejl2.get(i).toString()))) }));
            System.out.println("res er 2: " + res.get(i));
        }
        for(int i=0;i<help.fejl3.size();i++)
        {
            res.add(Arrays.asList(new Integer[] { new Integer((Integer.parseInt(help.antalfejl3.get(i).toString()))) }));
            System.out.println("res er 3: " + res.get(i));
        }
       
        System.out.println(help.fejl+" Til sidst.");
        System.out.println("Bruger lig med: " + db.bruger);
       
        return res;
    }
   
   
    public static void main(String[] args) {
       
        Histogram histo=new Histogram();
        histo.setHistogram();
       
     
    }
Avatar billede touel Nybegynder
02. december 2008 - 17:46 #14
foran "help.antalfejl1.get(i)", står der jo new Integer, er den så ikke Integer ???
Avatar billede touel Nybegynder
04. december 2008 - 01:45 #15
du må gerne lægge svar.

Jeg fik løst problemet ved at tilføje toString() for enden af get(i):

res.add(Arrays.asList(new Integer[] {new Integer(help.antalfejl1.get(i)) }));

dvs. lavet det om til String, som også er en af Integers constructor.
Avatar billede arne_v Ekspert
04. december 2008 - 04:25 #16
Er du sikker på at:

res.add(Arrays.asList(new Integer[] { help.antalfejl1.get(i) }));

ikke virker ?
Avatar billede arne_v Ekspert
04. december 2008 - 04:25 #17
Og et svar.
Avatar billede touel Nybegynder
04. december 2008 - 15:48 #18
Hvis jeg skriver det som du spørger om, kommer der fejl med at: Type mismatch.. Den kan ikke konvertere fra Object til Integer.... Men det gider jeg ikke at bruge mere tid på nu, fordi det virker på den anden måde.

Lige en sidste ting arne. Under dit kode eks fra "02/12-2008 04:50:21" De værdier som Map antal får tildelt, jeg prøver at udskrive dem via en for løkke, men den gider ikke at udskrive dem alle.

Tager man udgangspunkt i dit eks, så fås svaret:

1'ere : 3
2'ere : 1
3'ere : 2

jeg har tilføjet følgende kode efter system.out.println() linierne:

for(int i=0;i<antal.size();i++)
            {
                if(antal.get(new Integer(i))==null)
                {
                    antal.remove(new Integer(i));
                }
               
               
                if(antal.containsKey(new Integer(i))&& new Integer(i)!=null)
                {   
                    System.out.println("antal er: " + antal.get(new Integer(i)) + " antal.size " + antal.size());
                }

            }

hvortil jeg får svar:

antal er: 3 antal.size 3
antal er: 1 antal.size 3

dvs, den tager ikke det linie "3'ere : 2" med. Why ?
Avatar billede touel Nybegynder
04. december 2008 - 16:30 #19
Synes egentlig det er mærkelig, at der overhovedet ikke er andre, som kommer med

forslag, når man skriver inde på eksperten.dk...

Jeg oplever sjældent at andre besvarer mine spg ????
Avatar billede touel Nybegynder
04. december 2008 - 17:40 #20
problem solved.... mig dum igen og igen..

Når jeg har med Map og gøre, skulle jeg selvfølgelig bruge Iterator og ikke en alm for løkke....

Mange tak for hjælpen
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