Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 01:14   #1
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию структура C#...почему не работает сортировка по "НАЗВАНИЮ АВТО"??

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace laba_programmirovanie
{
    public struct salon
    {
        public int data;
        public double ob;
        public string nazv;
    }
    public class A : IComparer<salon>
    {
        public int Compare(salon x, salon y)
        {
            if (x.data < y.data)
                return 1;
            else return 0;
        }
    }
    public class B : IComparer<salon>
    {
        public int Compare(salon x, salon y)
        {
            if (x.ob < y.ob)
                return 1;
            else return 0;
        }
    }

    class Program
    {


        static void Main(string[] args)
        {
            List<salon> myspisok = new List<salon>();
            Console.WriteLine("введите количество учетных записей:");
            int n = Convert.ToInt32(Console.ReadLine());
            for (int f = 0; f < n; f++)
            {

                Console.WriteLine("\tМеню:");
                Console.WriteLine("1- ввод параметров авто");
                Console.WriteLine("2- сортировка по дате выпуска");
                Console.WriteLine("3- сортировка по объему");
                Console.WriteLine("4- сортировка по названию");
                Console.WriteLine("5- вывод параметров");
                Console.WriteLine("6- выход из программы");
                int otvet = Convert.ToInt32(Console.ReadLine());

                if (otvet == 1)
                {

                    salon my;
                    Console.WriteLine("введите марку:");
                    my.nazv = Console.ReadLine();
                    Console.WriteLine("дата выпуска: ");
                    my.data = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("объем двигателя:");
                    my.ob = Convert.ToDouble(Console.ReadLine());
                    myspisok.Add(my);
                    Console.ReadLine();

                    if (otvet == 4)
                    {
                        myspisok.Sort();

                        foreach (salon a in myspisok)
                        {
                            Console.WriteLine(a);
                        }
                    }
                }
                if (otvet == 2)
                {
                    A d = new A();
                    myspisok.Sort(d);
                    Console.WriteLine("Сортировка по дате выпуска:");
                    foreach (salon pp in myspisok)
                        Console.WriteLine("{0}\t{1}", pp.nazv, pp.data);
                    Console.ReadKey();
                }
                if (otvet == 3)
                {

                    B dnew = new B();
                    myspisok.Sort(dnew);
                    Console.WriteLine("Сортировка по объему:");
                    foreach (salon pp in myspisok)
                        Console.WriteLine("{0}\t{1}", pp.nazv, pp.ob);
                    Console.ReadKey();
                }
                if (otvet == 5)
                {
                    foreach (salon pp in myspisok)
                    {
                        Console.WriteLine("название авто: {0}", pp.nazv);
                        Console.WriteLine("объем двигателя :{0}", pp.ob);
                        Console.WriteLine("год выпуска {0}", pp.data);
                    }
                }

                if (otvet == 6)
                    return;

            }
            Console.ReadLine();

        }

    }

}

Последний раз редактировалось Serg94; 14.03.2012 в 01:24.
Serg94 вне форума Ответить с цитированием
Старый 14.03.2012, 01:52   #2
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Не смущает, что блок if(otvet == 4) внутри блока if(otvet == 1)?
Кроме того, почему для сортировки по названию используется дефолтный Comparer?
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.

Последний раз редактировалось Lasur; 14.03.2012 в 01:56.
Lasur вне форума Ответить с цитированием
Старый 14.03.2012, 15:54   #3
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию

как по-другому сделать?!
Serg94 вне форума Ответить с цитированием
Старый 14.03.2012, 16:48   #4
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

switch(otvet)
{
case 1:
case 2:
...
}
Guy вне форума Ответить с цитированием
Старый 14.03.2012, 23:31   #5
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
switch(otvet)
{
case 1:
case 2:
...
}
я как бы функции не писал, и вот это использовать не могу
Serg94 вне форума Ответить с цитированием
Старый 14.03.2012, 23:54   #6
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Какие функции?
Что мешает сделать так?
Код:
switch (otvet)
{
	case 1:
		salon my;
		Console.WriteLine("введите марку:");
		my.nazv = Console.ReadLine();
		Console.WriteLine("дата выпуска: ");
		my.data = Convert.ToInt32(Console.ReadLine());
		Console.WriteLine("объем двигателя:");
		my.ob = Convert.ToDouble(Console.ReadLine());
		myspisok.Add(my);
		Console.ReadLine();
		break;
	case 2:
		//... и т.д.
		break;
	//... и т.д.
}
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 15.03.2012, 09:28   #7
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

