Hallo in die Runde,
ich weiß nicht ob der Titel schon aussagekräftig genug ist, aber ich habe folgendes vor:
Gegeben ist ein String Array oder eine ArrayListe (bei meiner jetzigen Implementierung nutze ich die Liste) und in dieser Liste bzw in dem String Array sind verschiedene Strings gespeichert. Das könnte nun etwa folgendermaßen aussehen:
{"A", "B", "AB", "C", "AC", "ABC"}
Ich hoffe ich kann das sprachlich richtig rüberbringen (mathematisch wäre das eher weniger das Problem, nur sprachlich ist das was ich jetzt sagen möchte vielleicht nicht so exakt). Ich möchte nun die Obermenge dieses String Arrays bzw. dieser Liste ermitteln. Jetzt könnte man ja auf die Idee kommen mit dem Contains Befehl zu Arbeiten für folgendes Beispiel würde das auch funktionieren: "A", "B", "AB", "BC", "ABC". ABC ist dann die gemeinsame Obermenge. Jetzt hatte ich das Beispiel vom Anfang extra so komisch gestellt, denn der Contains Befehl würde im ersten Fallbeispiel "A", "B", "AB", "C", "AC", "ABC", nicht korrekt arbeiten. Siehe hierzu AC und ABC, in der Mengennotation ausgedrückt {A,C}, {A,B,C}, hier erkennt man eigentlich sofort, dass ABC die Obermenge ist. Der Computer erkennt das leider nicht so gut, zumindest mit dem Contains Befehl nicht
Was ich nun gerne machen Möchte, ist mir die Obermenge von verschiedenen Eingaben ausgeben zu lassen, OHNE dabei komplexere Programmier-Konstrukte zu verwenden. Ich möchte das Ganze so simpel wie möglich halten. Darum verwende ich auch nur die aller notwendigsten Methoden. Ich habe hier auch schon eine erste Version auf die Beine gestellt, die mir allem Anschein nach zuurteilen auch die richtige Ausgabe liefert. Für die Array Liste habe ich mich entschieden, weil ich mir das an dieser Stelle etwas einfacher machen wollte. Ich würde das aber auch gerne mal mit einem fixen String Array versuchen, wobei ich dann mit Remove ein Problem bekomme.
Ich bin nun gewissermaßen auf der Suche nach einer Code Optimierung meines aktuellen Codes. Wichtig ist mir dabei, dass alles einfach bleibt. Was ich auf jedenfall vermeiden möchte ist, dass nun irgendeine Bibliothek vorgeschlagen wird. Ich möchte also wirklich mit den Java Basics arbeiten und dabei immer noch etwas performantes erzeugen. Ich bin also durchaus an einer Optimierung und einer entsprechenden Implementierung unter Verwendung eines String Arrays oder einer Liste interessiert (Die Listenimplementierung (siehe aktuellen Code), habe ich verwendet, da ich hier den netten remove Befehl verwenden konnte. Mit einem String Array ist das vllt. schwerer (aber es interessiert mich)).
Hier einmal meine ersten Gehversuche:
Ich würde mich sehr über eure Meinungen und Ansätze/Verbesserungen/Optimierungen freuen und freue mich jetzt erstmal auf mögliche Antworten. Ich hoffe auch, es ist einigermaßen verständlich was ich überhaupt vorhabe, falls nicht, kann ich das auch gerne noch etwas präzisieren. Ich bedanke mich erstmal bis hierhin!
ich weiß nicht ob der Titel schon aussagekräftig genug ist, aber ich habe folgendes vor:
Gegeben ist ein String Array oder eine ArrayListe (bei meiner jetzigen Implementierung nutze ich die Liste) und in dieser Liste bzw in dem String Array sind verschiedene Strings gespeichert. Das könnte nun etwa folgendermaßen aussehen:
{"A", "B", "AB", "C", "AC", "ABC"}
Ich hoffe ich kann das sprachlich richtig rüberbringen (mathematisch wäre das eher weniger das Problem, nur sprachlich ist das was ich jetzt sagen möchte vielleicht nicht so exakt). Ich möchte nun die Obermenge dieses String Arrays bzw. dieser Liste ermitteln. Jetzt könnte man ja auf die Idee kommen mit dem Contains Befehl zu Arbeiten für folgendes Beispiel würde das auch funktionieren: "A", "B", "AB", "BC", "ABC". ABC ist dann die gemeinsame Obermenge. Jetzt hatte ich das Beispiel vom Anfang extra so komisch gestellt, denn der Contains Befehl würde im ersten Fallbeispiel "A", "B", "AB", "C", "AC", "ABC", nicht korrekt arbeiten. Siehe hierzu AC und ABC, in der Mengennotation ausgedrückt {A,C}, {A,B,C}, hier erkennt man eigentlich sofort, dass ABC die Obermenge ist. Der Computer erkennt das leider nicht so gut, zumindest mit dem Contains Befehl nicht
Was ich nun gerne machen Möchte, ist mir die Obermenge von verschiedenen Eingaben ausgeben zu lassen, OHNE dabei komplexere Programmier-Konstrukte zu verwenden. Ich möchte das Ganze so simpel wie möglich halten. Darum verwende ich auch nur die aller notwendigsten Methoden. Ich habe hier auch schon eine erste Version auf die Beine gestellt, die mir allem Anschein nach zuurteilen auch die richtige Ausgabe liefert. Für die Array Liste habe ich mich entschieden, weil ich mir das an dieser Stelle etwas einfacher machen wollte. Ich würde das aber auch gerne mal mit einem fixen String Array versuchen, wobei ich dann mit Remove ein Problem bekomme.
Ich bin nun gewissermaßen auf der Suche nach einer Code Optimierung meines aktuellen Codes. Wichtig ist mir dabei, dass alles einfach bleibt. Was ich auf jedenfall vermeiden möchte ist, dass nun irgendeine Bibliothek vorgeschlagen wird. Ich möchte also wirklich mit den Java Basics arbeiten und dabei immer noch etwas performantes erzeugen. Ich bin also durchaus an einer Optimierung und einer entsprechenden Implementierung unter Verwendung eines String Arrays oder einer Liste interessiert (Die Listenimplementierung (siehe aktuellen Code), habe ich verwendet, da ich hier den netten remove Befehl verwenden konnte. Mit einem String Array ist das vllt. schwerer (aber es interessiert mich)).
Hier einmal meine ersten Gehversuche:
Java:
import java.util.ArrayList;
public class TestKlasse {
public static void main(String[] args) {
String[] str1 = {"D","B","BC","CB","C","AB","AC","ABC"};
ArrayList<String> ls = new ArrayList<String>();
for(int i = 0; i < str1.length; i++) {
ls.add(str1[i]);
}
Tester(ls);
for(int i=0; i<ls.size(); i++) {
System.out.println(ls.get(i));
}
}
public static void Tester(ArrayList<String> ls) {
int vglAnzahl = 0;
for(int i = 0; i < ls.size(); i++) {
for(int j = 0; j < ls.size(); j++) {
if(i != j) {
for(int k = 0; k < ls.get(i).length(); k++) {
for(int l = 0; l < ls.get(j).length(); l++) {
if(ls.get(i).charAt(k) == ls.get(j).charAt(l)) {
System.out.println("Char gleich...");
vglAnzahl++;
if(vglAnzahl == ls.get(j).length()) {
System.out.println("Empfehlung : " + ls.get(j) + " löschen");
ls.remove(j);
vglAnzahl = 0;
l = 0;
k = 0;
i = 0;
j = 0;
}
}
}
}
}
vglAnzahl = 0;
}
}
}
}
Ich würde mich sehr über eure Meinungen und Ansätze/Verbesserungen/Optimierungen freuen und freue mich jetzt erstmal auf mögliche Antworten. Ich hoffe auch, es ist einigermaßen verständlich was ich überhaupt vorhabe, falls nicht, kann ich das auch gerne noch etwas präzisieren. Ich bedanke mich erstmal bis hierhin!
Zuletzt bearbeitet: