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

Работа со списками (Индекс за пределами диапазона)

21.04.2012, 22:46. Показов 4005. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Задание: считываю из файла символы, создаю 2 списка в один забиваю символы(не повторяющиеся), а в другой количество повторений каждого символа
Проблема в следующем когда символ с индексом i повторяется, мы во втором списке должны увеличить элемент с индексом i , но как бы я не пробовал он не увеличивается а выдает ошибку:
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.

Прошу помочь мне в решении этой задачи... Заранее спасибо!
Вот код:
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
List<char> sim = new List<char>();
        List<int> kol = new List<int>();
        int n;
        private void button1_Click(object sender, EventArgs e)
        {
             FileStream fin;
            string s;
           
            try
            {
                fin = new FileStream("text.txt", FileMode.Open);
            }
            catch (IOException exc)
            {
                MessageBox.Show("Ошибка открытия файла:\n" + exc.Message);
                return;
            }
            StreamReader fstr_in = new StreamReader(fin);
            try
            {
                while ((s = fstr_in.ReadLine()) != null)
                {
                    label1.Text += s.ToString();
                    for (int i = 0; i < s.Length; i++)
                    {
                        if (sim.Contains(s[i])==true)
                        {
                            foreach (char sim1 in sim)
                            {
                                n++;
                                if (sim1 == s[i])
                                {
                                    kol[n]++; //выдает ошибку здесь
                                }
                            }
                        }
                        else
                        {
                            sim.Add(s[i]);
                           kol[n]++;//выдает ошибку здесь
                        }
                    }
                    
 
                }
            }
            finally
            {
                fstr_in.Close();
            }
            //вывод списка
            foreach (char sim1 in sim)
            {
                label2.Text += sim1.ToString()+" ";
            }
            
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2012, 22:46
Ответы с готовыми решениями:

Индекс за пределами диапазона
У меня есть список string массивов. Когда хочу задать им размерность, выдаёт что индекс за пределами диапазона. Не пойму в чём может быть...

Индекс за пределами диапазона
System.ArgumentOutOfRangeException: &quot;Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен...

Индекс за пределами диапазона
в dgv 3 столбца, нужно заполнить средний, начинаю заполнять, вылетает ошибка &quot;Индекс за пределами диапазона. Индекс должен быть...

10
24 / 23 / 3
Регистрация: 21.04.2012
Сообщений: 253
21.04.2012, 22:53
Хм, может я несу бред, но в таких случаях я пишу kol[n-1]++

(простите, что лезу с бредовыми идеями, но вдруг поможет)
0
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
21.04.2012, 23:00
ещё вдобавок n нигде не обнуляется...
0
1 / 1 / 0
Регистрация: 21.04.2012
Сообщений: 38
21.04.2012, 23:09  [ТС]
Нет это не поможет, да и смысла особого нет т.к k[n-1] это другой элемент(((
Здесь скорее всего специальный подход к списку..... возможно есть спец функции, но так как я не очень давно занимаюсь этим я пока не знаю как нужно((
Пробовал гуглить но без успешно(((

Добавлено через 3 минуты
спасибо за подсказку n обнулил но программа так и не работает(
и в строке 40 код такой: kol[i]++
0
 Аватар для C17H19NO3
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
21.04.2012, 23:31
я вообще не понимаю что значит запись

C#
1
kol[n]++;
это увеличения щетчика в массиве??? но как это произойдет.

напишите вместо этой строчки

C#
1
kol.Add(i);

и все будет работать
0
1 / 1 / 0
Регистрация: 21.04.2012
Сообщений: 38
21.04.2012, 23:44  [ТС]
kol[i] это индекс элемента который надо изменить на 1 т.е. в массиве бы это выглядело бы как kol[i]++
а как эту операцию записать в работе со списками?
0
 Аватар для C17H19NO3
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
22.04.2012, 00:03
вот вам робочая программа. Так должно все работать??
Вложения
Тип файла: rar Programm.rar (37.3 Кб, 25 просмотров)
1
1 / 1 / 0
Регистрация: 21.04.2012
Сообщений: 38
22.04.2012, 00:24  [ТС]
символы у меня программа нормально выводит но не считает их
т.е. она должна считать число вхождений каждого символа и выводить их на экран.....
должно выглядеть примерно так:

sim r t o m p -это символы из файла
kol 5 7 1 5 6 -это количество их в тексте
0
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
22.04.2012, 01:30
лучше написать заново:
C#
1
private Dictionary<char, int> charint = new Dictionary<char, int>();
C#
1
2
3
4
5
6
7
private void button1_Click(object sender, EventArgs e)
{
    label1.ResetText(); label2.ResetText(); charint.Clear(); string temp;
    using (StreamReader f = new StreamReader("text.txt", Encoding.Default))) while ((temp = f.ReadLine()) != null) foreach (var CHAR in temp) if (charint.ContainsKey(CHAR)) charint[CHAR]++; else charint.Add(CHAR, 1);
    foreach (var k in charint.Keys) label2.Text += k.ToString() + " ";
    foreach (var v in charint.Values) label1.Text += v.ToString() + " ";
}
1
1 / 1 / 0
Регистрация: 21.04.2012
Сообщений: 38
22.04.2012, 03:01  [ТС]
Спасибо большое за помощь!!!))) Посмотрев на Ваши примеры доработал свой код!!!!
Вот рабочий код:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
 
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Dictionary<char, int> tabl = new Dictionary<char, int>();
        int n;
        private void button1_Click(object sender, EventArgs e)
        {
             FileStream fin;
            string s;
           
            try
            {
                fin = new FileStream("text.txt", FileMode.Open);
            }
            catch (IOException exc)
            {
                MessageBox.Show("Ошибка открытия файла:\n" + exc.Message);
                return;
            }
            StreamReader fstr_in = new StreamReader(fin);
            try
            {
                while ((s = fstr_in.ReadLine()) != null)
                {
                    label1.Text += s.ToString();
 
                    for (int i = 0; i < s.Length; i++)
                    {
                        if (tabl.ContainsKey(s[i]) == true)
                        {
                            n = 0;
                            tabl.TryGetValue(s[i],out n);
                            n++;
                            tabl[s[i]] = n;
 
                        }
                        else
                        {
                            tabl.Add(s[i],1);
                        }
                    }
                    foreach (char k in tabl.Keys)
                    {
                        label2.Text += k.ToString() + " ";
                    }
                    foreach (int v in tabl.Values)
                    {
                        label3.Text += v.ToString() + " ";
                    }
 
                }
            }
            finally
            {
                fstr_in.Close();
            }
Добавлено через 24 минуты
Теперь вот встал вопрос как эту структуру отсортировать по значению?
0
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
22.04.2012, 03:16
DarkOFF, ну только скорость посмотри. мои 4 строчки обрабатывают книгу в 1МБ меньше, чем за секунду, но твой очччччень медленно "сработал" я даже не дождался (ждал где-то минуту).

и ещё не забудь про Encoding а то русские буквы не считаешь.[

Цитата Сообщение от DarkOFF Посмотреть сообщение
Теперь вот встал вопрос как эту структуру отсортировать по значению?
C#
1
charint = charint.OrderBy(o => o.Value).ToDictionary(o => o.Key, o => o.Value);
или

C#
1
charint = charint.OrderByDescending(o => o.Value).ToDictionary(o => o.Key, o => o.Value);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2012, 03:16
Помогаю со студенческими работами здесь

Индекс за пределами диапазона
Проблема возникает в этом участке кода: Children childrens = new Children { new Children() { Id = 1, FirstName =...

Индекс за пределами диапазона
Работаю с одномерным и двумерным списком. Нужно с одномерного списка рандомно разбросить значения на двумерный. Компилятор выдает...

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

Индекс за пределами диапазона. Ошибка
Помогите исправить ошибку. Появляется при многократном добавлении записи в листбокс (но это не точно). Вот архив с моим проектом:

Индекс за пределами диапазона. DataGridView
Здравствуйте! В общем суть такая, я ввожу в датагрид данные. а теперь по нажатию кнопки хочу получить эти введенные значения в массив. На...


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

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

Новые блоги и статьи
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru