Диаграмма с использованием звездочки (циклы, массивы) - PullRequest
0 голосов
/ 30 ноября 2018

Итак, у меня есть массив, который создает случайные числа, и я хочу разделить числа на 10. Поэтому, если число равно 45, я хочу получить 6 'p' друг под другом и 4 звездочки друг под другом (давайте назовем это всевещь колонна).И затем я хочу это со следующим номером, но я хочу, чтобы эти столбцы были рядом друг с другом, а не под ними.Это будет легче понять, если вы увидите картинку.Вот что я получаю: https://gyazo.com/6e4fcf301784e0c385b9ce0d9c938b6a Это то, что я хочу (здесь вместо 'p' есть пробелы: https://gyazo.com/778027ad74a2a3d2065348def8f431cd

Это мой код:

    static void Main(string[] args)
    {
        int[] a = RandomFill(10);
        Print(a);

        int asd = 0;

        for (int i = 0; i <= a.Length-1; i++)
        {
            asd = a[i] / 10;

            for (int j = 0; j <= 10 - asd; j++)
            {
                Console.WriteLine("p");
            }
            for (int k = 0; k < asd; k++)
            {
                Console.WriteLine("*" + " ");
            }
            Console.WriteLine();
        }
        Console.ReadLine();


    }

    static int[] RandomFill(int Length)
    {
        Random rd = new Random();

        int[] array = new int[Length];
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = rd.Next(0, 100);
        }
        return array;
    }

    static void Print(int[] a)
    {
        Console.WriteLine();
        foreach( int element in a)
        {
            Console.Write(element + " ");
        }
    }

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вы можете использовать метод Console.SetCursorPosition для установки позиции курсора перед написанием символа.Таким образом, вы можете написать один столбец, а затем перейти к следующему столбцу, не перезаписывая предыдущий.

Обратите внимание, что мы хотим использовать Console.Write для записи символа, потому что Console.WriteLine добавит новую строку кконец и испортит нашу сетку.

Предполагая, что вы используете только график высотой 10 символов (таким образом, числа от 1 до 100), вы можете определить, какие строки должны быть заполнены внутри цикла, вычитая текущийитерация от 10 и проверка, является ли число больше или равно этому числу.

Это может иметь больше смысла в коде:

Random rnd = new Random();

static void Main()
{
    // Populate a list of 30 random numbers from 1 to 100
    var randomNumbers = Enumerable.Range(0,30).Select(i => rnd.Next(1, 101)).ToList();

    // Output our numbers to the console as column headers
    randomNumbers.ForEach(n => Console.Write(n.ToString().PadLeft(3)));

    // Set the next cursor line as the top of the grid
    var topOfGrid = Console.CursorTop + 1;

    // For each number, divide by 10 and output the result to the console
    for (int rndIndex = 0; rndIndex < randomNumbers.Count; rndIndex++)
    {
        // Capture the left for this column. We multiply the 
        // current index by 3 because we're spacing the columns 
        // 3 characters wide. Then add one so it prints 
        // in the middle of the column
        var columnLeft = 3 * rndIndex + 1;

        var result = randomNumbers[rndIndex] / 10;

        for (int i = 0; i < 10; i++)
        {
            Console.SetCursorPosition(columnLeft, topOfGrid + i);

            // Determine which character to write by comparing
            // our number with the value of 10 - i
            Console.Write(result >= 10 - i ? "*" : " ");
        }
    }           

    Console.WriteLine();
    Console.ReadLine();
}

Выход

enter image description here

0 голосов
/ 30 ноября 2018

, кажется, работает ...

for (int j = 0; j < 10; j++)
            {
                string line = "";
                for (int i = 0; i <= a.Length - 1; i++)
                {
                    if (a[i] >= 10 * (10 - j))
                    {
                        line = line+"*";
                    }
                    else 
                    { 
                        line = line+"p"; 
                    }
                }
                Console.WriteLine(line);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...