Вылетает с ошибкой что делать? [закрыт]

154
21 декабря 2021, 15:50
Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 2 года назад.

Улучшить вопрос
```C#
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Calculator
{
/// <summary>
/// Description of Form1.
/// </summary>
public partial class Form1 : Form
{   
    public Form1()
    {
        InitializeComponent();
    }
    void PictureBox1Paint(object sender, PaintEventArgs e)
    {
    }
    void graphics()
    {
        const double PI = 3.14159256;
        double shag = 0.1;
        double mashtab = 30;
        int fillHeight = 150;
        int fillWight = 500;
        int otstup = 0;
        Graphics g = this.CreateGraphics();
        Pen pen = new Pen(Color.Black);
        Pen pe = new Pen(Color.Red);
        int n = Convert.ToInt32(4*PI/shag);
        Point[] pointSin = new Point[n];
        int p = int.Parse(textBox3.Text);
        for(double i = 0; i < 4 * PI; i += shag)
        {
            pointSin[p] = new Point(Convert.ToInt32(i*mashtab+otstup), 
            Convert.ToInt32(Math.Sin(i)*mashtab+(fillHeight / 2) + otstup));
            p++;
        }
        g.DrawCurve(pe, pointSin);
        g.DrawLine(pen, 250, 0, 250, 500);
        g.DrawLine(pen, 0, 250, 500, 250);
    }
    void Button1Click(object sender, EventArgs e)
    {
        graphics();
    }
}
}

помогити... заранее спасибо)

Answer 1

Приветствую Alexey Kosarev. Субъективно конечно, но для начала - когда вылетает та или иная ошибка, попробуй её загуглить. Если не удалось, то обращайся на форумы или специализированные сайты, но обязательно указывайте:

  • Код, который вызывает ошибку.
  • Строку.
  • Полный текст ошибки.

Скопировал Ваш код и проверил, у меня выбило ошибку:

  • -Индекс находился вне границ массива.

Обращу внимание, что при вводе p = 5, то во время работы Вашего цикла, происходит реально выход за границы массива. Массив имеет 126 элементов, а p = 130.

Решение, возможно не верное(добавил в цикл проверку на выход за границы массива).

 void graphics()
    {
        const double PI = 3.14159256;
        double shag = 0.1;
        double mashtab = 30;
        int fillHeight = 150;
        int fillWight = 500;
        int otstup = 0;
        Graphics g = this.CreateGraphics();
        Pen pen = new Pen(Color.Black);
        Pen pe = new Pen(Color.Red);
        int n = Convert.ToInt32(4 * PI / shag);
        double test = 4 * PI;
        Point[] pointSin = new Point[n];
        int p = int.Parse(textBox1.Text);
        for (double i = 0; i <= 4 * PI && p < n; i += shag) // добавляем проверку, не выходит ли наш индекс за границы массива. 
        {
            pointSin[p] = new Point(Convert.ToInt32(i * mashtab + otstup),
            Convert.ToInt32(Math.Sin(i) * mashtab + (fillHeight / 2) + otstup));
            p++;
        }
        g.DrawCurve(pe, pointSin);
        g.DrawLine(pen, 250, 0, 250, 500);
        g.DrawLine(pen, 0, 250, 500, 250);
    }

Обращу внимание, у Вас 126 элементов, при вводе P у Вас P = введеному числу, и P++ будет выполняться пока i <= 4 * PI. По этому у Вас P всегда выходил за границы массива. Проверка на P < N - не лучшее решение, но решает Вашу проблему.

READ ALSO
Как сделать TextBox растягивающимся?

Как сделать TextBox растягивающимся?

используюNet Framework (compact Edition) для мобильного приложения

167
Перевод формата даты Excel в python datetime формат

Перевод формата даты Excel в python datetime формат

Работаю над задачей перевода формата даты ячейки Excel-я в python datetime форматНашел на английском stackoverflow подходящую реализацию перевода C# формата...

141
Решить пример 38^29 mod 91 на C#

Решить пример 38^29 mod 91 на C#

Пробовал сам сделать, но C# не может, такие большие числа обрабатывать правильноНа Python все ок работает

130