Brauch Hilfe für Java Programm

BillyFitt

Mitglied
Hallo,
Ich muss die folgende Aufgabe machen:
"Schreiben Sie eine Prozedur replaceAll, welche zwei int Werte x und y sowie ein Array von int-Werten nimmt. Die Prozedur soll dann alle Vorkommen von x im gegebenen Array durch y ersetzen."
Also ich hab folgendes gemacht :

import java.util.ArrayList;
import java.util.Scanner;

public class AL {
static Scanner reader = new Scanner (System.in);
static ArrayList<Integer> array = new ArrayList<Integer>();
public static void main (String[] args)
{
System.out.println("Please enter an array of numbers, type in 0 when finished!");
int in = reader.NextInt();
while (in != 0) {
array.add(in);
in = reader.NextInt();
}

System.out.println(".................................");

for (int i : array) {
System.out.println(i);
}
}
}

So, wie kann ich jetzt ein int x und ein int y geben, sodass ich die Prozedur replaceAll verwenden kann. Wäre schön wenn Sie mir helfen können . Vielen Dank im Voraus!
 
In der Aufgabe steht nirgendwo das die Werte eingegeben werden müssen. Definiere einfach einfach ein festes Array mit Inhalt und feste Werte für x und y und schreibe dann die replaceAll() Methode um die es eigentlich geht.
 
Okey, wie soll das aussehen? Z.B. einfach
int[] ar = {1,2,3,2,4};
int x = 2 , y = 7;
replaceAll (2,7,ar);
System.out.println (Arrays.toString(ar));
?
 
Die Java 8-Methode sähe so aus:
Java:
        int x = 3, y = 4; // toReplace, replace
        int[] array = IntStream.range(0, 7).toArray(); // instantiating
        IntStream.range(0, array.length).forEach(i->{if(array[i]==x){array[i]=y;}}); // replacing
        System.out.println(Arrays.stream(array).mapToObj(i -> String.valueOf(i)).reduce("", (s1, s2) -> s1.isEmpty() ? s2 : s1 + ", " + s2)); // printing

0, 1, 2, 4, 4, 5, 6

(Ich schreibe das, weil ich ja auch Trainingssession)

Bearbeitung: Sorry, Ausgabe (nur mit Streams/Lambdas) so:
Stream.of(Arrays.stream(array).mapToObj(i -> String.valueOf(i)).reduce("", (s1, s2) -> s1.isEmpty() ? s2 : s1 + ", " + s2)).forEach(System.out::println); // printing
 
NAja laut Aufgabe sollst du die Prozedur replaceAll ja selber schreiben und nicht die fertige aus der Java Lib benutzen. Das wäre ja ein wenig einfach oder?
 
@DerWissende Warum tust du mir das immer an?
Bitte dies ist ein Anfängerforum und nicht deine Spielwiese. Wenn du schon Code postest - dazu auch noch Java 8 Features - dann bitte (ich bitte dich inständig) richtigen Code.

Wenn schon, dann einen richtigen filter-Stage einbauen und nicht die Filterlogik im forEach-Block:
Java:
IntStream.range(0, array.length).filter(i -> array[i] == x).forEach(i -> array[i] = y);
Geschweige davon sollten man generell mit Streams Non-Interference betreiben (Source nicht verändern). Darum sollte es auch so aussehen:
Java:
int[] replaced = IntStream.of(array).map(i -> i == x ? y : i).toArray();
Wenn schon eine mutable-reduction, dann richtig mit collect.
Java:
String collect = IntStream.of(array).mapToObj(Integer::toString).collect(Collectors.joining(", "));

Ahja es macht keinen Sinn extra eine Stream-Pipeline zu eröffnen, wenn man einfach System.out.println aufrufen kann. Für jemanden, der jedesmal über Performance/Overhead spricht, sollte das doch klar sein.
 
An Filter hatte ich auch gedacht, aber dann verworfen.
Mit replaced erstellst du ein zusätzliches Array.
Also der Filter- und Stream.of-Einwand ist berechtigt.

Sonst zur eigentlichen Aufgabe habe ich einen Flowchart erstellt (darin ist der Programmablauf [ohne implizite "Schleifen"] zu erkennen).
 
Mit replaced erstellst du ein zusätzliches Array.
Klar, weil es eben non-interfered werden sollte und wenn man eben das Array darunter verändert kann man bei parallelen Streams böse Überraschungen erleben. Darum sollte man funktional side-effect frei Programmieren und auch mal ein neues Array erstellen.

Was ich eigentlich damit ausdrücken wollte ist, dass es ok ist Java 8 Features zu posten, aber eben sehr vorsichtig. Denn speziell Anfänger nehmen Code auf C&P Basis, verstehen den Code aber erst viel später und lernen es dann auch falsch.
Sonst zur eigentlichen Aufgabe habe ich einen Flowchart erstellt (darin ist der Programmablauf [ohne implizite "Schleifen"] zu erkennen).
Finde ich auch toll, dass du das machst, denn viele lernen mit Visualisierungen und das ist ok so.
 
NAja laut Aufgabe sollst du die Prozedur replaceAll ja selber schreiben und nicht die fertige aus der Java Lib benutzen. Das wäre ja ein wenig einfach oder?
In die Aufgabenstellung steht dass ich nur '' import java.util.Arrays '' benutzen kann. Btw was meinst du mit 'selber schreiben' ?
DerWissende und Flown - Vielen Dank für die Information, aber es ist ein bisschen kompliziert für mich ;/
 

Neue Themen


Zurück
Oben