Jedes zweite Element eines Arrays entfernen

Aloushi

Mitglied
Java:
public static String[] halfArray(String[] a) {

        String[] half;
        if ((a.length % 2) == 0) {
            half = new String[a.length / 2];
        } else {
            half = new String[a.length / 2 + 1];
        }

        for (int i = 0; i < a.length; i += 2) {
            for (int j = 0; j < half.length; j++) {
                half[j] = a[i];
            }

        }

return half;
}


Hallo, und zwar möchte ich gerne jedes zweite Element eines Arrays entfernen und das Ergebnis in einem neuen Array wiedergeben.
Bsp.: halfArray([“A“,“B“,“C“,“D“,“E“,“F“,“G“]) --> [“A“,“C“,“E“,“G“]
Bsp.: halfArray([“A“,“B“,“C“,“D“]) --> [“A“,“C“]

Sitze schon länger an der Aufgabe und komme leider zu keinem Ergebnis
 

KonradN

Super-Moderator
Mitarbeiter
Also als erstes: Die Erzeugung des Arrays hat er ja bereits. Sein Code lässt sich maximal noch verenfachen zu (a.length+1) / 2 als Länge des Arrays. Aber er hat eine funktionierende Lösung für das Ziel-Array.

Ich dachte, ich hätte es getan mit der for-schleife? Wüsste nicht, wie ich es genau anders machen soll.
Spiel Deine Zwei schleifen doch einmal durch. Was genau passiert da?

Für jedes zweite Element des ursprünglichen Arrays schreibst Du dieses in alle Felder? Das macht so relativ wenig Sinn fürchte ich :)

Also schreib einfach einmal auf: Welches Feld soll wohin kopiert werden?
0 -> 0
2 -> 1
4 -> 2
6 -> 3
...

Siehst Du da eine Gesetzmäßigkeit? Statt einer inneren Schleife brauchst Du also was?
 

Aloushi

Mitglied
Ich weiß gerade nicht genau wo mein Fehler liegt, damit ich verstehe worauf du genau hinaus möchtest.
Meiner Meinung nach erfülle ich ja mit den zwei Schleifen genau das:
0 -> 0
2 -> 1
4 -> 2
6 -> 3

Die eine Schleife läuft immer in zweier Schritten und die andere in einer Schritten und dann sollen die Werte übertragen werden
 

httpdigest

Top Contributor
Nein, das Problem ist, dass die innere Schleife ja nicht parallel bzw. gleichzeitig zur äußeren Schleife läuft, sondern für jede Iteration der äußeren Schleife laufen immer alle Iterationen der inneren Schleife.
Die innere Schleife selbst läuft also half.length * a.length / 2 Mal.
 

Aloushi

Mitglied
Ah oke, vielen Dank. Wäre es möglich mir ein kleines Beispiel zu nennen, in dem es sinnvoll ist, mit einer äußeren und inneren Schleife zu arbeiten?

Also brauche ich statt der inneren Schleife ein einfaches Inkrement?
 

KonradN

Super-Moderator
Mitarbeiter
Also brauche ich statt der inneren Schleife ein einfaches Inkrement?
Du brauchst statt der einnen Zuweisung nur eine Zuweisung:

Die äußere Schleife läuft über alle Elemente, die kopiert werden müssen. Also musst Du nur noch kopieren.

Und da kannst Du dann eine weitere Variable nutzen, die Du dann erhöhst, oder Du nutzt einfach den Index, den Du schon hast und berechnest den Ziel-Index einfach.
 

Aloushi

Mitglied
Java:
for (int i = 0, k = 0; i < a.length; i += 2, k++) {
    half[k] = a[i];
          }

habe es so jetzt hinbekommen. wie würde es aussehen, wenn ich die zweite Variable im Anweisungsblock initialisieren möchte?

Code:
for (int i = 0; i < a.length; i += 2) {
            int j = 0;
            j++;
            half[j] = a[i];
        }