По сути дела тебе во втором сообщении сказали почему

Код:
 if (otvet == 1)
                {

                    salon my;
                    Console.WriteLine("введите марку:");
                    my.nazv = Console.ReadLine();
                    Console.WriteLine("дата выпуска: ");
                    my.data = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("объем двигателя:");
                    my.ob = Convert.ToDouble(Console.ReadLine());
                    myspisok.Add(my);
                    Console.ReadLine();

                    if (otvet == 4)
                    {
                        myspisok.Sort();

                        foreach (salon a in myspisok)
                        {
                            Console.WriteLine(a);
                        }
                    }
                }
Надо поменять на
Код:
 if (otvet == 1)
                {

                    salon my;
                    Console.WriteLine("введите марку:");
                    my.nazv = Console.ReadLine();
                    Console.WriteLine("дата выпуска: ");
                    my.data = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("объем двигателя:");
                    my.ob = Convert.ToDouble(Console.ReadLine());
                    myspisok.Add(my);
                    Console.ReadLine();

                    
                }
if (otvet == 4)
                    {
                        myspisok.Sort();

                        foreach (salon a in myspisok)
                        {
                            Console.WriteLine(a);
                        }
                    }
А switch про который я написал просто читаемость кода улучшит
Guy вне форума Ответить с цитированием
Старый 15.03.2012, 16:53   #8
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию

Код:
 }
                    if (otvet == 4)
                    {
                        myspisok.Sort();

                        foreach (salon a in myspisok)
                        {
                            Console.WriteLine(a);
                        }
                    }
почему эта часть не срабатывает???
Serg94 вне форума Ответить с цитированием
Старый 15.03.2012, 16:57   #9
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
По сути дела тебе во втором сообщении сказали почему

Код:
 if (otvet == 1)
                {

                    salon my;
                    Console.WriteLine("введите марку:");
                    my.nazv = Console.ReadLine();
                    Console.WriteLine("дата выпуска: ");
                    my.data = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("объем двигателя:");
                    my.ob = Convert.ToDouble(Console.ReadLine());
                    myspisok.Add(my);
                    Console.ReadLine();

                    if (otvet == 4)
                    {
                        myspisok.Sort();

                        foreach (salon a in myspisok)
                        {
                            Console.WriteLine(a);
                        }
                    }
                }
Надо поменять на
Код:
 if (otvet == 1)
                {

                    salon my;
                    Console.WriteLine("введите марку:");
                    my.nazv = Console.ReadLine();
                    Console.WriteLine("дата выпуска: ");
                    my.data = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("объем двигателя:");
                    my.ob = Convert.ToDouble(Console.ReadLine());
                    myspisok.Add(my);
                    Console.ReadLine();

                    
                }
if (otvet == 4)
                    {
                        myspisok.Sort();

                        foreach (salon a in myspisok)
                        {
                            Console.WriteLine(a);
                        }
                    }
А switch про который я написал просто читаемость кода улучшит
я понял о чем ты..я просто забыл скобку поставить..просто оно не сортирует..по названию
Serg94 вне форума Ответить с цитированием
Старый 16.03.2012, 00:18   #10
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Как один из вариантов (я писал об этом выше) - для сортировки по salon.nazv не написан Comparer<salon>, как это сделано для salon.data и salon.ob. При сортировке по названию вылетает Exception или просто выдает неверный порядок?
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему не работает метод "LabelProgress" ? Blame Microsoft Office Excel 4 25.12.2011 10:03
МасОС не работает ,хоть и Видит,Интернет и "сломалась" "Сеть" =/ ApxuKILLER Операционные системы общие вопросы 2 05.05.2011 08:22
[Pascal] Почему-то не работает программа "Множества" zifanchuck Помощь студентам 1 27.11.2010 22:24
Почему не работает Case txt Like "текст1", "текст2" Oooleg Microsoft Office Excel 2 15.07.2009 10:08
"Модель молекулы в газе" подскажите почему не работает? Тёма(C@$pEr) Помощь студентам 4 03.02.2009 20:28