Avatar billede data2k.dk Nybegynder
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; 


}
Avatar billede data2k.dk Nybegynder
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; 


}


}
Avatar billede kalp Novice
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++)
Avatar billede arne_v Ekspert
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];
}

?
Avatar billede arne_v Ekspert
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)];
}
Avatar billede data2k.dk Nybegynder
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.
Avatar billede data2k.dk Nybegynder
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
Avatar billede kalp Novice
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.
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
07. december 2004 - 14:19 #9
Smid dem ind i en ArrayList og brug dens toArray metode til at få et simpelt
array.
Avatar billede data2k.dk Nybegynder
07. december 2004 - 14:22 #10
Det helt okay: ) kalp lig et svar! Det virker.

Jeg må ikke bruge en ArrayList i denne opgave:/
Avatar billede arne_v Ekspert
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]);
        }
    }
}
Avatar billede arne_v Ekspert
07. december 2004 - 14:26 #12
Hvad er pointen i ikke at måtte bruge ArrayList men godt må bruge Stack ?
Avatar billede data2k.dk Nybegynder
07. december 2004 - 14:28 #13
hmm.. noget om snakken...  det eksempel du har lavet virker uden?
Avatar billede arne_v Ekspert
07. december 2004 - 14:36 #14
Ja.

Jeg kom nemlig i tanke om at ArrayList toArray ville returnere Integer[] og
ikke int[].
Avatar billede data2k.dk Nybegynder
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.
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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]);
        }
    }
}
Avatar billede arne_v Ekspert
07. december 2004 - 22:54 #18
Jeg har bare stadig en fornemmelse af at det må kunne laves smartere.
Avatar billede data2k.dk Nybegynder
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 :)
Avatar billede arne_v Ekspert
01. januar 2005 - 13:43 #20
Hvad sagde de så ?
Avatar billede data2k.dk Nybegynder
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)
Avatar billede arne_v Ekspert
01. januar 2005 - 14:50 #22
svar fra mig

så venter vi lige på kalp
Avatar billede kalp Novice
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
Avatar billede data2k.dk Nybegynder
01. januar 2005 - 15:05 #24
Tak til Jer begge
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