Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Erste SchritteAlle möglichen ausgaben von 5 Zahlen als Vector
ich versuche gerade ein Programm zu schreiben mit dem ich alle 5 Zahlen in alle möglichkeiten ausgeben kann Bspw. 123456 213456,321456,432156,543216,654321 usw. bis alle möglichkeiten durch sind.
Da ich noch relativ neu in diesem Gebiet bin kann es durchaus sein das ich ein riesen schmarn gemacht hab aber deswegen bin ich ja hier
Ich freue mich über eure Vorschläge
Java:
import java.util.Random;
import java.util.Scanner;
import java.util.Vector;
public class array {
public static void main(String[] args) {
System.out.println("Bitte geben sie 5 unterschiedliche Zahlen ein: ");
Scanner s = new Scanner(System.in);
int Test = s.nextInt();
int Test1 = s.nextInt();
int Test2 = s.nextInt();
int Test3 = s.nextInt();
int Test4 = s.nextInt();
int [] eineZahl = new int[5];
eineZahl[0] = Test;
eineZahl[1] = Test1;
eineZahl[2] = Test2;
eineZahl[3] = Test3;
eineZahl[4] = Test4;
Vector vec = new Vector();
for (int i = 0; i < eineZahl.length; i++)
{
vec.addElement(eineZahl[i]);
}
Random rand = new Random();
while (vec.size() > 0)
{
int index = rand.nextInt(vec.size());
int arrayElement = (int)vec.elementAt(index);
vec.removeElementAt(index);
// und zum Beispiel ein
System.out.println("Mein Element: " + arrayElement);
}
}
}
Ja genau Aber davon ganz abgesehen, wirst du für fünf Zahlen 120 verschiedene Kombinationen erhalten. Eher du dich an die Aufgabe traust, lerne erst mal die Grundlagen der Kombinatorik, dann geht es fast von ganz allein
Ja genau Aber davon ganz abgesehen, wirst du für fünf Zahlen 120 verschiedene Kombinationen erhalten. Eher du dich an die Aufgabe traust, lerne erst mal die Grundlagen der Kombinatorik, dann geht es fast von ganz allein
Ich schlage zunächst Mal einen rekursiven Ansatz vor:
Wenn du bereits N-1 Zahlen verteilt hast, wie kannst du die N-te Zahl platzieren?
Vermutlich meinte das auch Javainner mit seinen kombinatorischen Grundlagen.
Finde die Übung sehr schön deshalb hier mal meine "Lösung"!
Leider komme ich iteraitv auf keine Lösung
Rekursiv hab ich es so gemacht und dort sind nun auch die Wiederholungen mit drin.
Vielleicht kann mir ja jemand helfen die auch noch raus zu bekommen. Man könnte das ganze dann noch in einem neuen Array übergeben doch ich hab die Ausgabe jetzt mal im else Zweig drin
Java:
public static void repeat(int[] input, int[] item, int count) {
if(count < item.length) {
for(int i=0;i<input.length;i++) {
item[count]=input[i];
repeat(input,item,count+1);
}
}
else {
int a=0;
for(int i=0;i<item.length;i++)
a = a*10+item[i];
System.out.println(a);
}
}
public static void main(String[] args) {
int[] item = new int[3];
int[] input = {1,2,3};
repeat(input,item,0);
Das Problem ist eben nur bei einer Iterativen Lösung wenn man statt 3 Variablen 5 oder 6 haben will brauch man mehr Schleifen. Wie bekommt man das hin? Ich glaube da gibt es keine Möglichkeit außer Über switches dann zu sagen ich Programmiere für die ersten 10 Variablen die 1...10 Schleifen in 10 verschiedenen Methoden die man über den Switch aufruft. Doch dann kommt der nächste und will 11 Variablen dann klappt das auch nicht mehr.
Gibt es da eine Lösung für ? Ich weiß gerade keine !
Alle Permutationen iterativ und allgemein für eine beliebig lange Input-Liste zu generieren ist wirklich nicht trivial. Hier wird eine Lösung beschrieben: http://www.quickperm.org/quickperm.html
Beispiel in Java mit String als Eingabe, bei dem alle Permutationen der Characters gebildet werden:
Java:
import java.util.function.*;
public class Permutations {
public static void permutations(String s, Consumer<String> f) {
f.accept(s);
char[] a = s.toCharArray();
int i = 1;
int[] p = new int[a.length];
while (i < a.length) {
if (p[i] < i) {
char tmp = a[i];
int j = i % 2 * p[i];
a[i] = a[j];
a[j] = tmp;
f.accept(new String(a));
p[i]++;
i = 1;
} else {
p[i++] = 0;
}
}
}
public static void main(String[] args) {
permutations("12345", System.out::println);
}
}