Знаю основы работы с массивами и графикой (построение графиков, создание тригонометрических функций) в NET Framework.
Кажется, я не могу представить, как мне удается генерировать элементы массива случайным образом, представленные высотами полос (белыми), как на изображении ниже:
Я пробовал только приведенный ниже код, и каждый раз, когда я генерирую число, я получаю только одно число. Я ожидаю, что от 0 до 100 будут перечислены в случайном порядке, но я не могу этого сделать.
Public Class FormSortingAlgorithm
Dim rnd As New Random()
Dim nums() As Integer
Dim i As Integer
Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
Dim i As Integer
ReDim nums(19)
For i = 0 To 19
nums(i) = rnd.Next(0, 100)
Next
End Sub
Private Sub btnDisplayArray_Click(sender As Object, e As EventArgs) Handles btnDisplayArray.Click
txtDisplay.Text = nums(j) & nums(i)
End Sub
End Class
У вас есть отличный код, который можно посмотреть ниже, но на самом деле в вашем коде не было ничего плохого, кроме части отображения. Просто измените txtDisplay.Text = nums(j) & nums(i)
на txtDisplay.Text = String.Join(", ", nums)
, чтобы увидеть свои случайные числа. Они все были там!
txtDisplay.Text = nums(j) & nums(i)
не будет отображать содержимое вашего массива в текстовом поле, а только одно склеенное число, состоящее из двух элементов массива. j
где-то определен и представляет собой допустимый индексvbCrLf
здесь, так как у вас есть TextBox)Я предлагаю вам заменить массив на List(Of Integer)
, это более гибкий тип коллекции. Вы можете добавлять или удалять элементы, когда / если требуется. Вы всегда можете вызвать его метод .ToArray()
, если по какой-то причине нужен массив
(0 : 100)
, вы должны указать [Random].Next(0, 101)
В этом примере я использую PictureBox для построения набора случайных значений Integer.
Мировые координаты графической поверхности преобразуются в декартову плоскость, 1-й квадрант.
Вершина (0, 0)
— это нижняя левая вершина холста (PictureBox), а не верхняя левая вершина.
Если тебя это не волнует. удалить объект Matrix и назначение Graphics.Transform = [Matrix]
Об используемой здесь матрице см. примечания в Переверните GraphicsPath, который рисует текст
Imports System.Collections.Generic
Imports System.Drawing.Drawing2D
Imports System.Linq
Private Shared ReadOnly rnd As New Random()
Private plotNumbers As List(Of Integer) = Nothing
Private penWidth As Single = 1.0F
Private numOfLines As Integer = 19
Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
' Generate a new collection of random integers
plotNumbers = GenerateNumbers(numOfLines)
' Show the generated values in a TextBox
txtDisplay.Text = String.Join(vbCrLf, plotNumbers)
' Plot the lines in a PictureBox (named PlotSurface)
PlotSurface.Invalidate()
End Sub
Private Sub PlotSurface_Paint(sender As Object, e As PaintEventArgs) Handles PlotSurface.Paint
If plotNumbers Is Nothing OrElse plotNumbers.Count = 0 Then Return
Dim canvas = DirectCast(sender, Control).ClientSize
' Scales the height of the lines to the Height of the Canvas. Remove if not needed
Dim scaleFactor = canvas.Height / 100.0F
Dim horzPosition As Single = 1.0F
Dim line As Integer = 0
Using pen As New Pen(Color.White, penWidth),
toCartesianPlane = New Matrix(1, 0, 0, -1, 0, canvas.Height)
e.Graphics.Transform = toCartesianPlane
While horzPosition < canvas.Width
e.Graphics.DrawLine(pen, horzPosition, 0, horzPosition, plotNumbers(line) * scaleFactor)
horzPosition += penWidth
line = (line + 1) Mod numOfLines
End While
End Using
e.Graphics.ResetTransform()
End Sub
Private Function GenerateNumbers(numCount As Integer) As List(Of Integer)
Return Enumerable.Range(0, numCount).Select(Function(n) rnd.Next(0, 101)).ToList()
End Function
Вот как это работает:
Я отменил ваше редактирование, потому что вы удалили весь код и образец анимации.
Что такое
i
иj
вnums(j) & nums(i)
?