Zum Inhalt springen

Sortieren von Arrays


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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.

Geschrieben

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.

Geschrieben (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 von Wurmi
Geschrieben
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.

Geschrieben

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 B) 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.

Geschrieben

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?

Geschrieben

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.

Geschrieben

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.

Geschrieben

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?

Geschrieben

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ß.

Geschrieben

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 :)

Geschrieben
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:

Geschrieben

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 :)

Geschrieben

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

Geschrieben

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?

Geschrieben

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:

Geschrieben

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.

Geschrieben

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...

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...