Beim zweiten ist irgendwas falsch
 

Neumi5694

Top Contributor
Java:
for (int i = 0, k = 0; i < a.length; i += 2, k++) {
    half[k] = a[i];
          }

habe es so jetzt hinbekommen. wie würde es aussehen, wenn ich die zweite Variable im Anweisungsblock initialisieren möchte?

Code:
for (int i = 0; i < a.length; i += 2) {
            int j = 0;
            j++;
            half[j] = a[i];
        }

Beim zweiten ist irgendwas falsch
Du setzt in jedem Schritt j zuerst auf 0 und dann auf 1.
Was du da vorhast, klappt nur, wenn j außerhalb gespeichert bleibt.
Falls du j nur für die Dauer der Schleife behalten willst (und es danach nicht mehr existieren soll), kannst du das Ganze noch in einen Block packen.
Java:
{
    int j = 0; //nur innerhalb dieses Blocks sichtbar, danach nicht mehr.
    for (int i = 0; i < a.length; i += 2) {
        half[j++] = a[i]; //erhöht j NACH Verwendung um 1
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Generell kann man bei sowas auch einfach auf eine zweite Variable verzichten:
Java:
for (int i = 0; i < a.length; i += 2) {
    half[i/2] = a[i];
}

Dazu diente ja die Aufstellung der Indices.

Die Verwendung von mehreren Variablen in einer Zählschleife empfinde ich als schwer lesbar und ich würde das immer versuchen zu vermeiden.
 

Imprator1

Neues Mitglied
Grüß dich @Aloushi ,

mit Streams ist es eine andere, etwas kompliziertere Denkweise:
Java:
    public static int[] halven(int[] a) {
        return Stream.iterate(0, i -> i + 2).limit((a.length + 1) / 2).mapToInt(i -> a[i]).toArray();
    }

    public static void main(String[] args) {
        System.out.println(Arrays.toString(halven(new int[]{1})));
        System.out.println(Arrays.toString(halven(new int[]{1, 2, 3})));
        System.out.println(Arrays.toString(halven(new int[]{1, 2, 3, 4})));
        System.out.println(Arrays.toString(halven(new int[]{1, 2, 3, 4, 5})));
    }
 

KonradN

Super-Moderator
Mitarbeiter
Wenn schon Streams (Was für einen Anfänger so schlicht keinen Sinn macht, aber egal), dann würde ich zwei kleine Änerungen vornehmen:
a) Direkt mit IntStream arbeiten - dann wird aus dem mapToInt ein einfaches map und man hat generell nur int-Werte.
b) iterate hat auch eine Variante mit 3 Parametern, so dass man das limit nicht mehr benötigt und man hat nicht mehr eine berechnete Anzahl sondern nur noch die Array-Grenze:
Java:
    public static int[] halven(int[] a) {
        return IntStream.iterate(0, i -> i < a.length, i-> i+2)
                .map(i -> a[i])
                .toArray();
    }

Aber das sind so typische Dinge, die ich so nicht auf Zwang als Stream schreiben würde.
 

httpdigest

Top Contributor
Stimmt, dann hat Stream.iterate und die funktionale Schreibweise ja gar keine Daseinsberechtigung... Gut, dass das nochmal richtiggestellt wurde...
Das ist ungefähr so, als würde man auf folgenden Code:
Java:
public static String isEvenNumber(int a) {
  if ((a % 2) == 0) return "true" else return "false";
}
die Anmerkung: "Du willst hier ja zwei Zustände (ja und nein) zurückgeben, also nehme lieber einen boolean."
dann kommentieren mit:
"Stimmt, dann hat String ja gar keine Daseinsberechtigung... Gut, dass das nochmal richtiggestellt wurde..."

Natürlich hat Stream.iterate() eine Daseinsberechtigung, aber _offensichtlich_ ist es das falsche Werkzeug, wenn man über int's iteriert.
Hinweis: Man kann ganz allgemeine Objekte per Stream.iterate() als Stream generieren, nicht nur integers.
 

