Kojote Geschrieben 27. August 2017 Melden Share Geschrieben 27. August 2017 Guten Morgen! Ich bastel gerade an einer Lösungsabfrage und habe ein Array mit Integer Zahlen. Zur Lösung müssen alle Integer Zahlen einen unterschiedlichen Wert haben. Habe mir mal das zusamen gebaut: for (int i = 0; i < zahlenArray.Length - 1; ++i) { for (int j = i + 1; j < zahlenArray.Length; ++j) { if (zahlenArray[i] != zahlenArray[j]) { Debug.Log("Alle Ungleich - Lösung"); } else { Debug.Log("Gleiche - keine Lösung"); } } } Wenn alle Werte gleich sind, kommt die Meldung, dass es keine Lösung gibt, was auch richtig ist. Normalerweise sollte nun, sobald alle Ungleich sind, die Lösung ausgerufen werden. Problem ist nun, dass, sobald nur eine Zahl ungleich ist und alle anderen gleich sind, es auch zu einer Lösung kommt. Ich möchte jedoch, dass es nur zu einer Lösung kommt, wenn alle Zahlen ungleich sind. Habt ihr da eine Idee? Danke schon mal! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 27. August 2017 Melden Share Geschrieben 27. August 2017 Ja, es reicht nicht aus, nur die 2 Nachbarn zu vergleichen, denn die gleichen Zahlen können ja an zufälligen Stellen im Array sein. Du solltest das Array einfach kopieren und bei der Kopie ersteinmal die Zahlen sortieren. Der einfachste Sortieralgorythmus geht so, dass du die 1. Zahl mit der 2. Zahl vergleichst. Ist die 1. Zahl größer als die 2. dann tauschst du sie im Array und fährst nun eine Stelle weiter. Also jetzt die 2. Zahl mit der 3. Zahl vergleichen, ggf. Tauschen oder einfach weiter fahren. Das Array muss natürlich schon sehr oft durchfahren werden, bis so alle Plätze passen. Wann du fertig bist, erkennst du daran, dass du kein Pärchen mehr tauschen musstest. Wärend dieser Sortierung bekommst du die Information, ob zwei Zahlen gleich sind, denn du fragst nicht nur > oder < ab, sondern auch noch == . Sobald zwei Zahlen gleich sind, brichst du ab. Ist dein Array sortiert, also die letzte Durchfahrt hat keine Zahlen mehr getauscht, dann sind in deinem Array nur unterschiedliche Zahlen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 27. August 2017 Autor Melden Share Geschrieben 27. August 2017 So ganz mit dem sortieren hab ich das nicht hin bekommen, ich habs nun so probiert und scheint zu funktionieren: Array.Copy(zahlenArray, loesungsArray, zahlenArray.Length); int doppelteInZahlen = 0; for (int i = 0; i < zahlenArray.Length - 1; i++) { for (int j = i + 1; j < loesungsArray.Length; j++) { if (zahlenArray[i] == loesungsArray[j]) { doppelteInZahlen++; } } } Debug.Log(doppelteInZahlen); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 27. August 2017 Melden Share Geschrieben 27. August 2017 Ja, ist doch auch gut. Deine Suche ist sogar meist schneller als mein Vorschlag. Kommt darauf an, wie groß die Zahlenpaare sind und wo sie liegen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
HortusLongus Geschrieben 28. August 2017 Melden Share Geschrieben 28. August 2017 Und wenn man array.Find() bzw. array.FindAll() bzw. array.FindLast() bzw. array.FindIndex() bzw. array.FindLastIndex() benutzen würde, würde man sogar erleben, wie bequem und flott sowas zu lösen ist. ;-) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 28. August 2017 Autor Melden Share Geschrieben 28. August 2017 Über Performance kann ich mich bisher zum Glück nicht beschweren, HortusLonggus. Wie würde das funktionieren? Kenne die Befehle leider nicht. ^^ Eventuell hilfst du mir gerade mit den Methoden bei einem neuen Problem: for (int i = 0; i < zahlenArray.Length - 1; i++) { for (int j = i + 1; j < loesungZahlenArray.Length; j++) { if (zahlenArray[i] == loesungZahlenArray[j]) { doppelteInZahlen++; if (spielMenue.hilfe == 1) { zahlenTextArray[i].color = new Color32(232, 0, 0, 255); zahlenTextArray[j].color = new Color32(232, 0, 0, 255); } } else { if (spielMenue.hilfe == 1) { zahlenTextArray[j].color = new Color32(255, 255, 255, 255); } } } } Ich möchte gerne, dass alle Zahlen, die doppelt in meinem Array vorkommen farblich markiert werden. Bisher habe ich das Problem, dass entweder zu wenige oder zu viele Zahlen farblich markiert werden. Wie bekommt man so was hin? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
HortusLongus Geschrieben 28. August 2017 Melden Share Geschrieben 28. August 2017 "Kenne ich nicht" soll ja ein Problem sein, das man abstellen kann, habe ich gehört. ;-) Mal eine Lösung mit FindAll, die dir das erklärt, direkt aus der Microsoft-Hilfe übernommen: using System; using System.Collections.Generic; public class Example { public static void Main() { // Get an array of n random integers. int[] values = GetArray(50, 0, 1000); int lBound = 300; int uBound = 600; int[] matchedItems = Array.FindAll(values, x => x >= lBound && x <= uBound); for (int ctr = 0; ctr < matchedItems.Length; ctr++) { Console.Write("{0} ", matchedItems[ctr]); if ((ctr + 1) % 12 == 0) Console.WriteLine(); } } private static int[] GetArray(int n, int lower, int upper) { Random rnd = new Random(); List<int> list = new List<int>(); for (int ctr = 1; ctr <= n; ctr++) list.Add(rnd.Next(lower, upper + 1)); return list.ToArray(); } } // The example displays output similar to the following: // 542 398 356 351 348 301 562 599 575 400 569 306 // 535 416 393 385 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 28. August 2017 Autor Melden Share Geschrieben 28. August 2017 Ja, dass hatte ich mir vorhin auch schon durchgelesen, so richtig versteh ichs leider noch nicht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 28. August 2017 Melden Share Geschrieben 28. August 2017 Mit den ganzen Find Befehlen kann man natürlich sehr gut Dinge finden, die man sucht. Dafür muss man aber leider vorher das Ding kennen/ definieren. Und das ist ja genau das Proble hier. Man hat ein Array mit zufälligen Zahlen, wobei evtl. einige doppelt sind. Diese doppelten kennt man aber noch nicht und somit kann ich per Find erstmal nicht sagen, nach was ich überhaupt suche. Also müsste ich eine Stelle im Array auslesen, und diesen Wert dann im Array wieder mit FindAll suchen. Das müsste ich natürlich mit der nächsten Zahl wiederholen, usw. Irgendwie sehe ich da jetzt nicht so den Vorteil. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 28. August 2017 Melden Share Geschrieben 28. August 2017 Probier mal so: for (int i = 0; i < zahlenArray.Length - 1; i++) { // Erst einmal alles auf "nicht doppelt" setzen if (spielMenue.hilfe == 1) { zahlenTextArray[i].color = new Color32(255, 255, 255, 255); } for (int j = i + 1; j < loesungZahlenArray.Length; j++) { if (zahlenArray[i] == loesungZahlenArray[j]) { // "Doppelte Zahlen" an Stelle i über das Lösungsarray gefunden doppelteInZahlen++; if (spielMenue.hilfe == 1) { zahlenTextArray[i].color = new Color32(232, 0, 0, 255); } } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
HortusLongus Geschrieben 29. August 2017 Melden Share Geschrieben 29. August 2017 vor 18 Stunden schrieb malzbie: Mit den ganzen Find Befehlen kann man natürlich sehr gut Dinge finden, die man sucht. Dafür muss man aber leider vorher das Ding kennen/ definieren. Und das ist ja genau das Proble hier. Man hat ein Array mit zufälligen Zahlen, wobei evtl. einige doppelt sind. Diese doppelten kennt man aber noch nicht und somit kann ich per Find erstmal nicht sagen, nach was ich überhaupt suche. Also müsste ich eine Stelle im Array auslesen, und diesen Wert dann im Array wieder mit FindAll suchen. Das müsste ich natürlich mit der nächsten Zahl wiederholen, usw. Irgendwie sehe ich da jetzt nicht so den Vorteil. Na ja, liest du deine eigenen Postings nicht? :-) Du hast doch in deiner ersten Antwort gleich einen möglichen Ansatz vorgeschlagen; bei dem ist mir allerdings aufgefallen, daß du dabei Sortierverrenkungen machst, die gefühlt schon zu Zuses Zeiten veraltet waren und mehr Basic sind als C#. Folgt man deinem Ansatz, schiebt man 1.) Kojotes zahlenArray in ein Array.Sort(), das man dann 2.) Array.FindAll() übergibt mit der Bedingung x==x.nachbar; schwupps, fertig. Das ist ein Zweizeiler. Wo siehst du ein Problem? Cu, Horst. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 29. August 2017 Melden Share Geschrieben 29. August 2017 vor einer Stunde schrieb HortusLongus: ..., die gefühlt schon zu Zuses Zeiten veraltet waren und mehr Basic sind als C#. Ja, das ist mein Ursprung! Ich bin kein Informatiker sondern gelernter Elektromechaniker. Basic, Assembler, und Pascal waren die wenigen Dinge, die es damals gab. Alles Andere hab ich mir selber beigebracht und somit sind mir auch nicht alle Möglichkeiten von C, Java oder c# bekannt. Aber ich lerne ja täglich dazu. Ich habe mich gestern mal mit meinem Sohn über dieses Problem ausgetauscht ( der studiert gerade Informatik) und auch er kam auf den Sort-Befehl (den du übrigens nicht erwähnt hattest) und danach dann das Überprüfen der Nachbarn. Ich sehe also keine Probleme, sonder hatte lediglich keinen Vorteil gesehen. Aber wie gesgt; ich kenne nicht alle Möglichkeiten, die es in den Programmier- oder Scriptsprachen so gibt. Deswegen erkenne ich auch nicht alle Vorteile und bau mir eben selber etwas zurecht. Ist oftmals Oldscool, funktioniert aber. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
HortusLongus Geschrieben 29. August 2017 Melden Share Geschrieben 29. August 2017 Na ja, vielleicht sind meine Ansprüche einfach zu hoch, wenn ich denke, daß bei der Antwort von jemandem, der ne Moderator-Binde trägt, schon eine gewisse Sorgfalt vorhanden sein sollte. Nebenbei, array.findall gabs schon bei Basic 3. Aber laß uns den Kram einfach beenden. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 29. August 2017 Melden Share Geschrieben 29. August 2017 Woher kommt bloß immer dieser völlig unlogische Gedanke, Mods müssten alles besser wissen als jeder andere? Der Job eines Moderatoren ist, dafür zu sorgen, dass das Forum läuft. Jemand, der noch nie im Leben programmiert hat kann hier durchaus auch Moderator sein, wenn er es möchte. Ich kriege jedes Mal Blitzherpes, wenn jemand mit so einem Stumpfsinn ankommt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 29. August 2017 Melden Share Geschrieben 29. August 2017 @HortusLongus Hehe! Etwas zu moderieren, bedeutet nicht, dass man in dem Themenbereich Meister sein muss. Ich trage die Binde auch nicht wie eine Führugspersönlichkeit sondern als Hinweis, dass ich gewisse Dinge in dem Forum tun kann oder muss, um eine gewisse Ordnung aufrecht zu halten. Aber alles was ich hier poste, was nicht mit der Organisation des Forums zu tun hat, tue ich als Privatperson. Deine Ansprüche im Bezug auf den Moderator sind also nicht zu hoch, sondern fehl am Platz. Im Bezug auf mich als Privatperson mag das schon sein, dass ich deinen Ansprüchen nicht genüge. Das macht mir jetzt aber nicht so viel aus, denn ich habe ja nichts falsches gemacht, es war halt nur nicht gut genug für dich. Dafür kann ich soo viel mehr als nur zu programmieren und deswegen kann ich den Leuten sogar in allen anderen Bereichen der Spieleerstellung mit Unity helfen. Ich bin sehr zufrieden mit mir. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.