Avatar billede Slettet bruger
15. februar 2003 - 09:07 Der er 4 kommentarer og
2 løsninger

En pænere måde at løbe en array igennem på

Jeg skal prøve at gøre det så præcist som muligt:

1) Jeg har en array som består af 1 til 31 elementer, denne array består kun af int
2) Jeg har array 2 som også består af 1 til 31 elementer, denne array består af klasser. Hver klasse har en variabel af typen int

Jeg skal have gennemløbet de 2 array's på en sådan måde at array 1 (int) blive sammenlignet med objekt 1-31 i array 2, det skal være den variabel der er af typen int. Hvis de 2 er ens skal der udføres noget kode

Jeg har selv følgende løsning:

for (int i = 0; i < array1.size(); i++) {
    for (int y = 0; y < array2.size(); y++) {
        if (array1 == array2) {
          //Do your stuff
        }
    }
}

Sådan som jeg ser det er det muligt, men jeg har brug for at løbe 4 x 2 array igennem og på den måde vil være gennemløb vare max 31 * 31 = 961 gange og når jeg så skal gøre det 4 gange vil det give 4 * 961 = 3844 gange!!!
Det er sgu ikke godt nok! Det må absolut kunne lade sig gøre på en anden måde.
Avatar billede thums Praktikant
15. februar 2003 - 09:32 #1
Hvis at du skal sammenligne alle felter med hinanden er det den eneste måde at gøre det på... eller ihvertfald den pæneste.....

Hvis at du kun har behov for at tjekke om værdien i index 10 f.eks. passer til samme index i det andet array kan du gøre det på den her måde.

for (int i = 0; i < array1.size(); i++) {
      if (array1[i] == array2[i]) {
          //Do your stuff
  }
}


Håber du kan bruge det til noget.

Mvh.
Thums
Avatar billede Slettet bruger
15. februar 2003 - 10:02 #2
Det som den skal er at tjekke om værdien af int findes i array2, så derfor kan din metode desværre ikke bruges, men tak for forslaget :-)
Avatar billede erikjacobsen Ekspert
15. februar 2003 - 10:04 #3
Der er ikke tale om at et eller begge af dine arrays er sorterede efter
denne talværdi ??
Avatar billede arne_v Ekspert
15. februar 2003 - 10:49 #4
Hvis alle 31 skal sammenlignes med alle 31 så skal du
nødvendigvis lave 31*31 sammenligninger.

Hvis du ved et eller andet om fordelingen, så kan der
muligvis spares lidt ved noget ekstra kode. Men så skal
vi vide lidt om denfordeling.

(fordeling dækker bl.a. over sortering som Erik er inde på)

31 * 31 sammenigninger bør ikke være et problem på en moderne
computer. Så medmindre de 31 * 31 sammenligninger skal laves miliioner
af gange ville jeg slet ikke bekymre mig.

M.h.t. om de 31 * 31 sammenligninger skal laves dom fu viser i
en løkke, så er det den naturlige måde at gøre det.

Man kunne muligvis vinde en lille bitte smule ved at lave loop
unrolling.
Avatar billede erikjacobsen Ekspert
15. februar 2003 - 10:51 #5
Eller, Arne, hvis én af tabellerne ikke ændrer sig fra gang
til gang, kan man proppe den ind i en hash-tabel, indexeret
af den tal-værdi man skal finde.

Hvis begge er sorterede er en fletning en oplagt mulighed.
Avatar billede _carsten Nybegynder
15. februar 2003 - 10:59 #6
Min gamle PC, kan ikke engang måle hvor lang det tager at gennemløbe
de 2 arrays 3844 gange,  så her er en lille test på hvor lang tid
det gennemløbe 100.000.000 gange, min maskine siger 1633 millisekunder!!

Carsten

public class Test {

    public static void main(String[] args) {
    int[] ar1 = new int[10000];
        int[] ar2 = new int[10000];
   
    for( int i = 0; i < 10000; i++) {
        ar1[i] = i;
        ar2[i] = i;
    }
   
    long  g1 = System.currentTimeMillis();   
   
    int genn = 0;
    for( int i = 0; i < ar1.length; i++) {
        for( int x = 0; x < ar2.length; x++) {
            if(ar1[i] == ar2[x]) {
                // doSomething
                genn += 1;
            }
            else
                genn += 1;
        }
    }
    long  g2 = System.currentTimeMillis();   
   
    System.out.println("At gennemløbe de 2 arrays " + genn + " gange, tog:  " + (g2 - g1) + "  millisekunder ! ");
    }
}
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