Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите разобраться почему неправильно работает код на С#

76K
01 апреля 2012 года
Anna_skrypnik
3 / / 26.12.2011
Здравствуйте! Помогите пожалуйста разобраться почему неправильно работает ниже изложенный код. Получается когда ввожу номер рейса и такой рейс есть то почему то все равно выкидывает на catch с сообщением "Нужно вводить число!". Хотя вводится число и при дебаге кода все находится но на экран почему то выводится не найденная информация а выше изложенное сообщение.

Вот код самой программы:

Код:
using System;
using System.IO;

namespace lab6_4
{
//определение класса аерофлот
class Aeroflot
{
//конструктор, создаем новые обекты
public Aeroflot(string name, int number, string type)
{
this.Name = name;
this.Number = number;
this.Type = type;

}

//метод показа на экране
public void ShowAeroflot()
{
Console.WriteLine("Название: {0},Номер рейса: {1},Тип самолета: {2}",
this.Name, this.Number, this.Type);
}

//метод записи в файл
public void writeAeroflot(StreamWriter Writer)
{
// "|" - разделитель между полями
Writer.WriteLine("|{0}|{1}|{2}|",
this.Name, this.Number, this.Type);
}


private string name;//поле - название пункта назначения рейса
//доступ к полю
public string Name
{
get { return name; }
set { name = value; }
}

private int number;//поле - номер рейса
//доступ к полю
public int Number
{
get { return number; }
set { number = value; }
}

//поля - тип мамолета
private string type;
//доступ к полю
public string Type
{
get { return type; }
set { type = value; }
}


class Program
{
public const int LengthArray = 7;//емкость массива

//выводим массив на экран
static void ShowArray(Aeroflot[] aeroflot)
{
for (int j = 0; j < LengthArray; j++)
{
Console.WriteLine("{0} ,{1} ,{2}", aeroflot[j].Name, aeroflot[j].Number,
aeroflot[j].Type);
}
}

static void Main(string[] args)
{
int i = 0;
//создадим или откроем текстовый файл
//имя этого файла такое же как у программы, расширение txt
string dirName = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
string fileName = dirName.Insert(dirName.Length, "\\lab6_4.txt");
//создаем файл для записи в него
//используем using для гарантированой "уборки мусора" - удаления используемого
//дискриптора после последнего "}"
using (StreamWriter writer = File.CreateText(fileName))
{
//создаем 7 объектов Aeroflot,выводим на экран и записываем их в файл lab6_4.txt
Aeroflot Aeroflot1 = new Aeroflot("Москва", 2, "Ту-154");
Aeroflot1.ShowAeroflot();
Aeroflot1.writeAeroflot(writer);
Aeroflot Aeroflot2 = new Aeroflot("Самара", 3, "Ту-152");
Aeroflot2.ShowAeroflot();
Aeroflot2.writeAeroflot(writer);
Aeroflot Aeroflot3 = new Aeroflot("Сочи", 11, "Ту-150");
Aeroflot3.ShowAeroflot();
Aeroflot3.writeAeroflot(writer);
Aeroflot Aeroflot4 = new Aeroflot("Харьков", 4, "Ан-52");
Aeroflot4.ShowAeroflot();
Aeroflot4.writeAeroflot(writer);
Aeroflot Aeroflot5 = new Aeroflot("Донецк", 1, "Ту-156");
Aeroflot5.ShowAeroflot();
Aeroflot5.writeAeroflot(writer);
Aeroflot Aeroflot6 = new Aeroflot("Одесса", 7, "Ту-154");
Aeroflot6.ShowAeroflot();
Aeroflot6.writeAeroflot(writer);
Aeroflot Aeroflot7 = new Aeroflot("Вильнюс", 18, "Ан-154");
Aeroflot7.ShowAeroflot();
Aeroflot7.writeAeroflot(writer);
}
//Создаем массив,состоящий из 7 объектов типа Aeroflot
Aeroflot[] aeroflot = new Aeroflot[LengthArray];
//инициализируем этот массив
for (i = 0; i < LengthArray; i++)
aeroflot[i] = new Aeroflot("",0,"");


//читаем из файла и заполняем массив aeroflot
using (StreamReader reader = File.OpenText(fileName))
{
string line = null;
//разделители в файле
char[] delims = new char[] { '|'};
int num = 0;
i = 0;
do
{
line = reader.ReadLine();//
//парсим строку из файла, чтобы выделить наши поля
//и помещаем эти поля в массив строк field
string[] fields = line.Split(delims, StringSplitOptions.RemoveEmptyEntries);//опция-пропуск пустых строк
//преобразовуем при необходимости строки в числа
aeroflot[i].Name = fields[0];
int.TryParse(fields[1], out num);
// int.TryParse(fields[1], out h);
aeroflot[i].Number = num;
aeroflot[i].Type = fields[2];
i++;
} while ((line != null) && (i < LengthArray));
}

Console.WriteLine("Неотсортированный массив:");
ShowArray(aeroflot);
//Отсортирум массив по возрастанию
Array.Sort(aeroflot, delegate(Aeroflot aeroflot1, Aeroflot aeroflot2)
{
return aeroflot1.Number.CompareTo(aeroflot2.Number);
});
Console.WriteLine("Массив отсортированный по возрастанию номера рейса:");
ShowArray(aeroflot);

try
{
bool notAeroflot = true;
Console.WriteLine("Введите номер самолета, чтобы получить информацию: ");
int search = int.Parse(Console.ReadLine());
for (i = 0; i < LengthArray; i++)
{
if (search == aeroflot[i].Number)
{
Console.WriteLine("Название пункта назначения рейса: {0},Номер рейса: {1},Тип самолета: {2}}",
aeroflot[i].Name, aeroflot[i].Number, aeroflot[i].Type);
notAeroflot = false;
break;

}

}
if (notAeroflot)
{
Console.WriteLine("Нет такого самолета.");
//пишем в конец файл, что такого самолета нет Зачем????
using (TextWriter writer = new StreamWriter(fileName, true))
{
writer.WriteLine("Нет такого самолета номер " + search);

}

}
}
//если вместо номера самолета введена абракадабра
catch (FormatException e)
{
Console.WriteLine("Нужно вводить число!");
}


Console.ReadLine();
}
}
}
}
67K
02 апреля 2012 года
NoXCode
64 / / 11.03.2012
В приведенном коде очень много ошибок. Рабочий код:
Код:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lab6_4
{
 class Aeroflot
 {
        public string m_sName;      //поле - название пункта назначения рейса
        public string m_sAircraft;  //поля - тип мамолета
        public int    m_nFlight;    //поле - номер рейса

        //конструктор, создаем новые обекты
        public Aeroflot() { }
        public Aeroflot(string sName, int nFlight, string sAircraft)
        {
            this.m_sName     = sName;
            this.m_nFlight   = nFlight;
            this.m_sAircraft = sAircraft;
        }

        //метод показа на экране
        public void ShowAeroflot()
        { Console.WriteLine("Название: {0}, Номер рейса: {1}, Тип самолета: {2}",
            this.m_sName, this.m_nFlight, this.m_sAircraft); }

        //метод записи в файл
        public void writeAeroflot(StreamWriter Writer)
        { Writer.WriteLine("|{0}|{1}|{2}|", this.m_sName, this.m_nFlight, this.m_sAircraft); }
 }

    class Program
    {
        public const int nArrayLength = 7; //емкость массива

        //выводим массив на экран
        static void ShowArray(Aeroflot[] aeroflot)
        {
            for (int j = 0; j < aeroflot.Length; j++)
                aeroflot[j].ShowAeroflot();

            Console.WriteLine("\n\n");
        }

        static void Main(string[] args)
        {
            //создаем 7 объектов Aeroflot,выводим на экран и записываем их в файл lab6_4.txt
            //инициализируем этот массив
            Aeroflot[] aeroflot = new Aeroflot[nArrayLength] { new Aeroflot("Москва",  2,  "Ту-154"),
                                                               new Aeroflot("Самара",  3,  "Ту-152"),
                                                               new Aeroflot("Сочи",   11,  "Ту-150"),
                                                               new Aeroflot("Харьков", 4,  "Ан-52"),
                                                               new Aeroflot("Донецк",  1,  "Ту-156"),
                                                               new Aeroflot("Одесса",  7,  "Ту-154"),
                                                               new Aeroflot("Вильнюс", 18, "Ан-154") };
            //создадим или откроем текстовый файл
            //имя этого файла такое же как у программы, расширение txt
            string dirName = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
            string fileName = dirName.Insert(dirName.Length, "\\lab6_4.txt");
            try
            {
                //создаем файл для записи в него
                //используем using для гарантированой "уборки мусора" - удаления используемого
                //дискриптора после последнего "}"
                using (StreamWriter writer = File.CreateText(fileName))
                {
                    for (int i = 0; i < aeroflot.Length; i++)
                        aeroflot[i].writeAeroflot(writer);
                }

                ShowArray(aeroflot);

                //читаем из файла и заполняем массив aeroflot
                using (StreamReader reader = File.OpenText(fileName))
                {
                    //разделители в файле
                    string line = ""; char[] sep = { '|' };
                    for (int n = 0; (reader.Peek() >= 0) && (n < nArrayLength); n++)
                         if ((line = reader.ReadLine()) != "")
                            {
                                //парсим строку из файла, чтобы выделить наши поля
                                //и помещаем эти поля в массив строк field
                                aeroflot[n] = new Aeroflot("", 0, "");
                                //опция-пропуск пустых строк
                                //преобразовуем при необходимости строки в числа
                                string[] fields = line.Split(sep, StringSplitOptions.RemoveEmptyEntries);
                                aeroflot[n].m_sName = fields[0];
                                Int32.TryParse(fields[1], out aeroflot[n].m_nFlight);
                                aeroflot[n].m_sAircraft = fields[2];
                            }
                    }

                    Console.WriteLine("Неотсортированный массив:");
                    ShowArray(aeroflot);
                    //Отсортирум массив по возрастанию
                    Array.Sort(aeroflot, delegate(Aeroflot aeroflot1, Aeroflot aeroflot2)
                    { return aeroflot1.m_nFlight.CompareTo(aeroflot2.m_nFlight); });

                    Console.WriteLine("Массив отсортированный по возрастанию номера рейса:");
                    ShowArray(aeroflot);

                    try
                    {
                        Console.WriteLine("Введите номер самолета, чтобы получить информацию: ");

                        int nFlight = 0; int q = 0; bool bAeroflot = false;
                        if ((nFlight = int.Parse(Console.ReadLine())) > 0)
                        {
                            while ((q < aeroflot.Length) && (bAeroflot == false))
                            {
                                if (aeroflot[q].m_nFlight == nFlight)
                                {
                                    bAeroflot = true;
                                    Console.WriteLine("Название пункта назначения рейса: {0},Номер рейса: {1}, Тип самолета: {2}",
                                       aeroflot[q].m_sName, aeroflot[q].m_nFlight, aeroflot[q].m_sAircraft);
                                }

                                q++;
                            }

                            if (bAeroflot == false)
                            {
                                Console.WriteLine("Нет такого самолета.");
                                using (TextWriter writer = new StreamWriter(fileName, true))
                                { writer.WriteLine("Нет такого самолета номер " + aeroflot[q].m_nFlight); }
                            }
                        }
                    }

                    catch (FormatException e)
                    {
                        Console.WriteLine("Нужно вводить число!");
                    }
            }

            catch (Exception e)
            {
                // Let the user know what went wrong.
                Console.WriteLine("Unable to perform file operations\n");
                Console.WriteLine(e.Message);
            }

            Console.ReadLine();
        }
    }
}
443
01 апреля 2012 года
REmindER
292 / / 23.03.2003
Не специалист в C#, но смущает следующее:

 
Код:
Aeroflot[] aeroflot = new Aeroflot[LengthArray];
    //инициализируем этот массив
for (i = 0; i < LengthArray; i++)
    aeroflot = new Aeroflot("",0,"");
Если aeroflot является массивом, то далее не вижу обращения к нему по индексам.
9.0K
02 апреля 2012 года
t-34
129 / / 30.11.2007
Вот тут вот
 
Код:
Console.WriteLine("Название пункта назначения рейса: {0},Номер рейса: {1},Тип самолета: {2}}",
aeroflot.Name, aeroflot.Number, aeroflot.Type);
у вас лишняя закрывающая фигурная скобочка. Должно быть так :
 
Код:
Console.WriteLine("Название пункта назначения рейса: {0},Номер рейса: {1},Тип самолета: {2}",
aeroflot.Name, aeroflot.Number, aeroflot.Type);
Да, и отформатируйте код с помощью тэгов, читать невозможно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог