Gå til innhold

Arrayproblem: Overføring uten dobbellagring


Anbefalte innlegg

Hei. Har et lite problem. Skal overføre hver oppføring i en 2d-array over til et annet array (1d). En oppføring kan være lagret flere plasser i 2d-arrayen, men jeg vil bare ha hver enkelt oppføring lagret 1 gang i 1d-arrayet. Har prøvd meg frem uten hell, her er koden:

 

boolean funnet = false;

boolean lagret = false;

int plass = 0;

 

 

 

for(int i = 0; i < LengdeFelt1; i++){

  for(int j = 0; j<LengdeFelt2; j++){

    while(plass < oljeselskap.length && !funnet){

      if(oljeselskap[plass] == felt[j]){

        funnet = true;

      }

      plass++;

    }

    plass=0;

    if(!funnet){

      while(!lagret){

        if(oljeselskap[plass] == null){

   oljeselskap[plass] = felt[j];

   lagret = true;

        }

        plass++;

      }

    }

  }

}

 

Noen som kan hjelpe meg litt på vei?

Endret av oya
Lenke til kommentar
Videoannonse
Annonse

Bruk HashMap:

 

HashMap myMap = new HashMap();
for (int i = 0; i < oljeselskap.length; ++i) {
  for (int j = 0; j < oljeselskap[i].length; ++j) {
       Object key = oljeselskap[i][j];
       Object value = oljeselskap[i][j];

       // Putter value sortert etter key. Hvis key eksisterer
       // fra foer, da blir den gamle value skrevet over med den
       // nye value.
       // I dette tilfellet blir value brukt som key, og hvis value
       // finnes fra foer, saa blir det "overskrevet" med seg selv.
       // Ergo, ingen duplikater.
       myMap.put(key ,value);
  }
}
Collection myCollection = myMap.values();

// Denne bruker du til aa iterere igjennom alle verdier
Iterator myIterator = myCollection.iterator(); 

// Eller du konverterer mapen til en Object array
Object[] myObjects = myCollection.toArray();

// Eller et Oljeselskap array
Oljeselskap[] myOljeselskapArray = (Oljeselskap[])myCollection.toArray(new Oljeselskap[0]);

Lenke til kommentar

ArrayList er ogsaa mulig (kanskje litt mer intuitivt):

 

ArrayList myList = new ArrayList();
for (int i = 0; i < oljeselskap.length; ++i) {
  for (int j = 0; j < oljeselskap[i].length; ++j) {
       if (!myList.contains(oljeselskap[i][j]) {
           myList.add(oljeselskap[i][j]);
       }
  }
}


// Konvertere listen til en Object array
Object[] myObjects = myList .toArray();

// Eller et Oljeselskap array
Oljeselskap[] myOljeselskapArray = (Oljeselskap[])myList .toArray(new Oljeselskap[0]);

 

NB:

Jeg har ikke testet noen av kodene selv, kan inneholde kompileringsfeil.

Lenke til kommentar

Fikk laget denne:

 

 

HashMap list = new HashMap();

  for(int i = 0; i < lengdeFelt1; i++){

    for(int j = 0; j < lengdeFelt2; j++){

      if(felt[j] !=null){

        String v = felt[j];

        list.put(v,v);

      } // Slutt if

  } // Slutt for

} // Slutt for

 

Collection samling = list.values();

 

String[] oljeselskap = (String[])samling.toArray (new String[0]);

 

for(int i = 0; i<oljeselskap.length;i++){

  skjerm.outln(oljeselskap);

} // Slutt for

 

Den funket fint når jeg kjørte den, men fikk opp denne meldingen under kompilering:

Note: Oljesystem.java uses unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.

 

Hva kan dette være?

Lenke til kommentar

når jeg kjører xlint får jeg opp dette

 

Oljesystem.java:214: warning: [unchecked] unchecked call to put(K,V) as a member

of the raw type java.util.HashMap

list.put(v,v);

           ^

Oljesystem.java:221: warning: [unchecked] unchecked call to <T>toArray(T[]) as a

member of the raw type java.util.Collection

String[] oljeselskap = (String[])samling.toArray (new String[0]);

                                                                          ^

2 warnings

Endret av oya
Lenke til kommentar
Note: Oljesystem.java uses unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.

 

Oljesystem.java:214: warning: [unchecked] unchecked call to put(K,V) as a member

of the raw type java.util.HashMap

list.put(v,v);

          ^

Oljesystem.java:221: warning: [unchecked] unchecked call to <T>toArray(T[]) as a

member of the raw type java.util.Collection

String[] oljeselskap = (String[])samling.toArray (new String[0]);

                                                                          ^

2 warnings

 

Dette er java-generic advarsel. Jeg programmerer fortsatt under 1.4.2, saa jeg hoppet over generics.

 

Foelgende endringer fjerner advarselene:

HashMap<String,String> list = new HashMap<String,String>();

og

Collection<String> samling = list.values();

   String[] oljeselskap = samling.<String>toArray (new String[0]);

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...