Hallo erstmal, zur Erklärung ich beschäftige mich noch nicht all zu lange mit der Sprache C#,und habe jetzt auch schon etwas Zeit und mühen investiert eine Passende Lösung zu finden habe aber anscheinend das klassische Brett vor dem Kopf.
Habe auch Analytisch versucht dem Problem auf den Grund zu gehen was man dann auch an den dutzenden Kommentaren sehen wird,bin mir allerdings hierbei schon leicht unsicher ob ich nicht eben hierbei einen Denkfehler habe.
Nun zum eigentlichen Problem:
Ich habe einen Sortier-Algorythmus für ein Array geschrieben das 8 Elemente beinhalten soll, und das mittels Benutzer-Eingabe befüllt wird. Dieser Algorythmus bedient sich mehrerer Funktionen, und funktioniert soweit eigentlich wie er soll.,
solange der Benutzer einen Wert > 0 eintippt wird jeder der verschiedenen Werte an den richtigen Index sortiert.
Aber sobald die Eingabe einer 0 im verlauf der Abfrage auftritt entstehen Probleme in der Sortierung.
Ich hoffe sehr das mir weiter geholfen werden kann( mögliche Denkfehler aufzeigen und wenn möglich deren Lösung)
Vielen Dank im vorraus!
Habe auch Analytisch versucht dem Problem auf den Grund zu gehen was man dann auch an den dutzenden Kommentaren sehen wird,bin mir allerdings hierbei schon leicht unsicher ob ich nicht eben hierbei einen Denkfehler habe.
Nun zum eigentlichen Problem:
Ich habe einen Sortier-Algorythmus für ein Array geschrieben das 8 Elemente beinhalten soll, und das mittels Benutzer-Eingabe befüllt wird. Dieser Algorythmus bedient sich mehrerer Funktionen, und funktioniert soweit eigentlich wie er soll.,
solange der Benutzer einen Wert > 0 eintippt wird jeder der verschiedenen Werte an den richtigen Index sortiert.
Aber sobald die Eingabe einer 0 im verlauf der Abfrage auftritt entstehen Probleme in der Sortierung.
Ich hoffe sehr das mir weiter geholfen werden kann( mögliche Denkfehler aufzeigen und wenn möglich deren Lösung)
Vielen Dank im vorraus!
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
//GlobaleVariable : Das Array "numbers" erzeugt ein neues Array.
static int[] numbers = new int[8];
//BEGINN HAUPTFUNKTIONEN !!
static void Main(string[] args)
{
//Das neue Array hat maximal 8 Elemente.
for (int i = 0; i < 8; i++)
{
//Der Wert number wird in die HauptFunktion
//GetNumberFromUser(); übergeben.
int number = GetNumberFromUser();
AddNumberToArray(number);
PrintNumbers();
}
//Konsole wartet auf Eingabe des Benutzers,um das Programm zu beenden.
Console.ReadLine();
//ENDE HAUPTFUNKTIONEN !!
}
//Deklaration der HauptFunktion AddNumberToArray() die den Wert "number"
//in das Array "numbers" sortiert übergibt.
static void AddNumberToArray(int number)
{
//Der Wert "index" wird in die HilfsFunktion GetIndexToInsert(number)
//übergeben.
int index = GetIndexToInsert(number);
//Die HilfsFunktion MoveNumbers(index) wird aufgerufen
MoveNumbers(index);
//Der index des Arrays "numbers" wird dem Wert "number" Gleich gesetzt.
numbers[index] = number;
}
//HilfsFunktion zum erfassen der korrekten index Position
//des Arrays "numbers" mit hilfe des Wertes "number".
static int GetIndexToInsert(int number)
{
#region//Erzeugt eine Lokale Variable i deren Wert 0 zugewiesen bekommt.
//Es wird geschaut ob die Variable i noch in das Array "numbers" passt.
//Und wenn dem so ist wird die Variable i solange erhöht
#endregion//bis das Array voll ist.
for (int i = 0; i < numbers.Length; i++)
{
//Es wird überprüft ob die Variable i aus dem Array "numbers"
//den Wert 0 hat.
if (numbers [i] == 0)
#region//Falls ja wird es an die HauptFunktion "AddNumberToArray(number)"
//zurückgegeben das der index-0 momentan besetzt ist.
//Sollte einer der Folgenden Eingabewert 0 sein wird der index-Wert
//0 erneut vergeben,von hier an kann nur unter berückstichtigung
//der maximalen Element-möglichkeiten weiter aufsteigend Sortiert werden
//bis das Array voll ist. Allerdings wird nicht mehr vom
#endregion//kleinesten zum größten Wert Sortiert da der index-0 öfters vergeben wurde.
return i;
#region//Falls die Variable i nicht den Kleinsten Wert im Array "numbers" hat.
//Wird überprüft ob die Variable i größer ist als die
#endregion//vorhandene/n Zahl/en.
if (numbers[i] >= number)
#region//Des weiteren wird die Variable i intern an die HauptFunktion
//AddNumberToArray(number) zurückgegeben und an entsprechender
#endregion//index-Position einsortiert.
return i;
}
#region//Nach der Überprüfung wird dem Array "numbers" 1 Element abgezogen.
//Und es Überprüft die nächsten freien Elemente im Array,um die Zahlen
#endregion//des Benutzers je nach ihrer größe dem index entsprechend zu sortieren.
return numbers.Length - 1;
}
#region//HilfsFunktion zum korrekten einsetzen des Wertes "fromIndex"
//in das Array "numbers", unter berücksichtigung der freien Elemente
#endregion//und des index Wertes.
static void MoveNumbers(int fromIndex)
{
#region//Die Variable i bekommt den maximalen Wert der Elemente im
//Array "numbers" zugewiesen,und wird solange um 1 verringert,
#endregion//bis alle Elemente des Arrays aufgefüllt sind.
for (int i = numbers.Length -1; i > fromIndex; i--)
{
numbers[i] = numbers[i - 1];
}
numbers[fromIndex] = 0;
}
static int GetNumberFromUser()
#region//Deklaration der Hauptfunktion GetNumberFromUser() die,
//die Eingabewerte des Benutzers einliest,
//und speichert diese Werte im Wert "num" ab.
#endregion
{
//Fordert den Benutzer zur Eingabe eines Wertes auf.
Console.WriteLine("Bitte gib eine Zahl ein : ");
//Die Konsole liest den Eingabewert des Benutzers.
int num = int.Parse(Console.ReadLine());
//Der eingegebene Wert des Benutzers wird in die HauptFunktion
//"PrintNumbers()" bearbeitet übergeben.
return num;
}
//Die HauptFunktion "PrintNumbers()", die den Eingabewert "num"
//des Benutzers in das Array "numbers" sortiert und überarbeitet übergibt.
static void PrintNumbers()
{
//Für jeden Wert "num" im Array "numbers".
foreach (int num in numbers)
//Ausgabe des sortierten Wertes "num" mit einem
//Beistrich in das Array "numbers"
Console.Write(num + ", ");
//Erzeugt einen Zeilenumbruch, um den CW-Befehl aus der
//HauptFunktion GetNumberFromUser() besser und lesbar darzustellen.
Console.WriteLine("\n");
}
}
}
Zuletzt bearbeitet: