Массив выходит за пределы - C#
Формулировка задачи:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace парные_сравнения
{
class Program
{
static void Main(string[] args)
{
string input = new StreamReader(File.Open("inputs.txt", FileMode.Open)).ReadToEnd();
var inp = input.Replace(" ", "").Replace("\r", "").Split('\n');
for (int abc = 0; abc < inp.Count(); abc += 2)
{
var a = inp[abc].Split(',').Select(Int32.Parse).ToArray();
var b = inp[abc + 1].Split(',').Select(Int32.Parse).ToArray();
int[] start = a;
int[] finish = b;
int n = finish.Length;
int[] scores = new int[n];
for (int i = 0; i < n; i++)
{
scores[i] = start[i] - finish[i];
}
scores = scores.Where(p => p != 0).ToArray();
int[] ABCscores = new int[scores.Length];
for (int i = 0; i < scores.Length; i++)
{
ABCscores[i] = Math.Abs(scores[i]);
}
int pos = 0;
var res = ABCscores.Join(
ABCscores.GroupBy(g => g)
.OrderBy(o => o.Key)
.Select(s => { pos += s.Count(); return new { Score = s.Key, Rang = ((double)2 * pos - s.Count() + 1) / 2 }; }),
i => i, o => o.Score, (o, i) => new { Score = o, Rang = i.Rang }).ToList();
double[] rang = new double[n];
int l = 0;
foreach (var result in res)
{
rang[l] = result.Rang;
l++;
}
double rang_min = 0;
double rang_plus = 0;
for (int i = 0; i < scores.Length; i++)
{
if (scores[i] < 0)
rang_min += rang[i];
else
rang_plus += rang[i];
}
double Rmin = 0;
if (rang_plus < rang_min)
Rmin = rang_plus;
else Rmin = rang_min;
double z_kr = 1.96;
double z_emp = 0;
double u_kr = 0;
if (n < 10)
{
Console.Write("Введите U_критическое из таблицы для U_kr(n={0},a=0.05): ", n--);
u_kr = Convert.ToDouble(Console.ReadLine());
if (Rmin > u_kr)
Console.WriteLine("Гипотеза подтверждается");
else
Console.WriteLine("Гипотеза не подтверждается");
}
else
{
z_emp = Math.Abs(((Rmin - ((n * (n + 1.0)) / 4.0)) / Math.Sqrt((1.0 / 24.0) * n * (n + 1.0) * ((2.0 * n) + 1.0))));
if (z_emp < z_kr)
Console.WriteLine("Гипотеза подтверждается");
else
Console.WriteLine("Гипотеза не подтверждается");
}
}
Console.Read();
}
}
}Необработанное исключение типа "System.IndexOutOfRangeException" в ConsoleApplication37.exe Дополнительные сведения: Индекс находился вне границ массива.
Решение задачи: «Массив выходит за пределы»
textual
Листинг программы
.Split(new [] { "\\n" }, StringSplitOptions.RemoveEmptyEntries);