Benbjo Skrevet 8. september 2008 Del Skrevet 8. september 2008 Lurte på en ting: Jeg har behov for å fjerne et element i en array. Dette skal da fjernes helt slik at det ikke er noen null elementer i arrayet der hvor det opprinnelige elementet var. La oss si at vi har en array med fem tall - {1, 4, 6, 3, 7} Jeg vil da ha bort, la oss si tallet 6, slik at jeg får en ny array som ser slik ut: {1, 4, 3, 7}. Hvordan gjør jeg dette? Lenke til kommentar
pgdx Skrevet 8. september 2008 Del Skrevet 8. september 2008 Siden array er immutable (i.e. strukturen kan ikke endres på etter de har blitt opprettet), må du lage et helt nytt array som er én posisjon kortere, og deretter kopiere over ett og ett element. Med andre (og mer konsise) ord: public static void main(String[] args) { int x = 6; // tallet du leter etter og skal erstatte int[] original = new int[] { 1, 4, 6, 9, 6, 3, 2 }; // ditt opprinnelige array int[] copy = new int[original.length - 1]; // ditt nye array som er én kortere boolean replaced = false; // antar du bare skal erstatte én forekomst av x for (int i = 0; i < original.length - 1; i++) { if (original[i] == x && !replaced) { replaced = true; // vår ene forekomst har blitt funnet, heretter er indexen forskjøvet } if (!replaced) { copy[i] = original[i]; // hvis den ikke er funnet, kopier over ett og ett element med samme index } else { copy[i] = original[i + 1]; // hvis den er funnet, er indexen én høyere i original } } for (int i = 0; i < copy.length; i++) { System.out.println(copy[i]); } } Merknader til koden: Den er ikke testet, den baserer seg på antagelsen om at du bare skal fjerne én forekomst av tallet, og at tallet faktisk er i arrayet! Brukes på egen risiko. Lenke til kommentar
Benbjo Skrevet 8. september 2008 Forfatter Del Skrevet 8. september 2008 Takk, den der skal nok funke, må prøve litt Lenke til kommentar
pgdx Skrevet 8. september 2008 Del Skrevet 8. september 2008 Takk, den der skal nok funke, må prøve litt Tja, litt avhengig av definisjonen av å funke. Men den fungerer så lenge tallet er minst én gang i arrayet og den bare skal fjerne første forekomsten. Den kjører på O(n), som er så kjapt du kan få den. Dersom tallet ikke er i arrayet er det siste element i originalen som forsvinner. Lenke til kommentar
pgdx Skrevet 8. september 2008 Del Skrevet 8. september 2008 Når jeg leser gjennom koden på nytt, ser jeg jo at du lett kan fjerne " && !replaced" fra første if. Antar også at original har length > 0. Lenke til kommentar
Benbjo Skrevet 8. september 2008 Forfatter Del Skrevet 8. september 2008 (endret) Nå er det ikke tall den egentlig skal brukes til, men chars. Har et array av chars og skal lage noe arrays ved først å fjerne første charen, så andre (første charen er tilbake) osv. Men må endre litt på koden ser jeg. Fikk det til å virke nå. Takk Endret 8. september 2008 av Benbjo Lenke til kommentar
pgdx Skrevet 8. september 2008 Del Skrevet 8. september 2008 Hvis det ikke er en skoleoppgave som eksplisitt handler om å bruke array, finnes det bedre datastrukturer å forholde seg til, vet du (kanskje). Lenke til kommentar
Benbjo Skrevet 8. september 2008 Forfatter Del Skrevet 8. september 2008 Vektorer tenker du på? Eller Arraylist? Det har vi ikke lært, men kunne kanskje ha brukt det. Er en skoleoppgave ja, og er vel egentlig ikke lagt opp til å ha array, men er like greit så langt som jeg nå har kommet. Lenke til kommentar
pgdx Skrevet 8. september 2008 Del Skrevet 8. september 2008 Vektorer tenker du på? Eller Arraylist? Det har vi ikke lært, men kunne kanskje ha brukt det.Kommer selvsagt helt an på hva du skal med dataene dine, om du skal skrive masse, lese masse, skrive eller lese i en bestemt rekkefølge, søke etter noe, og så videre, men det kommer du sikkert til senere. Lenke til kommentar
blackbrrd Skrevet 8. september 2008 Del Skrevet 8. september 2008 Se på kildekoden til Vector for gode eksempler. Den bruker vanlige arrays internt. Lenke til kommentar
pgdx Skrevet 9. september 2008 Del Skrevet 9. september 2008 Se på kildekoden til Vector for gode eksempler. Den bruker vanlige arrays internt.Spørs om det er det mest pedagogiske for en førsteårsstudent i Java. Dessuten ser jeg ikke helt grunnen til at den klassen skal være den beste å se på. Lenke til kommentar
blackbrrd Skrevet 9. september 2008 Del Skrevet 9. september 2008 Tjah, den er ihvertfall relativt optimalisert (bruker arrayCopy...) Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå