Array doppelt Felder löschen

Status
Nicht offen für weitere Antworten.
B

Björni

Gast
Hallo ich soll ein bsp lösen:

Angabe:

Gesucht ist ein Algorithmus, der aus einem aufsteigend sortierten Feld alle doppelten Einträge entfernt und die neue Länge berechnet.

int [] unique(int[] feld)

Geben Sie die neue Länge (=Anzahl der Elemente ohne doppelte Einträge) zurück. Das folgende Beispiel zeigt ein Feld der Länge 10 vor und nach dem Aufruf.

Vor Aufruf: 1334555679 nachher: feld: 1345679679 neue Länge=7


Verwenden Sie in Ihrer Lösung kein Hilfsfeld. Die Elemente zwischen der neuen Länge und n bleiben unverändert.



habs so gemacht:
Code:
 static int  unique(int[] a)
		
		{		
			
			int count =0;
				for(int i=0;i<a.length-1;i++){
					
					if(a[i]!=a[i+1]){
						count++;
					}
				}
				count+=1;
				return count;
			}


Allerdings bekomme ich hier nur die Länge zurück. Wie kann ich ein verändertes Feld zurückgeben??

mfg

björni
 

Murray

Top Contributor
Ist die Signatur
Code:
int [] unique(int[] feld)
in der Aufgabenstellung vorgegeben? Wenn ja, dann ist das alles totaler Blödsinn - wie soll man denn bitteschön in einem int[] die (neue) Länge zurückgeben? Und was soll denn "benutzen Sie kein Hilfsfeld" bedeuten?? Gut. dass ich es nur noch mit Kunden und nicht mehr mit Assis und Profs zu tun habe - die Kunden bezahlen für solchen Sch***
 
B

björni

Gast
ja ist so vorgegeben. :lol: das mit neuer länge zurückgeben würd ich nicht beachten ("vielleicht erst im Hauptprogramm)

mich würde es interessieren wie ich das Array so wie vorgeben zurückbekomme
 

foxy

Aktives Mitglied
also in deinem Programm löscht du nichts, sondern du zählst ja nur wieviel doppelte vorkommen

du musst das feld shiften wenn ein doppelter vorkommt,

aber du hast dann immer noch die selbe length von deinem feld wie vorher

du kannst ein array nicht dynamisch die grösser verändern, dafür mussu mit collections arbeiten, also listen

aber das is ja nich gefragt

versuch einfach mal in deine if abfrage das hier reinzusetzen

Code:
public int[]  unique(int[] a)
      
      {      
         
         int count =0;
            for(int i=0;i<a.length-1;i++){
               
               if(a[i]=a[i+1]){
                  for (int z=i+1; z<= a.lenght-1;z++)
                  {
                      a[z] = a[z+1];
                  }
                  count++;
               }
            }
            
            return a;
         }

so ähnlich ist nich getestet

aber du kannst die grösse des feldes nicht dynamisch verändern, wenn du das veränderte feld zurückgeben willst

return a
 

Murray

Top Contributor
Ohne Hilfsfeld kann das m.E. nicht klappen - man kann aus einem int[] nunmal keine Elemente löschen. Daher muss man ein zweites int[] verwenden - und das würde ich doch als Hilfsfeld bezeichnen ???:L
 

foxy

Aktives Mitglied
sag ich ja ... er kann nur shiften

aber dann muss er sich für die letzten plätze was überlegen ...

aber machs mit collections ;)
 
B

björni

Gast
@foxy

also deine angegebene lösung hab ich schon mal probiert - funzt nicht.


was meint ihr mit shiften?
 
B

björni

Gast
und genau: ich hab ja als parameter ein array. das muss ich halt irgendwie verändern und dann zurückgeben.

Darum brauche ich meiner Meinung nach kein Hilfsarray
 

foxy

Aktives Mitglied
das was ich gemacht hab ... du hast in deinem array ja objecte ... und jaaaa integer sind normal keine objcte :O
so du machst einfach ein neuen verweis

also du hast an 2. stelle die doppelte zahl ... dann machst du einfach

dann ist die 3. stelle = der 2. stelle
die 3. stelle = 4. stelle bis ende

nur du hast eben am ende ein problem weil dein feld die grösse sich nicht verändert :)
 
B

björni

Gast
@foxy : kann dir bei deinem statement leider überhaupt ned folgen
 

foxy

Aktives Mitglied
du holst
a[2] = a[3]
a[3] = a[4]
usw bis ende ... du machst neue zuweisungen, somit ist der doppelte wert weg ganz einfach weil er "überschrieben" wird

aber du hast die letzte zahl doppelt stehn ;)
z.b.

a= 1223456

das neue

a= 1234566

also hilft dir nich weiter :)

du musst ein neues feld erzeugen, dann mit arraycopy das da reinhaun
dann hast du nur noch b = 123456 drin stehn
 
B

bygones

Gast
immer ruhig blut junge padawans...

geht alles... und fühl mich in der laune eine mögliche lösung zu posten

Code:
public int remove(int[] array) {
		int counter = 0;
		for ( int i = 0; i < array.length - 1; i++ ) {
			int k = 1;
			while (array[ i ] == array[ i + k ]) {
				array[ i + k ] = -1;
				k++;
				counter++;
			}
		}
		return array.length - counter + 1;
}
Code:
int[] i = new int[]{1, 1, 2, 3, 6, 7, 7, 7, 8, 9};
int newLength = new Test2().remove( i );
System.out.println( Arrays.toString( i ) );
System.out.println( newLength );
gibt bestimmt noch andere möglichkeiten