KonradN

Super-Moderator
Mitarbeiter
@httpdigest Nicht auf neue Accounts von Tobias herein fallen :)

Wobei ich ja bei der Erwiderung schon gut fand, dass da ganz offensichtlich dem IntStream die funktionale Schreibweise abgesprochen wurde. Aber ich denke, darüber muss man nicht weiter nachdenken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Wie kann ich jedes zweite Array Wert ausgeben lassen?? Java Basics - Anfänger-Themen 6
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
N 2D Arrays jedes xy vergleichen Java Basics - Anfänger-Themen 7
K Methoden Pause drücken klappt nur jedes 2. Mal Java Basics - Anfänger-Themen 6
T Auf jedes Zeichen eines Strings zugreifen? Java Basics - Anfänger-Themen 2
U Spielfelde erstellen & via Brute-Force jedes Feld aktivieren Java Basics - Anfänger-Themen 4
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
S String: jedes Element mit jedem Java Basics - Anfänger-Themen 31
ARadauer jedes Element in Liste nur einmal Java Basics - Anfänger-Themen 2
R Vererbung von Listenern für jedes Objekt in einem Frame Java Basics - Anfänger-Themen 6
R jedes X-te Element aus Array entfernen? Java Basics - Anfänger-Themen 3
J Jedes Element in 2 Arrays mit gleicher Position addieren Java Basics - Anfänger-Themen 12
E Listener für jedes Objekt Java Basics - Anfänger-Themen 4
D Beim Degister jedes element aufrufen ? Java Basics - Anfänger-Themen 2
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
N ArrayList: Das zweite Element wird zur Liste nicht eingefügt nach dem zweiten request. Java Basics - Anfänger-Themen 3
A Akzeptiert das zweite replaceAll nicht Java Basics - Anfänger-Themen 20
A Mit javac zweite Datei compilieren ohne Erste erneut zu compilieren? Java Basics - Anfänger-Themen 7
A OOP Arraybefüllung mit for-Schleifen Problem: Umsprung in die zweite Zeile Java Basics - Anfänger-Themen 11
H RandomAccesFile zweite Zeile schreiben Java Basics - Anfänger-Themen 4
R Image laden die Zweite Java Basics - Anfänger-Themen 4
R Erste und zweite Stelle einer Eingabe auslesen Java Basics - Anfänger-Themen 2
F Mehrdimensionales Array zweite Diemnsion später Konstruieren? Wie Java Basics - Anfänger-Themen 2
U zweite Frage: return, wichtig Java Basics - Anfänger-Themen 8
S Nachricht von Console auf Screen wiedergeben die zweite:-) Java Basics - Anfänger-Themen 7
F Zweite Graphics-Methode wird nicht ausgeführt Java Basics - Anfänger-Themen 4
U Sonderzeichen die zweite Java Basics - Anfänger-Themen 16
S Zahlenraten die zweite Java Basics - Anfänger-Themen 3
K Eclipse - zweite Konsole? Java Basics - Anfänger-Themen 2
ven000m Rauten "Stern" zeichnen, hälfte habe ich zweite? Java Basics - Anfänger-Themen 2
K Neuronales Netz in Java ... die zweite Java Basics - Anfänger-Themen 3
K Wörter zählen auf Internetseiten... die zweite Java Basics - Anfänger-Themen 4
S Klappe die Zweite für Heute Java Basics - Anfänger-Themen 2
A Fehler beim Lesen von Objekten aus Datei (die zweite) Java Basics - Anfänger-Themen 2
K Wie kann ich ein Element an den Anfang setzten ? Java Basics - Anfänger-Themen 1
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
I Letztes, erstes Element vom Array Java Basics - Anfänger-Themen 9
districon Element in Liste einfügen Java Basics - Anfänger-Themen 1
Y Wie kann ich ein Element in einer toString finden. Java Basics - Anfänger-Themen 2
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
S Gibt es ein simples JWebbrowser Element? Java Basics - Anfänger-Themen 6
M Letztes Element einer ArrayList Java Basics - Anfänger-Themen 12
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
V_Fynn03 Lineare Datenstrukturen Element löschen? Java Basics - Anfänger-Themen 2
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
M Ist es möglich, das größte und zweitgrößte element in einem Array mit nur einer Schleife ausfindig zu machen ? Java Basics - Anfänger-Themen 19
X Array erstes und letztes Element tauschen Java Basics - Anfänger-Themen 2
A Konsolenausgabe: Hinter letztes Element ein "}" Java Basics - Anfänger-Themen 2
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
O Element aus Array löschen Java Basics - Anfänger-Themen 5
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
M Array immer wieder um ein Element erweitern Java Basics - Anfänger-Themen 6
AnnaBauer21 org.w3c.dom.Element - Neues Element hinzufügen Java Basics - Anfänger-Themen 4
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
D Selenium Webdrive get x Element Java Basics - Anfänger-Themen 14
W Element aus HashSet in String umformen Java Basics - Anfänger-Themen 7
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
B Element in Array nach unten verschieben Java Basics - Anfänger-Themen 11
TechGirl JAVA GUI Oberfläche Umkreisung - wie heißt dieses Element? Java Basics - Anfänger-Themen 2
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
Z Html Element aus der Webseite auslesen Java Basics - Anfänger-Themen 1
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
J Variablen Strings mit Zeilenumbrüchen in neues Array Element Java Basics - Anfänger-Themen 1
W Größtes Element im unsortierten Binärbaum Java Basics - Anfänger-Themen 7
S Günstigstes Element aus einer ArrayList ausgeben Java Basics - Anfänger-Themen 10
Ruvok Prüfen ob bestimmtest Element existiert im Array Java Basics - Anfänger-Themen 11
A ResultSet: vorheriges Element auslesen Java Basics - Anfänger-Themen 10
F Element aus LinkedList löschen Java Basics - Anfänger-Themen 3
J Element zu jList hinzufügen NullPointerExcepetion Java Basics - Anfänger-Themen 2
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
V wie kann man am einfachsten für ein Element der JavaFX die Umrandung aktiwieren ? auch ohne css ? Java Basics - Anfänger-Themen 4
D Fehlermeldung "com.element.JavaUpload.Manager" Java Basics - Anfänger-Themen 1
S Element von List<E> in String umwandeln Java Basics - Anfänger-Themen 3
I Element löschen aus der Liste Java Basics - Anfänger-Themen 2
G element in ArrayList Hinzufügen Java Basics - Anfänger-Themen 16
M ArrayList-Element hinzufügen u. löschen Java Basics - Anfänger-Themen 2
H Möglichkeit, mehrere Element zu speichern Java Basics - Anfänger-Themen 8
P Element aus einer einelementigen Menge bekommen. Java Basics - Anfänger-Themen 8
M Letztes Element im Array finden Java Basics - Anfänger-Themen 3
R Mit iterator auf Element zugreifen Java Basics - Anfänger-Themen 2
G Element einem Array hinzufügen Java Basics - Anfänger-Themen 7
Madlip Erste Schritte Das 4. Element?!? Java Basics - Anfänger-Themen 2
B Erstes Element eines Vectors erhalten Java Basics - Anfänger-Themen 5
Q queue.remove Element trotzdem noch vorhanden. Java Basics - Anfänger-Themen 10
H Zugriff auf Vector Element Java Basics - Anfänger-Themen 2
N Array, Element in Array? Java Basics - Anfänger-Themen 8
I Liste Remove erstes Element Java Basics - Anfänger-Themen 5
M Map mit Vektor: Element hinzufügen Java Basics - Anfänger-Themen 21

Ähnliche Java Themen

Neue Themen


Oben