0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 69
1

Индекс находится вне границ массива

15.01.2015, 17:27. Показов 1762. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа на вход должна получить 2 параметра: путь к файлу и число, которое нужно заменить на 0. Если ввести только путь - считываем массив из файла и сортируем его; если указываем путь и число - считываем массив, и заменяем в нём наше число на 0 и так же сортируем. Так вот, нужно написать условие на присутствие 2-го параметра. Программа работает, но только с 2 параметрами, с 1 выдаёт ошибку "Индекс находится вне границ массива." Ошибка в строке 27.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                if (args.Length != 0) //Проверка на наличие параметров.
                {
                    if (File.Exists(args[0])) //Проверяем наличие файла.
                    {
                        string[] stroka = File.ReadAllLines(args[0]); //Записываем в стринговый массив числа из файла.
                        double[] massForSort = new double[stroka.Length];//Создаём массив double для сортировки.
                        int k = args[0].LastIndexOf("."); //Подсчитываем в какой позиции находится точка (самая последняя точка).
                        string A = args[0].Substring(0, k); //Находим путь и имя исходного файла.
                        string B = args[0].Substring(k); //Находим расширение исходного файла.
                        Console.WriteLine("Исходный массив: ");
                        for (int j = 0; j < massForSort.Length; j++) //Записываем в  массив double для сортировки числа стрингового массива.
                        {
                            massForSort[j] = Convert.ToDouble(stroka[j]);
                        }
                        for (int n = 0; n < massForSort.Length; n++) //Выводим исходный массив.
                        {
                            Console.WriteLine("{0} ", massForSort[n]);
                        }
                        sort(massForSort, massForSort.Length, A, B); //СОРТИРОВКА
 
                        if (args[1].Length != 0)
                        {
                            double[] massForSearch = new double[stroka.Length]; //Создаём массив double для поиска.
                            for (int j = 0; j < massForSearch.Length; j++) //Записываем в  массив double для поиска числа стрингового массива.
                            {
                                massForSearch[j] = Convert.ToDouble(stroka[j]);
                            }
                            double number = Convert.ToDouble(args[1]);
                            search(massForSearch, Convert.ToDouble(number), A, B); //ПОИСК
                        }
                        else
                            Console.WriteLine("Второй параметр не указан!");
                    }
                    else
                        Console.WriteLine("По указанному пути файл не найден!");
                }
                else
                    Console.WriteLine("Параметры не введены!");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        static void search(double[] mass1, double shislo1, string A, string B)
        {
            string savetext2 = ""; //Строка, которую запишем в файл.
            Console.WriteLine("Готовый массив: ");
            double t = 0;
            for (int i = 0; i < mass1.Length; i++)
                if (mass1[i] == shislo1) //Если элемент массива равен введённому числу, заменяем.
                {
                    mass1[i] = 0;
                    t++;
                }
            if (t == 0) //Если наше число в массиве не найдено, выводим сообщение.
                Console.WriteLine("Число не найдено, замена на 0 производиться не будет!");
            for (int i = 0; i < mass1.Length; i++)
                Console.WriteLine("{0} ", mass1[i]);
            
            //ЗАПИСЬ МАССИВА C ЗАМЕНЁННЫМ ЧИСЛОМ НА 0
            for (int i = 0; i < mass1.Length; i++)
            {
                string k = Convert.ToString(mass1[i]); //Переводим каждый элемент массива double в стринг.
                savetext2 += k; //Складываем стринговые элементы в 1 строку.
            }
            File.WriteAllText(A + "_search" + B, Convert.ToString(savetext2));//Запись строку в файл.
        }
        /// <summary>
        /// Сортировка.
        /// </summary>
        /// <param name="mass2">Исходный массив.</param>
        /// <param name="size">Размер массива.</param>
        /// <param name="A">Путь и имя исходного файла.</param>
        /// <param name="B">Расширение исходного файла.</param>
        static void sort(double[] mass2, double size, string A, string B)
        {
            string savetext1 = ""; //Строка для отсортированных элементов.
            Console.WriteLine("Отсортированный массив: ");
            for (int i = 0; i < size; i++)
            {
                for (int j = i; j < size; j++)
                {
                    if (mass2[j] < mass2[i])
                    {
                        double n = mass2[j];
                        mass2[j] = mass2[i];
                        mass2[i] = n;
                    }
                }
            }
            for (int i = 0; i < size; i++)
            {
                Console.WriteLine("{0} ", mass2[i]);
            }
            
            //ЗАПИСЬ ОТСОРТИРОВАННОГО МАССИВА
            for (int i = 0; i < size; i++)
            {
                string k = Convert.ToString(mass2[i]); //Переводим каждый элемент массива double в стринг.
                savetext1 += k; //Складываем стринговые элементы в 1 строку.
            }
            File.WriteAllText(A+"_sort"+B, Convert.ToString(savetext1));//Запись отсортированного массива в файл.
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2015, 17:27
Ответы с готовыми решениями:

Индекс находится вне границ массива
string productsSplit = lineSplit.Split(','); for (int i = 0; i &lt; productsSplit.Length;...

Индекс находится вне границ массива
Я делаю проект в колледже на тему: Проводник. И дело в том, что я не могу элементарно вывести...

Индекс находится вне границ массива
Добрый день, у меня проблема , индекс находится вне границ массива всё облазил не смог найти...

Индекс находится вне границ массива
Console.WriteLine(&quot;Введи те сколько?&quot;); int i = Convert.ToInt32(Console.ReadLine()); ...

5
1148 / 740 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
15.01.2015, 23:33 2
Ну так args[1] это второй второй параметр, а вы передаете только 1.
0
0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 69
15.01.2015, 23:57  [ТС] 3
Lexeq, я вас не понял. args[0] содержит путь, а args[1] содержит число
0
1148 / 740 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
16.01.2015, 00:43 4
Цитата Сообщение от henry johnson Посмотреть сообщение
Программа работает, но только с 2 параметрами, с 1 выдаёт ошибку "Индекс находится вне границ массива."
Когда вы передаете 1 параметр у вас нету args[1], только args[0].
0
0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 69
16.01.2015, 13:37  [ТС] 5
Lexeq, а где именно ошибка?
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
16.01.2015, 15:47 6
Лучший ответ Сообщение было отмечено henry johnson как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.IO;
using System.Linq;
 
namespace ConsoleApplication19
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0) //Проверка на наличие параметров.
            {
                Console.WriteLine("Параметры не введены!");
                Console.ReadKey();
                return;
            }
            if (!File.Exists(args[0])) //Проверяем наличие файла.
            {
                Console.WriteLine("Файл {0} не найден!", args[0]);
                Console.ReadKey();
                return;
            }
            double[] elements;
            try
            {
                elements = File.ReadAllLines(args[0]).Select(double.Parse).ToArray();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.ReadKey();
                return;
            }
            Console.WriteLine("Исходный массив из файла {0}",args[0]);
            foreach (var element in elements)
            {
                Console.Write("{0,3}", element);
            }
            Array.Sort(elements); //СОРТИРОВКА
            Console.WriteLine();
            Console.WriteLine("Отсортированый массив:");
            foreach (var element in elements)
            {
                Console.Write("{0,3}", element);
            }
 
            Console.WriteLine();
            try
            {
                if (args.Length > 1)
                {
                    double number = double.Parse(args[1]);
                    Console.WriteLine("Второй аргумент число {0}",args[1]);
                    elements= elements.Select(i => i == number ? 0 : i).ToArray();
                    Array.Sort(elements);
                    Console.WriteLine("Измененный массив:");
                    foreach (var element in elements)
                    {
                        Console.Write("{0,3}", element);
                    }
                    File.WriteAllText("saved_elements.txt",string.Join(" ",elements));
                }
                else
                {
                    Console.WriteLine("Второй параметр не задан!");
                    File.WriteAllText("saved_elements.txt", string.Join(" ", elements));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
1
16.01.2015, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2015, 15:47
Помогаю со студенческими работами здесь

Индекс находится вне границ массива. С#
Вот код C# int m, n, summachet = 0; Console.WriteLine(&quot;Введите количество...

Индекс находится вне границ массива
Я не могу понять в чём проблема.. Думал что с циклом, посмотрел на него, вроде всё нормально, потом...

Индекс находится вне границ массива
Не могу исправить ошибку &quot;Индекс находился вне границ массива&quot;. List&lt;string&gt; spec = new...

Индекс находится вне границ массива
В чем ошибка? for (int c = 0; c &lt; text.Length; c++) // до длинны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru