Hjälp med kod för bearbetning av redan genererad lista.

Trädvy Permalänk
Medlem
Registrerad
Aug 2016

Hjälp med kod för bearbetning av redan genererad lista.

Behöver hjälp med kod för att bearbeta en lista jag skapar med unika slumpmässiga tal. Har googlat i många timmar men får inte till det. Behöver hjälp med händelserna när man trycker Button2.

Imports System.Collections.Generic Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click RandomNrExamle() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' Steg #1 ' "Echo" ut första siffran ur genererad indexlista. ' Steg #2 ' Radera siffran ur indexlistan som visades i steg2 ' Steg #3 ' Om Button2 klickas på igen så körs det om och nästa siffra, som finns kvar i listan visas med "Echo" ' Steg #4 ' När listan är tom så visas meddelande med echo "Listan nått sitt slut", samt att listan raderas ur minnet. End Sub Public rand As New Random Public Sub RandomNrExamle() Dim allNumbers As New List(Of Integer)(Enumerable.Range(1, 6)) Dim selectedNumbers As New List(Of Integer) For i As Integer = 0 To 5 Dim index As Integer = rand.Next(0, allNumbers.Count) Dim selectedNumber As Integer = allNumbers(index) selectedNumbers.Add(selectedNumber) allNumbers.RemoveAt(index) Next For Each i As Integer In selectedNumbers Console.WriteLine(i) Next End Sub End Class

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Skrivet av RonSch:

Behöver hjälp med kod för att bearbeta en lista jag skapar med unika slumpmässiga tal. Har googlat i många timmar men får inte till det. Behöver hjälp med händelserna när man trycker Button2.

Imports System.Collections.Generic Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click RandomNrExamle() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' Steg #1 ' "Echo" ut första siffran ur genererad indexlista. ' Steg #2 ' Radera siffran ur indexlistan som visades i steg2 ' Steg #3 ' Om Button2 klickas på igen så körs det om och nästa siffra, som finns kvar i listan visas med "Echo" ' Steg #4 ' När listan är tom så visas meddelande med echo "Listan nått sitt slut", samt att listan raderas ur minnet. End Sub Public rand As New Random Public Sub RandomNrExamle() Dim allNumbers As New List(Of Integer)(Enumerable.Range(1, 6)) Dim selectedNumbers As New List(Of Integer) For i As Integer = 0 To 5 Dim index As Integer = rand.Next(0, allNumbers.Count) Dim selectedNumber As Integer = allNumbers(index) selectedNumbers.Add(selectedNumber) allNumbers.RemoveAt(index) Next For Each i As Integer In selectedNumbers Console.WriteLine(i) Next End Sub End Class

Stegen som ska göras:
1. Generera en lista med slumpade tal vid tryck på Knapp1
2. Vid tryck på Knapp2:
3. Skriv ut första objektet i listan
4. Ta bort första objektet i listan
5. Om listan är tom så ska texten "Listan nått sitt slut" skrivas ut samt att listan ska nullas.

Du verkar ha påbörjat punkt 1 men jag har ett par funderingar. Varför skapar du slumpade värden på det där sättet? Är det för att garantera unika värden så är det ok. Varför skapar du listan som en lokal variabel till metoden? Den måste vara nåbar av Knapp2-metoden exempelvis så den måste flyttas ut.

VB är verkligen inte min starka sida men jag kan göra ett försök till att förklara.
Skapa en tom List av typen Integer. Kom ihåg att sätta listan som en instansvariabel till Formuläret. Annars kommer inga andra metoder att kunna nå instansen. I ditt fall så kan du flytta ut selectedNumbers-listan från metoden.

Steg 2 är att påbörja Knapp2-logiken. Du har ju tillräckligt med kunskap för att göra det.
Jag kan påbörja det åt dig

Dim firstNumberInList = selectedNumbers(0)

Gör gärna lite mer själv så får du återkomma om du stöter på problem.

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Registrerad
Aug 2016

Min slutliga lösning.

Option Explicit On
Public Class Form1
Private selectedNumbers As List(Of Integer)
Private rand As Random

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
rand = New Random
selectedNumbers = New List(Of Integer)
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RandomNrExamle()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If selectedNumbers.Count = 0 Or selectedNumbers Is Nothing Then
Console.WriteLine("No numbers present")
Else
Console.WriteLine(selectedNumbers(0).ToString & " Removed")
selectedNumbers.RemoveAt(0)
End If
End Sub

Private Sub RandomNrExamle()
Dim allNumbers As New List(Of Integer)(Enumerable.Range(1, 6))
selectedNumbers = New List(Of Integer)
For i As Integer = 0 To 5
Dim index As Integer = rand.Next(0, allNumbers.Count)
Dim selectedNumber As Integer = allNumbers(index)
selectedNumbers.Add(selectedNumber)
allNumbers.RemoveAt(index)
Next
For Each i As Integer In selectedNumbers
Console.WriteLine(i)
Next
End Sub
End Class