-3

Ошибка "Индекс находился вне границ массива" в операторе if 18 строка

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lb1 { class Program { static void Main(string[] args) { int[] A = new [] { 1234, 1302, 1245, 1198, 1229, 1280 }; int i; for (i = 1; i <= 6; i = i + 1) ; int[] B = new int[6];

        if (A[i] &lt; 0 )
        { B[i] = (-A[i]); }
        if(0 &lt;= A[i] )
           { B[i] = A[i]; }             

        int[] P = new int[6];

        P[i] = B[i] - B[i - 1];

        int V = (P[i + 1] / B[i]) * 100;

        Console.WriteLine(&quot;Уровень преступности возрос на&quot; + V ,&quot;%&quot;) ; 
        Console.ReadLine();


    }
}

}

  • 2
    А что должен делать этот код? Вы его сами написали? Какую задачу вы решаете? 18 строка - это мне самому надо строки посчитать? – aepot Jun 08 '21 at 10:06
  • Не знаю как именно должен работать ваш код, но я в ответ добавил переписанный рабочий код, так как его понял – iikuzmychov Jun 08 '21 at 10:45
  • 1
    @KuzCode не стоит спешить отвечать на (совсем)неоформленный вопрос: 1) можно не угадать правильный ответ, 2) сам по себе ответ на неоформленный вопрос может оказаться бесполезным для остальных посетителей, 3) это может стимулировать новичка и далее задавать неоформленные вопросы. 4) Linq - это, кмк, перегиб в ответе человеку, который пока не видит, где надо поставить ;, не тот уровень сложности. – aepot Jun 08 '21 at 10:50
  • @aepot 1) Не спорю, лучше пусть он сам поймёт что не так и перепишет, просто мне было интересно понять, что ж там в голове у автора. 2) Для других посетителей этот вопрос одназначно бесполезен. 3) тоже согласен, это плохо. 4) уже это в цикле)))) – iikuzmychov Jun 08 '21 at 10:54
  • @KuzCode можно наванговать v[i] = (a[i] - a[i - 1]) * 100 / a[i - 1]. При чем тут Abs - я без понятия, только если для красивого вывода типа v == 0 ? "не изменился" : ((v < 0 ? "снизился" : "возрос") + " на " + Math.Abs(v) + "%"). – aepot Jun 08 '21 at 11:16
  • @aepot фиг его знает, хотел автор абсолютное значение - получите – iikuzmychov Jun 08 '21 at 11:19

1 Answers1

2

Скорее всего вы хотели выполнять это условие в цикле. У вас тело цикла должно быть в фигурных скобках, а вы, после того как написали for(...), поставили точку с запятой.

Во-вторых, нужно перебирать от i = 0 до длинны массива не вклчая (i < 6).

Также я бы посоветовал вместо 6 использовать A.Length, так как если вы захотите поменять размер массива, то придёться везде менять вручную, а вы можете это случайно забыть.

Кроме того, конструкцию

if (A[i] < 0 )
{ B[i] = (-A[i]); }
if(0 <= A[i] )
    { B[i] = A[i]; } 

лучше заменить с помощью Math.Abs:

B[i] = Math.Abs(A[i]);

А также заменить i = i + 1 на i++.

UPD:

Не знаю как именно должен работать ваш код, но как я понял, так:

var A = new int[] { 1234, 1302, 1245, 1198, 1229, 1280 };       
var B = new int[A.Length]; // A.Length = 6
var P = new int[A.Length]; // A.Length = 6

for (int i = 0; i < A.Length; i++) B[i] = Math.Abs(A[i]);

Console.WriteLine("B: " + string.Join(", ", B)); // вывод массива B на экран

for (int i = 1; i < P.Length; i++) // начинаем с единицы, так как B[i - 1] выдаст ошибку при i = 0 P[i] = B[i] - B[i - 1];

Console.WriteLine("P: " + string.Join(", ", P)); // вывод массива P на экран

double V = 0;

for (int i = 1; i < P.Length; i++) // начинаем с единицы, так как P[0] = 0 и в результате V не измениться, кроме того B[i - 1] выдаст ошибку { V += ((double)P[i] / B[i - 1]) * 100; }

Console.WriteLine("Уровень преступности возрос на " + V) ; Console.ReadLine();

iikuzmychov
  • 3,092