Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Инициализация переменной типа string [][]


Автор: Lion_Smith 14.3.2008, 11:41
Даётся массив строк string s[]. Необходимо разбить каждую строку этого массива на 3 отдельные строки. В первой буквы, во второй цифры, в третьей знаки препинания. Т.е
есть string s[]
1  |  Строка 1  
2  |  Строка 2 
3  |  Строка 3 
4  |  Строка 4  

Нужно сделать из неё двумерный масив string ss[][]
1  |  Буквы  |  Цифры  |  ЗнакиПрепинания  |
2  |  Буквы  |  Цифры  |  ЗнакиПрепинания  |
3  |  Буквы  |  Цифры  |  ЗнакиПрепинания  |
4  |  Буквы  |  Цифры  |  ЗнакиПрепинания  |

и всё это должно выполняться в методе MakeStrings.
Код конольного приложения вот тут:

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


namespace ConsoleApplication2
{
    class Program
    {
        public void Main(string[] args)
        {
            //обявляем переменные
//Как правильно записать нижестоящие 3 строчки, что бы не вылезало сообщение об ошибке:
//1) Use of unassigned local variable 'program'
//2) Use of unassigned local variable 's'
//3) Use of unassigned local variable 'ss'
//Я понимаю, что я объявил переменые, но не инициализировал их! Как их правильно инициализировать при объявлениии. Пусть s и ss будут например пустыми масивами. и как инициализировать program??? 

            string[] s;
            string[][] ss;
            //создаём экземпляр класса Program
            Program program;
            //вызываем метод MakeStrings и передаём в него переменные по ссылке используя ref
            program.MakeStrings(ref s, ref ss);
        }

// а здесь описан сам метод MakeStrings
        public void MakeStrings(ref string[] s, ref string [][]ss)
        {
           int n = 0;
            foreach (string sn in s)
            {

                foreach (int sl in sn)
                {
                    //обрабатываем строку sn
                    // если не буква или не цифра, то
                    if (!char.IsLetterOrDigit(sn[sl]))
                    {
                        ss[n][2] = ss[n][2] + sn[sl];
                    }
                    else 
                    {
                        // если цифры, то
                        if (char.IsDigit(sn[sl]))
                        {
                            ss[n][1] = ss[n][1] + sn[sl];
                        }
                        else
                        {
                            // тогда точно буква
                            ss[n][0] = ss[n][0] + sn[sl];

                        }
                     
                    }
                }
                n = +1;
            }
        }    
    }
}




Автор: CYBERDREAM 14.3.2008, 11:47
Задай размеры массивам
Код

string[]s=new string[10];
string[,] mas=new string[10,3];

Автор: Lion_Smith 14.3.2008, 12:08
Поправил код! теперь он выглядит во так:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace ConsoleApplication2
{
    class Program
    {
        public void Main(string[] args)
        {
            string[] s = new string[10];
            string[,] ss = new string[10, 3];
// но по прежнему выскакивает ошибка Use of unassigned local variable 'program'
            Program program;
            program.MakeStrings(ref s, ref ss);
        }
        public void MakeStrings(ref string[] s, ref string [,]ss)
        {
           int n = 0;
            foreach (string sn in s)
            {

                foreach (int sl in sn)
                {
                    //обрабатываем строку sn
                    // если не буква или не цифра, то
                    if (!char.IsLetterOrDigit(sn[sl]))
                    {
                        ss[n,2] = ss[n,2] + sn[sl];
                    }
                    else 
                    {
                        // если цифры, то
                        if (char.IsDigit(sn[sl]))
                        {
                            ss[n,1] = ss[n,1] + sn[sl];
                        }
                        else
                        {
                            // тогда точно буква
                            ss[n,0] = ss[n,0] + sn[sl];

                        }
                     
                    }
                }
                n = +1;
            }
        }    
    }
}

Автор: CYBERDREAM 14.3.2008, 12:16
вместо 
Код

    Program program;
            program.MakeStrings(ref s, ref ss);

напиши 
Код

            this.MakeStrings(ref s, ref ss);
            ///или просто
            MakeStrings(ref s, ref ss);


Добавлено через 50 секунд
Тебе нет никакого резона создавать новый объект класса Program

Автор: QryStaL 14.3.2008, 12:29
 smile  Lion_Smith, пожалуйста, пользуйтесь кнопкой "Код".

Автор: vponomarov 14.3.2008, 13:09
Lion_Smith, неплохо бы для себя уяснить разницу между объявлением и созданием переменной.
если вы напишите Program program - это говорит всего-лишь о том, что program является объектом типа Program, а работать с ним можно только после создания, т.е.  Program program=new Program() (ну или какой-нить другой конструктор).
поэтому компилятор и выдает Вам ошибки.

Автор: Lion_Smith 14.3.2008, 13:12
Спасибо за пояснения.. почитаю соответсвующие главы в Книге smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)