Как построить случайные массивы?

Знаю основы работы с массивами и графикой (построение графиков, создание тригонометрических функций) в 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

Что такое i и j в nums(j) & nums(i)?

Andrew Morton 08.01.2023 15:08

У вас есть отличный код, который можно посмотреть ниже, но на самом деле в вашем коде не было ничего плохого, кроме части отображения. Просто измените txtDisplay.Text = nums(j) & nums(i) на txtDisplay.Text = String.Join(", ", nums), чтобы увидеть свои случайные числа. Они все были там!

Idle_Mind 08.01.2023 19:22
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
2
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Эта строка: txtDisplay.Text = nums(j) & nums(i) не будет отображать содержимое вашего массива в текстовом поле, а только одно склеенное число, состоящее из двух элементов массива.
    В случае, если j где-то определен и представляет собой допустимый индекс
    Вы можете использовать String.Join() для создания строки, содержащей все элементы в коллекции, используя разделитель (vbCrLf здесь, так как у вас есть TextBox)

Я предлагаю вам заменить массив на List(Of Integer), это более гибкий тип коллекции. Вы можете добавлять или удалять элементы, когда / если требуется. Вы всегда можете вызвать его метод .ToArray(), если по какой-то причине нужен массив

  • Верхняя граница Random.Next(Int32, In32) исключается из диапазона.
    Чтобы сгенерировать значения в диапазоне (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

Вот как это работает:

Я отменил ваше редактирование, потому что вы удалили весь код и образец анимации.

Jimi 25.01.2023 10:21

Другие вопросы по теме