Gå til innhold

Fjerne et element i en array?


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet

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.

Skrevet
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.
Skrevet

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.

Skrevet (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 av Benbjo
Skrevet

Hvis det ikke er en skoleoppgave som eksplisitt handler om å bruke array, finnes det bedre datastrukturer å forholde seg til, vet du (kanskje).

Skrevet

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.

Skrevet
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.
Skrevet
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å.

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å
×
×
  • Opprett ny...