mannni Geschrieben 11. Oktober 2010 Geschrieben 11. Oktober 2010 Hallo ich habe sozusagen gerade erst mit der Java programmierung angefangen. Ich habe die Aufgabe bekommen ein Programm zu schreiben das 8 verschiedene Lottozahlen zw. 1 und 49 ausgibt (incl. Supperzahl und Zusatzzahl). So jetzt kommt mein Problem: Ich soll eine extra Methode schreiben wo die arrayd in denen die zahlen liegen sortiert werden. Das wäre ja nicht das problem. Jedoch muss die sortierung wie folgt aussehen: Neues Array erstellen --> Die kleinste zahl herausfinden und an stelle 1 schreiben --> Die zahl zurückgeben --> An die erste stelle des alten Arrays schreiben --> Die 1. stelle des neuen arrays auf 100 setzen damit wieder die kleinste auf zahl 1 ist. Ich habe keinen plassen schimmer wie das gehen soll, wie ich anfangen soll, was ich brauche etc. Kann mir da vlt jemand helfen? mfg manni Zitieren
Ulfmann Geschrieben 11. Oktober 2010 Geschrieben 11. Oktober 2010 Die kleinste zahl herausfinden und an stelle 1 schreiben --> Die zahl zurückgeben --> An die erste stelle des alten Arrays schreiben --> Die 1. stelle des neuen arrays auf 100 setzen damit wieder die kleinste auf zahl 1 ist. Entweder versteh ich dich hier falsch oder du beschreibst nicht vernünftig, was du machen sollst. Die 1. Stelle des neuen Arrays auf 100 setzen? Wozu? Schonmal Bubblesort angeschaut? Das ist im Normalfall, das Erste, worauf man im Bereich Sortieralgorithmen stößt. Zitieren
mannni Geschrieben 11. Oktober 2010 Autor Geschrieben 11. Oktober 2010 Nein, das ist schon richtig. Aber ich musste auch erst nachfragen. Ich muss immer die kleinste Zahl an die erste stelle setzen und zurückgeben. Wenn ich jetzt die kleinste zahl habe und zurückgebe, dann kann ich nicht erneut die kleinste zahl bestimmen sondern muss die zweitkleinste bestimmen. Deshalb gebe ich die kleinste zahl ins alte array zurück und setze ich sie auf 100 damit sie wieder weg ist und ich erneut die kleinste bestimmen kann. Verstehst du? Aber ich habe keine ahnung wie das gehen soll Ich kann das nicht mit Bubblesort machen. Ich soll die Aufgabe wie beschreiben lösen. Zitieren
Wurmi Geschrieben 11. Oktober 2010 Geschrieben 11. Oktober 2010 (bearbeitet) Ich kann das nicht mit Bubblesort machen. Ich soll die Aufgabe wie beschreiben lösen. Bubblesort finde ich keinen guter Algorithmus, ich glaube er nur deshalb so populär, weil der Name an ein frisch gezapftes Bier erinnert. Ich würde selection-sort nehmen, den finde ich intuitiver. Laufzeitbetrachtungen sind bei ein paar Lottozahlen irrelevant. Aber mit Deiner Aufgabenstellung bin ich richtig verwirrt. Das ist quer durch die Brust in´s Knie geschossen. Will Dich da einer schikanieren oder versteht er selbst nicht, wie man sortiert? Bearbeitet 11. Oktober 2010 von Wurmi Zitieren
Werwofl Geschrieben 12. Oktober 2010 Geschrieben 12. Oktober 2010 Nein, das ist schon richtig. Aber ich musste auch erst nachfragen. Ich muss immer die kleinste Zahl an die erste stelle setzen und zurückgeben. Wenn ich jetzt die kleinste zahl habe und zurückgebe, dann kann ich nicht erneut die kleinste zahl bestimmen sondern muss die zweitkleinste bestimmen. Deshalb gebe ich die kleinste zahl ins alte array zurück und setze ich sie auf 100 damit sie wieder weg ist und ich erneut die kleinste bestimmen kann. Verstehst du? Aber ich habe keine ahnung wie das gehen soll Ich kann das nicht mit Bubblesort machen. Ich soll die Aufgabe wie beschreiben lösen. Also sollst du doch sortieren. Warum sollte das mit dem Bubblesort nicht gehen? @Wurmi: Natürlich ist der Bubblesort kein guter Algorithmus weil er einfach unnötig viel durchläuft. Aber einem Anfänger direkt zu sagen benutz einen Selction- oder Insertion-Sort halte ich für die falsch herangehensweise. Zitieren
lilith2k3 Geschrieben 12. Oktober 2010 Geschrieben 12. Oktober 2010 Mal abgesehen davon, dass ich die obige Vorgehensweise im Moment gerade nicht durchblicke; finde ich es die beste Vorgehensweise mit garantiertem Lerneffekt: überlege Dir selbst, wie "Sortieren" funktioniert und schreibe ein Programm, was "sortiert". Jeder hat eine intuitive Vorstellung davon, wie "Sortieren" funktioniert. Das Ergebnis ist zwar kein Algorithmus, der mit n·log n Laufzeit aufwarten kann, aber a) funktioniert er und wird das algorithmische Denken geschult :] Anstelle der beiden Arrays würde eine temporäre variable, die genau ein zeichen puffern kann, ausreichen ... aber heute hat man ja Speicher satt, also sauen wir mal damit rum. Zitieren
Ezra Geschrieben 12. Oktober 2010 Geschrieben 12. Oktober 2010 Ich verstehe das Vorgehen schon. Sobald die kleinste Zahl gefunden und ins neue Array geschrieben wurde, wird die Zahl selbst (also der Arrayinhalt) im alten Array auf 100 erhöht, so dass sie in Folge nicht mehr als kleinste Zahl gefunden wird. Das funktioniert nur, weil die Zahlen nie größer als 49 werden. @mannni: Mach eins nach dem Anderen. Das erste, was Du brauchst, ist eine Funktion, die Dir die kleinste Zahl irgendeines Arrays bestimmt. Würdest Du das hinbekommen? Zitieren
mannni Geschrieben 14. Oktober 2010 Autor Geschrieben 14. Oktober 2010 Ja, das würde ich hinbekommen. Dafür reichen denke ich 2 for schleifen, die einfach alle zahlen nacheinander miteinander vergleichen. Mein Problem ist auch, das ich nicht weiß wie ich es machen soll die zahlen von dem ersten array in ein zweites zu bekommen. Weil das zweite ist ja in einer anderen methode. Das wäre mein erstes problem. Dann schau ich weiter. Irgendwelche probleme werden sicher noch auftreten. Ich kann ja dann mal den vollständigen quelltext posten. Zitieren
Ezra Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 Eine Schleife reicht aus. Mein Problem ist auch, das ich nicht weiß wie ich es machen soll die zahlen von dem ersten array in ein zweites zu bekommen. Weil das zweite ist ja in einer anderen methode. Dafür wär Code ganz praktisch. Natürlich musst Du die Arrays irgendwo zusammen haben. Wie das am günstigsten geht, hängt von Deinem bisherigen Aufbau ab. Zitieren
mannni Geschrieben 15. Oktober 2010 Autor Geschrieben 15. Oktober 2010 public class lottoziehung { public static void main(String[] args) { int Array1[] = new int[7]; // Array1 wird erstellt for (int i = 0; i < 7;) { Array1[i] = (int)(Math.random()*49) + 1; //Zufallszahlen werden ermittelt boolean found = false; //Duplikate werden entfernt for (int j = 0; j < i; j++) { if (Array1[i] == Array1[j]) { found = true; break; } } if (found == false) { i++; } } meinSortierenVersionA(Array1); //Methode Sortieren for (int k = 0; k < 6; k++) { //Ab hier beginnt die Ausgabe System.out.println(Array1[k]); } for (int s = 6; s < 7; s++) { System.out.println("Die zusatzzahl ist: " + Array1[s]); } for (int z = 0; z <1;z++) { int superzahl = (int)(Math.random()*9) + 1; System.out.println("Die Superzahl ist: " + superzahl); } } public static int[] meinSortierenVersionA (int[] sortieren) { int Array2[] = new int[7]; //Array 2 wird erstellt return Array2; } } So, das ist der bisherige Quelltext. Mein erstes problem ist jetzt: Wie bekomme ich die Zahlen die in Array1 gespeichert sind in Array 2 hinein? Oder vlt reicht es auch einfach das Array1 in die methode zu kopieren, aber wie? Gibt es dafür irgend ein Befehl? Zitieren
Ezra Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 Du hast Array2 schon in der Methode, da Du es als Parameter übergibst. Es heißt dort aber sortieren (siehe Parameter). Ich appelliere an dieser Stelle außerdem an die Code Conventions. Variablennamen sollten kleingeschrieben werden, Klassen dagegen groß. Zitieren
mannni Geschrieben 15. Oktober 2010 Autor Geschrieben 15. Oktober 2010 uups das liegt daran das das arrayvorher sortieren hieß, habe es allerdings der übersichthalber umbenannt. Okay, ich werds gleich ändern. Also jetzt muss ich die kleinste zahl herausfinden. Ich werde demnächst mal den kompletten versuch posten. Bin aber übers wochenende weg also danach dann danke schonmal Zitieren
Der_Lampe Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 for (int s = 6; s < 7; s++) { System.out.println("Die zusatzzahl ist: " + Array1[s]); warum nimmst du hier ne for schleife? anstatt System.out.println("Die zusatzzahl ist: " + Array1[6]); zu schreiben und kleiner tipp du kannst in for schleifen immer wieder i nehmen ausser wenn du sie schachtelst int Array2[] meinst du int[] Array2? ausserdem solltest du berücksichtigen dass deine klasse ein int array zurückgibt du es aber nirgends verwendest. meinSortierenVersionA(Array1); //Methode Sortieren von daher wenn dann Array1=meinSortierenVersionA(Array1); ich ducke mich schonmal falls ich hier mist erzähle da ich eigentlich bis jetzt kaum java erfahrung habe, zwar in c++ schon 4 jahre aber eben java erst 2 monate :floet: Zitieren
mannni Geschrieben 15. Oktober 2010 Autor Geschrieben 15. Oktober 2010 Nein stimmt schon, aber solche fehler fallen mir imer erst dann auf wenn ich drauf aufmerksam gemacht werde. Danke für den tipp mit dem i Die sortiermethode kam erst dazu als ich die ausgabe schon geschreiben hatte. Natürlich wird das zurückgegebene Array noch verwendet. Danke Zitieren
Der_Lampe Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 zu dem sortieren... for(int i=0;i<Array1.length;i++) { for (int j=i;j<Array1.length;j++) { if (Array1[i]>Array1[j]) { tempint=Array1[i]; Array1[i]=Array1[j]; Array1[j]=tempint; } } } als kleinen denkanstoß :floet: sollte funktionieren...ewig keine sortieralgorithmen mehr gemacht ... :old Zitieren
Ulfmann Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 Ich hab 3 Sachen: 1. Ob "int [] meinArray" oder "int meinArray []" ist egal. 2. Ich möchte dich darauf aufmerksam machen, dass du dir das Programmierleben selbst schwer machst, wenn du missverständliche Variablenbezeichungen verwendest. "meinSortierenVersionA" ist - mit Verlaub - eine grauenhafte Benennung einer Methode. Wie wäre es mit "sortieren"? Deine beiden Arrays, die du am Ende hast, nenne einfach "sorted" und "unsorted". So weiß jeder sofort, was da zu erwarten ist. 3. Deine Sortiermethode tut noch nichts. Das ist doch erst der spannende Teil. @Lampe: Warum nimmst du ihm den Lerneffekt? Zitieren
Der_Lampe Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 das ist doch nen piepeinfacher sortieralgorithmus den man theoretisch nach 5min suche im inet finden würde... wenn er wirklich was lernen will dann hockt er sich dahinter und versucht zu verstehen was die code zeilen machen anstatt nur stur abzutippen :eek somit lernt er doch auch was...und meiner ansicht nach sogar mindestens genauso viel als wenn er irgendwas halb funktionierendes zusammenschustert... :floet: mir haben meinertage auch solche "denkansätze" sehr geholfen wenn ich nicht weiter wusste... :hells: Zitieren
Ulfmann Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 Er könnte es aber auch erstmal allein versuchen und ggf. im Anschluss daran gucken, wo er Denkfehler hat. Zitieren
Der_Lampe Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 es zwingt ihn ja auch keiner meine lösung zu nehmen... dafür is das forum doch da um hilfe zu bekommen.... oder etwa nicht?! :confused: Zitieren
Ulfmann Geschrieben 15. Oktober 2010 Geschrieben 15. Oktober 2010 dafür is das forum doch da um hilfe zu bekommen.... oder etwa nicht?! :confused: Das seh ich in diesem Zusammenhang etwas kritischer. Hilfe ja - Lösung vorkauen nicht. Aber das hat nichts mehr mit dem Thema zu tun. Zitieren
kylt Geschrieben 16. Oktober 2010 Geschrieben 16. Oktober 2010 Sorry, dass ich euch in euerer Diskussion störe, aber hättet Ihr ein Problem damit die Variablen in den Beispielen klein zu Schreiben ("Array")? -> Vielleicht reagiere ich auch gerade nen bisschen empfindlich darauf, 2000 Zeilen unkommentierten Quellcode von einem Nonnative-Java-Entwickler durchgegangen... Zitieren
mannni Geschrieben 19. Oktober 2010 Autor Geschrieben 19. Oktober 2010 Ja hast recht. ich werde den Methodennamen und die Arrays umbenennen. @ Lampe: Danke Ich denke ich habe deien Algorithmus verstanden. Ich habe erstmal eine andere Aufgabe bekommen. Wenn auf diese Aufgabe zurückgegriffen wird, poste ich den vollendeten Quellode hier. Ich denke ich werde dann nocheinmal versuchen den algorithmus selbst zu schreiben. Danke an alle für die Hilfe Bei fragen melde ich mich einfach nocheinmal lg Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.