Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
.NET 4.x

Сравнение массива типа string с числом типа double

29.07.2012, 22:41. Показов 2735. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Проблема заключается в том,что нужно найти индекс максимального размера галактики.
Само число хранится в двумерном массиве,первый столбец которого-название галактики,а второй-её размер. Массив типа string,для поиска ввёл переменную типа double. В строчке с циклом поиска, в условии if (ew<(Convert.ToDouble(mas[i,1]))) (55 строка) возникает исключение "Строка имела неверный входной формат" (или типа того).
В массиве могут быть числа типа 21029.556(берутся из файла).Индекс максимального значения элемента используется,но не выводится. Пробовал точку заменить на запятую-не помогает.
Вопрос,почему не получается так? И как можно это сделать по другому.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace podschet
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> galaxy = new List<string>();
            List<string> size = new List<string>();
            string obrab = null;
            double ew = 0;
            int ind;
            Encoding enc = Encoding.GetEncoding(1251);
            System.Reflection.Assembly a = System.Reflection.Assembly.GetEntryAssembly();
            System.IO.StreamReader file = new System.IO.StreamReader("galaxies10k.sc");
            if (File.Exists("galaxies10k.sc"))
            {
                while ((obrab = file.ReadLine()) != null)
                {
                    if (obrab.IndexOf("Galaxy") >= 0 && (obrab.IndexOf("//")==-1))
                    {
                        galaxy.Add(obrab.Substring(obrab.IndexOf('"')));
                    }
                    if (obrab.IndexOf("Radius") >= 0)
                    {
                        string temp=obrab.Substring(9).Trim();
                        if (temp.IndexOf("/")>=0)
                        {
                            size.Add(temp.Substring(0, (obrab.IndexOf(" ")-2)));
                        }
                        else
                        {
                            size.Add(obrab.Substring(9));
                        }
                    }
                }
            }
            file.Close();
            Console.WriteLine("Окончено");
            StreamWriter write = new StreamWriter("end.txt");
            string[,] mas=new string[galaxy.Count,2];
            for (int i = 0; i < galaxy.Count; i++)
            {
                mas[i, 0] = galaxy[i];
                mas[i, 1] = size[i];
            }
            for (int i = 0; i < mas.GetLength(0); i++)
            {
                mas[i, 1] = mas[i, 1].Trim();
                if  (ew<(Convert.ToDouble(mas[i,1])))
                {
                    ind = i;
                    ew = Convert.ToDouble((mas[i, 1]));
                }
 
            }
            for (int i = 0; i < galaxy.Count;i++ )
            {
                write.WriteLine(galaxy[i]+" "+size[i]);
            }
            size.Sort();
            Console.ReadKey();
        }
 
    }
}
Заранее спасибо!
Вложения
Тип файла: rar galaxies10k.rar (493.0 Кб, 5 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2012, 22:41
Ответы с готовыми решениями:

Как сгенерировать случайное число типа я double имея на входе 2 числа типа double - минимальное и максимальное
Например: public class ExtendedRandom : Random { public ExtendedRandom() : base() { ...

Создать структуру включающую в себя константу типа double, закрытое поле типа double
Помогите пожалуйста с заданием, создать структуру включающую в себя константу типа double, закрытое поле типа double, которому при...

Запись информации из вектора типа string в вектор типа double
Как записать только числа , которые хранятся в векторе типа стринг, в вектор типа дабл, в векторе типа стринг есть как буквы так и числа ,...

17
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
29.07.2012, 22:49
размер обоих списков не обязательно одинаков, и элемент номер 3, например, в "галактиках" не обязательно соотверствует элементу 3 в размерах. это может случиться если, например,
C#
1
if (obrab.IndexOf("Galaxy"
не true или по другим причинам. лучше заведи
Dictionary<string, double> и заполняй сразу из каждой строки по элементу, причем если и имя галактики, и размер удалось найти в строке, иначе обработай ошибку (выдай всю строку на консоль, например), и продолжай читать файл.
1
 Аватар для Creative
22 / 8 / 0
Регистрация: 13.07.2012
Сообщений: 66
29.07.2012, 22:50
пробовали после чтения из файла вывести на экран то что получается? скорее всего она у вас некорректно читает и строки получаются неконвертируемые. ну это так на вскидку, что бы я первым делом проверил.
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
30.07.2012, 07:05  [ТС]
Я смотрел в отладчике-первые три записи,которые обрабатываются,содержат число без точек. 4-я уже содержит число с точкой,и на этом моменте вылетает ошибка. Разве double точки не поддерживает?

Добавлено через 3 минуты
novi4ok, сравнивал размерности size и galaxy -одинаковые
Creative, хорошо,вечером проверю
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
30.07.2012, 09:58
Какой у вас разделитель между целой частью и дробной зависит от культуры в системе (если не указано обратное). Культуру можно посмотреть в Thread.CurrentThread.CurrentCulture а сам знак, кажется, в Thread.CurrentThread.CurrentCulture.Numb erFormat.CurrencyDecimalSeparator. Как вариант, можно перед конвертацией в число заменять вашу запятую на нужный символ. Либо установить свою культуру явно (где будет разделитель запятая).

Так же советую посмотреть метод double.TryParse
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
30.07.2012, 10:40  [ТС]
servitola, точно,оказывается так и было,но не знаю почему,в отладчике при ручном изменении точки на запятую в условии возникала та-же ошибка...
Можно ли эту культуру изменить?
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
30.07.2012, 11:12
Можно. Для примера: Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU")
То есть проще простого.
Для ликбеза - существует параллельно свойство Thread.CurrentThread.CurrentUICulture. Задаёт используемую культуру в интерфейсе. Например, задаёт форматирование ваших строк в интерфейсе в соответствие с культурой в этом параметре. Можете погуглить на тему "WinForms локализация".

ну и double.TryParse я вам указал потому, что там можно явно указать культуру, по которой парсить строку в число. Ну и не менять культуру всего приложения.
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
30.07.2012, 21:30  [ТС]
servitola, а что подключить надо? У меня
Цитата Сообщение от servitola Посмотреть сообщение
CultureInfo
красным подчёркивает.
0
4 / 4 / 0
Регистрация: 29.07.2012
Сообщений: 15
30.07.2012, 22:42
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace Galaxy
{
    class MyGalax
    {
        public string Name;
        public double Size;
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            List<MyGalax> list = new List<MyGalax>();
 
            try
            {
                using ( StreamReader sr = new StreamReader( "galaxies10k.sc" ) )
                {
                    string line;
                    MyGalax item = new MyGalax();
 
                    while ( ( line = sr.ReadLine() ) != null )
                    {
                        if ( line.IndexOf( "Galaxy" ) == 0 )
                        {
                            item.Name = line.Substring( line.IndexOf( "\"" ) + 1 );
                            item.Name = item.Name.Substring(0,item.Name.IndexOf("\"") - 1);
                        }
                        if ( line.IndexOf( "Radius" ) != -1 )
                        {
                            line = line.Substring(10);
                            try
                            {
                                line = line.Substring( 0, line.IndexOf( " " ) );
                            }
                            catch { }
                            line = line.Replace( ".", "," );
                            item.Size = Convert.ToDouble( line.Trim() );
                        }
 
                        if ( item.Name != null && item.Size != null )
                        {
                            Console.WriteLine( item.Name+"\t"+item.Size.ToString() );
                            list.Add( item );
                            item.Name = null;
                        }
                    }
                }
            }
            catch ( Exception e )
            {
                Console.WriteLine( "The file could not be read:" );
                Console.WriteLine( e.Message );
            }
            Console.ReadKey();
        }
    }
}
создает массив записей галактики и радиус и выводит каждую запись в консоль
1
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
30.07.2012, 23:19
ну с такими вопросами к MSDN обычно стоит ))
полный путь System.Globalization.CultureInfo
библиотека mscorlib.dll
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
31.07.2012, 20:22  [ТС]
И в конце ещё вопросик,как можно обратиться к i-ому символу массива mas[j,k]? Например считать его,изменить?

Добавлено через 5 минут
Vadim39, протестил ваш код,и (по крайней мере) в последних 10-30 записях для каждой i-ой галактики показывается i+1-ый размер,соответственно последнюю галактику программа обработать не может. Но это уже не важно...
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
01.08.2012, 11:29
почему бы не сделать вот так:

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
public class Galaxy
    {
        public Galaxy(string name, int size)
        {
            Name = name;
            Size = size;
        }
 
        public string Name { get; private set; }
 
        public int Size { get; private set; }
    }
 
    public class GalaxyTable : List<Galaxy>
    {
        public Galaxy this[string galaxyName]
        {
            get { return this.First(item => item.Name == galaxyName); }
        }
    }
 
    public static class Main
    {
        public static void Start()
        {
            var table = new GalaxyTable() { new Galaxy("Бубонная",34211)};
        }
    }
0
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
01.08.2012, 13:04  [ТС]
servitola, не,мне это уже не нужно...не охота засорять форум темами для которых требуется короткий ответ,поэтому сейчас мне интересно, как можно ли обратиться к символу строки в массиве строк?
0
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
01.08.2012, 13:05
Цитата Сообщение от the_maksimka Посмотреть сообщение
servitola, не,мне это уже не нужно...не охота засорять форум темами для которых требуется короткий ответ,поэтому сейчас мне интересно, как можно ли обратиться к символу строки в массиве строк?
короткий ответ:
да

Добавлено через 49 секунд
C#
1
2
var sm = new string[] { "вася", "петя", "абырвалг" };
            char c=sm[1][2];
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
01.08.2012, 13:50  [ТС]
Tessen, а в двумерном? Или n-мерном?
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
01.08.2012, 14:17
а в чем проблема? то же самое будет считай:
sm[a][b][c][d]
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
01.08.2012, 16:40  [ТС]
servitola, проблема в том,что у меня почему-то так не получалось...Видно надо книги почитать. Всем спасибо,тему можно закрывать.
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
01.08.2012, 17:55
ну надо посмотреть реализует ли список, который вы используете индексатор. к примеру, у List есть индексатор, а у простого IEnumerable<> его нет. выше я привел пример как сделать свой список вам нужных объектов с индексатором, которому передаешь не номер по порядку, а строку...но, кстати, индексатор по номеру он уже имеет от List, от которого наследуется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2012, 17:55
Помогаю со студенческими работами здесь

Функция, которая принимает аргумент типа String и возвращает результат типа Double
Написать функцию, которая принимает аргумент типа String, и возвращает результат типа Double, который содержит числовой эквивалент значения...

Перевод массива типа double в string
Всем привет. Есть программулина. При нажатии кнопки один я создаю массив типа double и записываю его в txt файл При нажатии второй...

Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int или из чисел типа double
Написать функцию min с переменным числом параметров, которая находит минимальное из чисел типа int или из чисел типа double, тип параметров...

Присвоение объекту типа string рандомный элемент из массива типа string
Добрый вечер, дорогие форумчане. Я столкнулся с проблемой. Как присвоить объекту типа string рандомный элемент из массива типа string? ...

Как конвертировать переменную типа Double в переменную типа String?
Как конвертировать переменную типа Double в переменную типа String. И наоборот.


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru