07. december 2004 - 14:03
Der er
22 kommentarer og 2 løsninger
Returne et noget af et array fra en metode.
Hej igen.. vil gerne have returnet de lige tal ved hjælp af min metode... men den returnere ikke rigtigt alle tallene.. public int[] filter(int[] a, boolean lige) { for(int i = 0; i < a.length; i++) { if(a[i] % 2 == 0) { list.push(new Integer(a[i])); } } b = new int[list.size()]; for(int i = 0; i < list.size(); i++) { b[i] = Integer.parseInt(String.valueOf(list.pop())) ; } return b; }
Annonceindlæg fra Computerworld it-jobbank
07. december 2004 - 14:03
#1
package mypackage2; import java.util.Stack; public class Fiks { int[] b; Stack list = new Stack(); public int[] filter(int[] a, boolean lige) { for(int i = 0; i < a.length; i++) { if(a[i] % 2 == 0) { list.push(new Integer(a[i])); } } b = new int[list.size()]; for(int i = 0; i < list.size(); i++) { b[i] = Integer.parseInt(String.valueOf(list.pop())) ; } return b; } }
07. december 2004 - 14:09
#2
jeg er varm på tasterne i dag! package mypackage2; import java.util.Stack; public class Fiks { int[] b; Stack list = new Stack(); public int[] filter(int[] a, boolean lige) { for(int i = 0; i < a.length; i++) { if(a[i] % 2 == 0) { list.push(new Integer(a[i])); } } int c = list.size(); b = new int[c]; for(int i = 0; i < c; i++) { b[i] = Integer.parseInt(String.valueOf(list.pop())) ; } return b; } } din fejl lå her! b = new int[list.size()]; for(int i = 0; i < list.size(); i++)
07. december 2004 - 14:09
#3
Hvad med: int[] b = new int[a.length/2]; for(int i = 0; i < b.length; i++) { b[i] = a[2*i]; } ?
07. december 2004 - 14:11
#4
Eller: int[] b = new int[a.length/2]; for(int i = 0; i < b.length; i++) { b[i] = a[2*i + (lige?0:1)]; }
07. december 2004 - 14:13
#5
har lært svært ved at forstå de kodestumper... virker de? ser på denne bla. int[] b = new int[a.length/2]; b bliver halv så stor som a.. men hvad hvis de så er brug for flere pladser i b? det er derfor jeg venter med at sætte størrelsen på b til jeg ved hvor mange lige tal der er.
07. december 2004 - 14:14
#6
min metode skal returne et array som kun indeholder de lige tal og så skal den selvfølgelig have den præcise størrelse
07. december 2004 - 14:16
#7
så det ligner dit eget mere.. kan du skrive b = new int[list.size()]; for(int i = 0; i < b.length; i++) fylder mindre.
07. december 2004 - 14:18
#8
Sorry jeg har vist misforstået jeg troede at det var de lige positioner, men det er de lige indhold du skal have.
07. december 2004 - 14:19
#9
Smid dem ind i en ArrayList og brug dens toArray metode til at få et simpelt array.
07. december 2004 - 14:22
#10
Det helt okay: ) kalp lig et svar! Det virker. Jeg må ikke bruge en ArrayList i denne opgave:/
07. december 2004 - 14:25
#11
public class Even { public static int[] cutoutEven(int[] a) { int n = 0; int[] b = new int[a.length]; for(int i = 0; i < a.length; i++) { if(a[i] % 2 == 0) { b[n] = a[i]; n++; } } int[] c = new int[n]; System.arraycopy(b, 0, c, 0, n); return c; } public static void main(String[] args) { int[] a = { 1, 2, 3, 5, 7, 8, 10, 12}; int[] res = cutoutEven(a); for(int i = 0; i < res.length; i++) { System.out.println(res[i]); } } }
07. december 2004 - 14:26
#12
Hvad er pointen i ikke at måtte bruge ArrayList men godt må bruge Stack ?
07. december 2004 - 14:28
#13
hmm.. noget om snakken... det eksempel du har lavet virker uden?
07. december 2004 - 14:36
#14
Ja. Jeg kom nemlig i tanke om at ArrayList toArray ville returnere Integer[] og ikke int[].
07. december 2004 - 14:40
#15
men så som jeg kan se den array som kommer retur have samme længde som a? det skal kun have den størrelse som det har brug for.. hvis der er 3 lige tal skal den sende et array retur med plads til 3 tal.
07. december 2004 - 14:52
#16
Nej. n bliver talt op for det antal den finder. Og c som returneres har størrelse n. Prøv selv at kør det.
07. december 2004 - 22:53
#17
Samme + alternativ løsning: public class Even { public static int[] cutoutEven1(int[] a) { int n = 0; int[] b = new int[a.length]; for(int i = 0; i < a.length; i++) { if(a[i] % 2 == 0) { b[n] = a[i]; n++; } } int[] c = new int[n]; System.arraycopy(b, 0, c, 0, n); return c; } public static int[] cutoutEven2(int[] a) { int n = 0; for(int i = 0; i < a.length; i++) { if(a[i] % 2 == 0) { n++; } } int[] c = new int[n]; int ix = 0; for(int i = 0; i < a.length; i++) { if(a[i] % 2 == 0) { c[ix] = a[i]; ix++; } } return c; } public static void main(String[] args) { int[] a = { 1, 2, 3, 5, 7, 8, 10, 12}; int[] res1 = cutoutEven1(a); for(int i = 0; i < res1.length; i++) { System.out.println(res1[i]); } int[] res2 = cutoutEven2(a); for(int i = 0; i < res1.length; i++) { System.out.println(res2[i]); } } }
07. december 2004 - 22:54
#18
Jeg har bare stadig en fornemmelse af at det må kunne laves smartere.
08. december 2004 - 00:18
#19
jeg har lavet og sendt både dit og kalps løsningsforslag til skolen... efter rettelse kan jeg lige se hvad lærerens forslag er og smide det her ind... må gå ud fra de har taget en simpel metode i brug :)
01. januar 2005 - 13:43
#20
Hvad sagde de så ?
01. januar 2005 - 14:49
#21
hov undskyld! Hvis begge kan ligge et svar så deles der lige over jeg havde begge forslag med i min opgave og begge blev godkendt:o)
01. januar 2005 - 14:50
#22
svar fra mig så venter vi lige på kalp
01. januar 2005 - 14:58
#23
Hey er stadig lidt træt;) sorry vente tiden:) lad os få lukket endnu et spørgsmål på eksperten! hehe
01. januar 2005 - 15:05
#24
Tak til Jer begge
Kurser inden for grundlæggende programmering