Gå til innhold

Fjerne et element i en array?


Anbefalte innlegg

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
Videoannonse
Annonse

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

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
Lenke til kommentar
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

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