-1 ist einfach ein beliebiges Element dass als Löschelement herhält, d.h. alle doppelten Einträge werden einfach maskiert

n8
 
B

björni

Gast
danke, aber ich soll ja genau so züruckgeben wie in der Angabe (irgendwie mit verschieben)

aus {1,3,3,4,5,5,5,6,7,9}; wird {1,3,4,5,6,7,9,6,7,9}
 
B

bygones

Gast
dann schafft man es nicht afaik ohne Hilfsarray oder Collection, da ein Array nicht nachträglich veränderbar in seiner Größe ist...
 
B

björni

Gast
aber wenn die Größe gleich bleibt. nur das Array ändert sich

aus {1,3,3,4,5,5,5,6,7,9}; wird {1,3,4,5,6,7,9,6,7,9}


müsste es ja irgendwie gehen.??
 
B

bygones

Gast
björni hat gesagt.:
aber wenn die Größe gleich bleibt. nur das Array ändert sich

aus {1,3,3,4,5,5,5,6,7,9}; wird {1,3,4,5,6,7,9,6,7,9}
was hat dieses nun mit der aufgabe zu tun, du hast dann einen array in dem andere zahlen doppelt vorkommen ?! *kopfkratz*

allgemein gilt: Die größe eines Arrays ist später nicht mehr änderbar... den Inhalt kann man nach belieben ändern, die Größe bleibt aber immer gleich
 
B

björni

Gast
ja. das weiss ich schon das arrays nicht dynamisch sind.

die Angabe war halt so (und vollkommen blöd) dass man

aus {1,3,3,4,5,5,5,6,7,9}; wird {1,3,4,5,6,7,9,6,7,9} machen soll
 

mattulla

Bekanntes Mitglied
Vielleicht waere es eine Loesung wenn man zuvor einen int-Wert als Default festsetzt und das Feld dann einfach damit auffuellt.

Vll mal ein Beispiel: Default-Wert = -1

Altes Feld:
1, 2, 2, 3, 5, 5

Neues Feld:
1, 2, 3, 5, -1, -1

hierfuer muesste man kein Hilfsfeld erzeugen.....man kann ziemlich einfach die "neue Laenge" ermitteln und die Werte tauchen nicht mehr doppelt. Man muss halt nur einen Default-Wert festlegen. Dieser koennte ja auch MinInteger oder so sein falls Werte wie -1 als nicht geeignet angesehen werden.


gruss
mattulla
 

mattulla

Bekanntes Mitglied
Hab fuer das was ich eben versucht habe zu beschreiben mal eine Klasse geschrieben die das erledigt, der default-Wert wird hier dann dynamisch gesucht, so dass sichergestellt ist, dass er nicht in dem Originalfeld auftaucht:



Code:
public class MyArray {

	int[] a;
	int laenge;
	int defaultValue = Integer.MIN_VALUE;
	
	public MyArray(int laenge)
	{
		this.laenge =  laenge;
		a =  new int[laenge];
	}
	
	public int editArray()
	{
		if(defaultValue == Integer.MIN_VALUE)
		{
			boolean findDefaultValue = false;
			while(!findDefaultValue)
			{
				defaultValue++;
				findDefaultValue = true;
				for(int i = 0; i < a.length; i++)
				{
					if(a[i] == defaultValue)
					{
						findDefaultValue =  false;
						break;
					}
				}
			}
			for(int i = 1; i < laenge; i++)
			{
				if(a[i] == a[i-1])
				{
					laenge--;
					for(int j = i; j < laenge; j++)
					{
						a[j] = a[j+1];
					}
					a[laenge] = defaultValue;
					i--;
				}
			}
		}
		return laenge;
	}
	public static void main(String[] args) {
		MyArray test =  new MyArray(5);
		test.a[0] = 1;
		test.a[1] = 1;
		test.a[2] = 1;
		test.a[3] = 2;
		test.a[4] = 2;
		test.editArray();
		for(int i = 0; i < test.a.length; i++)
		{
			System.out.println(test.a[i]);
		}

	}

}
 
B

bygones

Gast
@matulla:
gleiche funktionalität wie der code den ich schon gepostet habe...
 

André Uhres

Top Contributor
Code:
       int out = 0;
        for (int in = 0; in < meinArray.length; out++) {
            meinArray[out] = meinArray[in];
            while(in < meinArray.length && meinArray[in] == meinArray[out]) in++;
        }
        for (int i = 0; i < out; i++) System.out.println(meinArray[i]);
 
B

bygones

Gast
ok somit gewinnt Andre mit dem kürzestem Code :)

@TE:
wie du siehst gibt es keine lösung für diese Aufgabenstellung, wenn 1. kein hilfsarray angelegt werden darf bzw. 2. der array ECHT kleiner werden muss.....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2
sgtcoopa Array übergeben Schleife Java Basics - Anfänger-Themen 0
B Compiler-Fehler Array aus Objekten übergeben Java Basics - Anfänger-Themen 7
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
G zweidimensionales int Array sortieren Java Basics - Anfänger-Themen 57

Ähnliche Java Themen

Neue Themen


Oben