Sortera säljare med bubblesort C#

Permalänk
Medlem

Sortera säljare med bubblesort C#

Hej! Håller på att bli galen på denna koden som jag försöker dra ihop och speciellt bubblesort.

Detta är outputen jag försöker få:

Ex.
Namn Persnr Distrikt Antal
Kalle Anka 4503038990 Piteå 173
1 säljare har nått nivå 3: 100-199 artiklar

Musse Pigg 3502038964 Boden 202
Snobben 7805055673 Luleå 203
2 säljare har nått nivå 4: över 199 artiklar

Jag har alltså två problem, först med bubbel sorteringen men sen även att när jag registrerar tex 3 nya säljare så blir all info om just den första säljaren helt blankt. Men dem andra två säljare som skrivs ut efter så funkar det perfekt. Det funkar också bra när jag bara vill lägga till en säljare. Känns som det är något fel på indexingen av arrayen eller liknande. Så skulle verkligen uppskatta alla hjälp jag kan få.
Här kommer min kod:

using System; using System.Diagnostics.CodeAnalysis; using System.IO; namespace simon2 { class Program { public struct Säljare : IComparable<Säljare> { public String Namn; public String Personnummer; public String Distrikt; public int AntalSåldaArtiklar; public int CompareTo([AllowNull] Säljare other) { return AntalSåldaArtiklar - other.AntalSåldaArtiklar; } } [STAThread] static void Main(string[] args) { System.Console.Write("Hur många säljare vill du registrera?:"); string antalSäljare = System.Console.ReadLine(); System.Console.WriteLine("Registrera säljare:"); int Antalsäljare = int.Parse(antalSäljare); Säljare[] säljare = new Säljare[Antalsäljare]; int nivå1 = 0; int nivå2 = 0; int nivå3 = 0; int nivå4 = 0; void BubbleSort<Säljare>(Säljare[] list) where Säljare : IComparable<Säljare> { for (int i = 0; i < list.Length; i++) { for (int j = 0; j < list.Length - 1 - i; j++) { if (list[j].CompareTo(list[j + 1]) > 0) { Säljare tmp = list[j + 1]; list[j + 1] = list[j]; list[j] = tmp; } } } } for (int i = 0; i < Antalsäljare; i++) { System.Console.Write(" Ange Namn: "); säljare[i].Namn = System.Console.ReadLine(); System.Console.Write(" Ange Personnummer: "); säljare[i].Personnummer = System.Console.ReadLine(); System.Console.Write(" Ange Distrikt: "); säljare[i].Distrikt = System.Console.ReadLine(); System.Console.Write(" Ange antal Artiklar: "); säljare[i].AntalSåldaArtiklar = int.Parse(System.Console.ReadLine()); Console.WriteLine("\n"); if (säljare[i].AntalSåldaArtiklar < 50) { nivå1 = 0; nivå1++; } else if (säljare[i].AntalSåldaArtiklar >= 50 && säljare[i].AntalSåldaArtiklar < 100) { nivå2 = 0; nivå2++; } else if (säljare[i].AntalSåldaArtiklar >= 100 && säljare[i].AntalSåldaArtiklar < 200) { nivå3 = 0; nivå3++; } else if (säljare[i].AntalSåldaArtiklar > 200) { nivå4 = 0; nivå4++; } BubbleSort(säljare); } StreamWriter sw = new StreamWriter("C:Test.txt"); Console.Clear(); foreach (Säljare item in säljare) { Console.WriteLine("\n"); Console.WriteLine("Namn: " + item.Namn); Console.WriteLine("Personnummer: " + item.Personnummer); Console.WriteLine("Distrikt: " + item.Distrikt); Console.WriteLine("Antal sälj: " + item.AntalSåldaArtiklar); sw.WriteLine("\n"); sw.WriteLine("Namn: " + item.Namn); sw.WriteLine("Personnummer: " + item.Personnummer); sw.WriteLine("Distrikt: " + item.Distrikt); sw.WriteLine("Antal sälj: " + item.AntalSåldaArtiklar); if (item.AntalSåldaArtiklar < 50) { Console.WriteLine("\nAntal Säljare på nivå 1: " + nivå1); sw.WriteLine("\nAntal Säljare på nivå 1: " + nivå1); Console.WriteLine("-----------------------------"); } else if (item.AntalSåldaArtiklar >= 50 && item.AntalSåldaArtiklar < 100) { Console.WriteLine("Antal Säljare på nivå 2: " + nivå2); sw.WriteLine("Antal Säljare på nivå 2: " + nivå2); Console.WriteLine("-----------------------------"); } else if (item.AntalSåldaArtiklar >= 100 && item.AntalSåldaArtiklar < 200) { Console.WriteLine("Antal Säljare på nivå 3: " + nivå3); sw.WriteLine("Antal Säljare på nivå 3: " + nivå3); Console.WriteLine("-----------------------------"); } else if (item.AntalSåldaArtiklar > 200) { Console.WriteLine("Antal Säljare på nivå 4: " + nivå4); sw.WriteLine("Antal Säljare på nivå 4: " + nivå4); Console.WriteLine("-----------------------------"); } sw.Flush(); } Console.ReadKey(); } } }

Permalänk

Snälla använd kodtagg för att få koden att se någorlunda normal ut. Och indentera också. Sen förstår jag att du använder C#, och att det kanske är tolererbart att använda icke-ASCII karaktärer, men snälla skriv på engelska istället; funktionerna har engelska namn och då bör allt vara på engelska.

Om du förbättrar detta tror jag att fler kommer att vilja hjälpa dig.

Permalänk

Till problemet, kan det ligga i att du inte löper över hela listan? Jag menar då att problemet kan ligga att du exempelvis skriver

for (int ix = 0; ix < list.Length - 1; ix++)

där jag tror att du egentligen menar

for (int ix = 0; ix < list.Length; ix++)

Permalänk
Medlem
Skrivet av xGreenRed:

Snälla använd kodtagg för att få koden att se någorlunda normal ut. Och indentera också. Sen förstår jag att du använder C#, och att det kanske är tolererbart att använda icke-ASCII karaktärer, men snälla skriv på engelska istället; funktionerna har engelska namn och då bör allt vara på engelska.

Om du förbättrar detta tror jag att fler kommer att vilja hjälpa dig.

Jag snyggade till det lite nu. Visste inte att det fanns kodtagg innan därför jag inte använde det. Men som du säger engelska är bäst att använda men i detta fallet så står det i beskrivingen att jag ska använda mig av svenska för en del saker. Endast därför jag gör det.

Skrivet av xGreenRed:

Till problemet, kan det ligga i att du inte löper över hela listan? Jag menar då att problemet kan ligga att du exempelvis skriver

for (int ix = 0; ix < list.Length - 1; ix++)

där jag tror att du egentligen menar

for (int ix = 0; ix < list.Length; ix++)

Jag testade denna lösningen men den ger mig error : System.IndexOutOfRangeException
HResult=0x80131508
Message=Index was outside the bounds of the array.

Permalänk
Vila i frid
Skrivet av Samson42:

System.IndexOutOfRangeException

Då sätter du en brytpunkt vid lämpligt ställe och stegar igenom koden med debuggern och kikar på variablers värden som används och noterar dessa värden när det smäller så du vet vad du gjort för tankevurpa.

Permalänk
Medlem

Jag hittade problemet! Hade instansierat bubblesort metoden inuti en for loop.... Tack för hjälpen iaf alla!

Permalänk
Medlem

Hej

var ska den ligga annars ?

tack