Hallo,
ich bin ein Anfänger und befasse mich momentan mit Arrays.
Ich wollte die Elmente eines Arrays vergleichen. Werte die doppelt
vorkommen, sollen nicht ausgegeben werden, d.h. beim Eingabe von
2,3,3,4,5
soll 2,3,4,5 ausgegeben werden. Vielleicht kann mir jemand einen Tipp
geben oder sagen wo der Fehle liegt.
int Feld[5]={2,3,3,4,5};
for (int i=0; i<5; i++)
{
if(Feld[i]!=Feld[i+1] cout<<Feld[i]<<endl;
}
VG
Der offensichtliche Fehler ist die Formatierung. Davon abgesehen kann das so sicher nicht kompiliert werden, wenn es C oder C++ ist. Auf welchem Controller soll das denn laufen?
Im blödsten Fall musst du ein Element mit dem Rest des Arrays vergleichen und überprüfen, ob es ein 2. Element mit dem gleichen Wert gibt. Dafür brauchst du 2 ineinander verschachtelte for-Schleifen. Dabei beachten, dass der Index der übergeordneten Schleife in der inneren Schleife nicht überprüft wird (ansonsten überprüfst du das Element mit sich selber). Beim Durchlaufen der inneren Schleife setzt du eine boolean-Variable auf true, wenn ein Element mit gleichem Werte gefunden wurde (und brichst am besten gleich ab), diese Variable überprüfst du dann. Wenn sie false ist, gibst du den Wert am aktuellen Index aus.
New schrieb:
if(Feld[i]!=Feld[i+1]
Das i kann maximal den Wert 4 annehmen.
Das letzte Element im Array wird also nicht ausgegeben.
Gruss
Robert
New schrieb: > Vielleicht kann mir jemand einen Tipp > geben oder sagen wo der Fehle liegt. die ersten Fehler (fehlende Klammer) liefert der Compiler Dann ist nicht klar, ob die Werte immer sortiert sind. Für den letzten Wert greift die Abfrage auf Speicher nach dem Array zu. Den müsstest Du daher aussortieren
1 | if((i==5-1)||(Feld[i]!=Feld[i+1])) cout<<Feld[i]<<endl; |
Max M. schrieb: > Im blödsten Fall musst du ein Element mit dem Rest des Arrays > vergleichen und überprüfen, ob es ein 2. Element mit dem gleichen Wert > gibt. Dafür brauchst du 2 ineinander verschachtelte for-Schleifen. Vielen Dank für die Antworten. Ich habe jetzt nur noch ein Problem, wenn ich 2,3,3,4,5 eingebe, dann erhalte ich 2,3,4 zurück. Der letzte Wert 5 wird nicht ausgegeben. Nun muss ich wohl überlegen wie ich diesen Teil "cout<<Array[i]<<endl;" umschreibe. for (int i=0; i < 5; i++) { for (int j=i+1; j < Array.Length; j++) { if (Feld[i]!=Array[i+1]) { cout<<Array[i]<<endl; break; } }
Das war mein Ansatz, wenn das Array sortiert ist kann man vllt. noch was optimieren:
1 | int arr[] = new int[]{1,2,7,3,1,2,8}; |
2 | for(int i = 0; i < arr.Length; i++) |
3 | {
|
4 | bool detectedSameValue = false; |
5 | for(int j = 0; j < arr.Length; j++) |
6 | {
|
7 | if (arr[i] == arr[j] && i != j) |
8 | {
|
9 | detectedSameValue = true; |
10 | break; |
11 | }
|
12 | }
|
13 | |
14 | if (!detectedSameValue) |
15 | Console.WriteLine(arr[i]); |
16 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.