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...
Annonceindlæg fra Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
01. december 2008 - 18:51
#1
Lav en HashMap<Integer,Integer> hvor key er det tal og value er antal forekomster.
01. december 2008 - 20:13
#2
hmm - hvad skal jeg skrive på value's plads? jeg har jo 4 forskellige AL ?
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 ?
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); }
01. december 2008 - 21:25
#5
jeg kører med en ældre version af java.. kan ikke skrive generics
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)); }
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.
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....
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))); } }
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 ?
02. december 2008 - 17:19
#11
at argumentet til get skal vaere Integer ikke int
02. december 2008 - 17:20
#12
men du skal jo ikke bruge getFejl metoden - du har en dbHelper !
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(); }
02. december 2008 - 17:46
#14
foran "help.antalfejl1.get(i)", står der jo new Integer, er den så ikke Integer ???
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.
04. december 2008 - 04:25
#16
Er du sikker på at: res.add(Arrays.asList(new Integer[] { help.antalfejl1.get(i) })); ikke virker ?
04. december 2008 - 04:25
#17
Og et svar.
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 ?
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 ????
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
Kurser inden for grundlæggende programmering