Schleife funktioniert nicht!

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Schleife funktioniert nicht!

    Hallo VB-Paradise Community,

    ich habe diese Schleife erstellt um 5 zufällige Zahlen zu generieren und doppelte Zahlen auszuschließen, jedoch lädt das Programm und lädt und lädt...

    Form1.cs:

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. namespace WindowsFormsApplication1
    11. {
    12. public partial class Form1 : Form
    13. {
    14. Karte[] AlleKarten = new Karte[11];
    15. Karte[] HandKarten = new Karte[6];
    16. public Form1()
    17. {
    18. InitializeComponent();
    19. }
    20. private void Form1_Load(object sender, EventArgs e)
    21. {
    22. this.KeyDown += Form1_KeyDown;
    23. this.MaximizeBox = false;
    24. LoadCards();
    25. }
    26. void Form1_KeyDown(object sender, KeyEventArgs e)
    27. {
    28. if (e.KeyCode == Keys.Escape)
    29. {
    30. Application.Exit();
    31. }
    32. }
    33. private void LoadCards()
    34. {
    35. Karte TestKarte1 = new Karte("TestKarte1", 100, Image.FromFile("data/cards/1.png"));
    36. Karte TestKarte2 = new Karte("TestKarte2", 200, Image.FromFile("data/cards/2.png"));
    37. Karte TestKarte3 = new Karte("TestKarte3", 300, Image.FromFile("data/cards/3.png"));
    38. Karte TestKarte4 = new Karte("TestKarte4", 400, Image.FromFile("data/cards/4.png"));
    39. Karte TestKarte5 = new Karte("TestKarte5", 500, Image.FromFile("data/cards/5.png"));
    40. Karte TestKarte6 = new Karte("TestKarte6", 600, Image.FromFile("data/cards/6.png"));
    41. Karte TestKarte7 = new Karte("TestKarte7", 700, Image.FromFile("data/cards/7.png"));
    42. Karte TestKarte8 = new Karte("TestKarte8", 800, Image.FromFile("data/cards/8.png"));
    43. Karte TestKarte9 = new Karte("TestKarte9", 900, Image.FromFile("data/cards/9.png"));
    44. Karte TestKarte10 = new Karte("TestKarte10", 1000, Image.FromFile("data/cards/10.png"));
    45. AlleKarten[1] = TestKarte1;
    46. AlleKarten[2] = TestKarte2;
    47. AlleKarten[3] = TestKarte3;
    48. AlleKarten[4] = TestKarte4;
    49. AlleKarten[5] = TestKarte5;
    50. AlleKarten[6] = TestKarte6;
    51. AlleKarten[7] = TestKarte7;
    52. AlleKarten[8] = TestKarte8;
    53. AlleKarten[9] = TestKarte9;
    54. AlleKarten[10] = TestKarte10;
    55. Random myRandom = new Random();
    56. int[] LastNumbers = { 0, 0, 0, 0, 0, 0 };
    57. for (int i = 1; i < 6; i++)
    58. {
    59. bool Check = true;
    60. int Index = 0;
    61. while (Check)
    62. {
    63. Index = myRandom.Next(1, 11);
    64. foreach (int Zahlen in LastNumbers)
    65. {
    66. if (Index == Zahlen)
    67. {
    68. Check = false;
    69. //Überspringen
    70. }
    71. else
    72. {
    73. //Nichts
    74. }
    75. }
    76. }
    77. HandKarten[i] = AlleKarten[Index];
    78. Check = true;
    79. }
    80. Handkarte1.Image = HandKarten[1].GetCardImage();
    81. Handkarte2.Image = HandKarten[2].GetCardImage();
    82. Handkarte3.Image = HandKarten[3].GetCardImage();
    83. Handkarte4.Image = HandKarten[4].GetCardImage();
    84. Handkarte5.Image = HandKarten[5].GetCardImage();
    85. }
    86. }
    87. }


    Karte.cs:

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. namespace WindowsFormsApplication1
    11. {
    12. class Karte
    13. {
    14. private string Name;
    15. private int AttackPower;
    16. private Image CardImage;
    17. private ToolTip CardToolTip = new ToolTip();
    18. public Karte(string Name, int AttackPower, Image CardImage)
    19. {
    20. this.Name = Name;
    21. this.AttackPower = AttackPower;
    22. this.CardImage = CardImage;
    23. this.CardToolTip.ToolTipTitle = this.Name + Environment.NewLine + "Attacke: " + this.AttackPower.ToString();
    24. }
    25. public string GetName()
    26. {
    27. return this.Name;
    28. }
    29. public int GetAttackPower()
    30. {
    31. return this.AttackPower;
    32. }
    33. public Image GetCardImage()
    34. {
    35. return this.CardImage;
    36. }
    37. }
    38. }


    Ich hoffe ihr könnt mir helfen,

    Gruß DragonSlayerMarc
    There are only 10 types of people in the world: Those who understand binary and those who don't.
    So wie ich das sehe, möchtest Du die Zahlen 0, 1, 2, 3, 4 und 5 (also die Indices für HandKarten) zufällig durcheinanderwürfeln.
    Dafür kannst Du nach zufall sortieren lassen:

    C#-Quellcode

    1. var Rnd = new Random();
    2. var RandomIndices = Enumerable.Range(0, Handkarten.Length).OrderBy(Item => Rnd.NextDouble());

    Aber anhand der Problembeschreibung konnte ich das nicht eindeutig herauslesen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Jou.
    @DragonSlayerMarc Arbeite mit Indizes.
    1. eine Zahl aus { 0, 1, 2, 3, 4, 5 } => erste Karte
    2. eine Zahl aus { 0, 1, 2, 3, 4 } => zweite Karte
    3. eine Zahl aus { 0, 1, 2, 3 } => dritte Karte
    4. eine Zahl aus { 0, 1, 2 } => vierte Karte
    5. eine Zahl aus { 0, 1 } => fünfte Karte
    6. die letzte Karte
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany nur das es eben { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } im Kartendeck ist (Index 0 wird beim füllen des Arrays sowie bei der Schleife ausgelassen) und ich nur 5 davon brauche. Habe die Schleife auch auf einem Zettel probiert, da hat aber alles funktioniert und ich bekomme 5 zufällige Zahlen.

    EDIT: Ich bin selber doof xD Ich überprüfe ja ob im Array LastNumbers die Nummer schon existiert jedoch fülle ich dieses Array nie und deshalb generiert und generiert es. Trotzdem Danke für eure Hilfe.
    There are only 10 types of people in the world: Those who understand binary and those who don't.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DragonSlayerMarc“ ()

    DragonSlayerMarc schrieb:

    { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
    Dann wende dies auf meinen Pseudocode an. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Habe die Schleife ein bisschen erweitert, jz geht wieder nichtsmehr!

    C#-Quellcode

    1. Random myRandom = new Random();
    2. bool FirstNumber = true;
    3. int[] LastNumbers = { 0, 0, 0, 0, 0, 0 };
    4. for (int i = 1; i < 6; i++)
    5. {
    6. bool Check = true;
    7. int Index = 0;
    8. while (Check)
    9. {
    10. Index = myRandom.Next(1, 11);
    11. if (FirstNumber == false)
    12. {
    13. foreach (int Zahlen in LastNumbers)
    14. {
    15. if (Index == Zahlen)
    16. {
    17. Check = false;
    18. //Überspringen
    19. }
    20. else
    21. {
    22. //Nichts
    23. }
    24. }
    25. }
    26. else if (FirstNumber == true)
    27. {
    28. FirstNumber = false;
    29. LastNumbers.SetValue(Index, i);
    30. }
    31. }
    32. HandKarten[i] = AlleKarten[Index];
    33. LastNumbers.SetValue(Index, i);
    34. Check = true;
    35. }

    There are only 10 types of people in the world: Those who understand binary and those who don't.

    DragonSlayerMarc schrieb:

    jz geht wieder nichtsmehr!
    Setz einen Haltepunkt rein und verfolge Deinen Code, überprüfe den Inhalt der Variablen.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!