Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Параметры обьектов


Автор: Demonid 14.10.2007, 09:57
Как создать масив обьектов и запихнуть в параметры два значения?


Массив записей структура которого автор, год издания.


Код

 class Bookss
    {
         private string author;   
         public int year;
        public Bookss(string a, int b) 
        {       author = a;       year = b;   }
        public void PrintInfo()
        {
            Console.WriteLine("Название книги :{0}, Год :{1} ", author, year);
        }
    }
    class Teenager
    {
        private static Random r = new Random();
        private static int GetRamdomNumber(short upperLimit)
        { return r.Next(upperLimit); }
        public static string Complain()
        {
            string[] messages = new string[6] { "Троесент!", "Ватсон!", "Фаронов!", "Шилд!", "Агуров!", "Глинський!" };
            return messages[GetRamdomNumber(5)];
        }
    }
    class Metod
    {
        static public void otobrObject(params object[] lists)
        {
            for (int i = 0; i < lists.Length; i++)
            {
                if (lists[i] is Bookss)
                    ((Bookss)lists[i]).PrintInfo();
                else
                    Console.WriteLine(lists[i]);
            }
            Console.WriteLine("Нажмить на Ентер");
            string stroc=Console.ReadLine();
            }
        }
    class structions
    {
        public static void Main()
        {
            string a;
             int b;
            int i,j,x, size=10;
            
            Random c = new Random();
            Bookss book = new Bookss(a,b);
           
            
            for (i = 0; i < size; i++)
            {

                a = Teenager.Complain();
                b = c.Next(2007);
                book = new Bookss(a, b); 
                Bookss[i].PrintInfo();

                
            }

       }
    }
}     



Автор: mihryak 14.10.2007, 10:24
жудь какая =)
почему в последней строчке вместо вызова метода book.PrintInfo() свежесозданного экземпляра Bookss, ты почему-то обращаешься по индексу к самому имени класса?
и, кстати, добавление скольки бы то ни было букв s к имени класса само по себе не делает его коллекцией объектов =)
объясни лучше, что именно ты хочешь сделать

Автор: kurzon 14.10.2007, 10:31
Цитата(mihryak @ 14.10.2007,  10:24)
жудь какая =)
почему в последней строчке вместо вызова метода book.PrintInfo() свежесозданного экземпляра Bookss, ты почему-то обращаешься по индексу к самому имени класса?
и, кстати, добавление скольки бы то ни было букв s к имени класса само по себе не делает его коллекцией объектов =)
объясни лучше, что именно ты хочешь сделать

Спасиба .
Я хачу сделать программку: 
Массив записей структура которого автор, год издания,  упорядочить по  году издания.

Добавлено через 1 минуту и 52 секунды
Спасиба .
Я хотел сделать программку:
Массив записей структура которого автор, год издания,  упорядочить по  году издания.
Но помощ нужна.

Автор: kurzon 14.10.2007, 10:47
2mihryak Ето я тот кто создавал тему...
Исправляю ошибку:

Код

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

namespace Sort_Book
{
    class Bookss
    {
         private string author;   
         public int year;
        public Bookss(string a, int b) 
        {       author = a;       year = b;   }
        public void PrintInfo()
        {
            Console.WriteLine("Название книги :{0}, Год :{1} ", author, year);
        }
    }
    class Teenager
    {
        private static Random r = new Random();
        private static int GetRamdomNumber(short upperLimit)
        { return r.Next(upperLimit); }
        public static string Complain()
        {
            string[] messages = new string[6] { "Троесент!", "Ватсон!", "Фаронов!", "Шилд!", "Агуров!", "Глинський!" };
            return messages[GetRamdomNumber(5)];
        }
    }
    class Metod
    {
        static public void otobrObject(params object[] lists)
        {
            for (int i = 0; i < lists.Length; i++)
            {
                if (lists[i] is Bookss)
                    ((Bookss)lists[i]).PrintInfo();
                else
                    Console.WriteLine(lists[i]);
            }
            Console.WriteLine("Нажмить на Ентер");
            string stroc=Console.ReadLine();
            }
        }
    class structions
    {
        public static void Main()
        {
            string a;
             int b;
            int i,j,x, size=10;
            
            Random c = new Random();
            Bookss book = new Bookss(a,b);
           
            
            for (i = 0; i < size; i++)
            {
                a = Teenager.Complain();
                b = c.Next(2007);
               book = new Bookss(a, b);
               book.PrintInfo();
                
            }
            
            Console.ReadLine();
             
        }
    }



Но при исправлении ошибки есть  две ошибки..

Error    3    Use of unassigned local variable 'a'    
Error    4    Use of unassigned local variable 'b'    

Ето что за ошыбки?

Автор: 1stain 14.10.2007, 10:55
Цитата(mihryak @  14.10.2007,  10:24 Найти цитируемый пост)
объясни лучше, что именно ты хочешь сделать

имхо, аффтар хочет изучить программирование на C# посредством этого форума.

Автор: mihryak 14.10.2007, 11:00
ну так это замечательно, только вопросы бы были поточнее

Автор: kurzon 14.10.2007, 11:11
Цитата(mihryak @ 14.10.2007,  11:00)
ну так это замечательно, только вопросы бы были поточнее

Спасиба.

Вот задание:   Массив записей структура которого автор, год издания,  упорядочить по  году издания. ( Метод пузырьком )

Но две ошибки после твоих изменений остались:
Error 3 Use of unassigned local variable 'a'
Error 4 Use of unassigned local variable 'b' 




Автор: 1stain 14.10.2007, 12:15
Цитата(mihryak @  14.10.2007,  11:00 Найти цитируемый пост)
ну так это замечательно, только вопросы бы были поточнее

Ничего не имею против, самому приятно подсказать решение, если знаю его. Вот только будет ли аффтару удовольстве от программирования, если ВСЕ задачки за тебя будет решать кто-то на форуме?

з.ы. я так понял, что это пример с какой-то книжки. Если да, то в печку ее! Купи Троелсена или C# для профессионалов, прочитай половину, после этого купи Рихтера "CLR via C#" и читай параллельно.

Автор: kurzon 14.10.2007, 15:11
Код

 Console.ReadLine();
            
             for (j = 0; j < size; j++)
             {
                 for (i = 1; i < size; i++)
                 {
                     if (book.year[i - 1] > book.year[i])
                      {
                          x = book.year[i - 1];
                          book.year[i - 1] = book.year[i];
                          book.year[i] = x;
                             

                       }
                  }
              }
                        Console.WriteLine("Cортованый масив");

              for (i = 1; i < size; i++)
              {
                  book.PrintInfo();
              }


 


А в етом куске программы сместо book.year[i] какой тег надо вставить? 

Автор: mihryak 14.10.2007, 19:24
Цитата(1stain @  14.10.2007,  13:15 Найти цитируемый пост)
Ничего не имею против, самому приятно подсказать решение, если знаю его. Вот только будет ли аффтару удовольстве от программирования, если ВСЕ задачки за тебя будет решать кто-то на форуме?

ну так задачи решать вроде никто и не собирается ;)
а вот подсказать лучшие практики использования шарпа (при наличии собственного опыта) - совсем другое дело



kurzon, непонятно твоё желание использовать перечисление там, где его нет и быть не может.
заведи ещё один класс-контейнер, содержащий в себе коллекцию книг
если нужен отсортированный список - пользуй SortedList<int, Book> или просто List<Book>, вызывая при потребности метод Sort, но тогда потребуется реализовать свой компарер, чтобы сравнение происходило по свойству Year

Автор: kurzon 14.10.2007, 20:26
Цитата(mihryak @ 14.10.2007,  19:24)
Цитата(1stain @  14.10.2007,  13:15 Найти цитируемый пост)
Ничего не имею против, самому приятно подсказать решение, если знаю его. Вот только будет ли аффтару удовольстве от программирования, если ВСЕ задачки за тебя будет решать кто-то на форуме?

ну так задачи решать вроде никто и не собирается ;)
а вот подсказать лучшие практики использования шарпа (при наличии собственного опыта) - совсем другое дело



kurzon, непонятно твоё желание использовать перечисление там, где его нет и быть не может.
заведи ещё один класс-контейнер, содержащий в себе коллекцию книг
если нужен отсортированный список - пользуй SortedList<int, Book> или просто List<Book>, вызывая при потребности метод Sort, но тогда потребуется реализовать свой компарер, чтобы сравнение происходило по свойству Year

Так
Код

class Metod
    {
        static public void otobrObject(params object[] lists)
        {
            for (int i = 0; i < lists.Length; i++)
            {
                if (lists[i] is Bookss)
                    ((Bookss)lists[i]).PrintInfo();
                else
                    Console.WriteLine(lists[i]);
            }
            Console.WriteLine("Нажмить на Ентер");
            string stroc=Console.ReadLine();
            }
        }

Автор: 1stain 15.10.2007, 09:26
не проще ли переопределить в Books метод ToString() и не парицца с проверкой типов, тем более через is

Автор: kurzon 15.10.2007, 20:23
Вот я сделал сортировку, а надо сделать сортировку пузырьком?

Код

using System;

namespace Sort_Book
{
    struct Book
    {
        public Book(string author, int year)
        {
            this._year = year;
            this._author = author;
        }

        private int _year;

        public int Year
        {
            get { return this._year; }
            set { this._year = value; }
        }

        private string _author;

        public string Author
        {
            get { return this._author; }
            set { this._author = value; }
        }

        public override string ToString()
        {
            return String.Format("Название книги :{0}, Год :{1}", Author, Year);
        }
    }
    
    class Teenager
    {
        private static Random random = new Random();
        private static readonly string[] messages = new string[6]
            { 
                "Троесент!", 
                "Ватсон!", 
                "Фаронов!", 
                "Шилд!", 
                "Агуров!", 
                "Глинський!" 
            };

        public static string Complain()
        {
            return messages[random.Next(messages.Length)];
        }
    }

    class Program
    {
        static void PrintBookTitles(Book[] books)
        {
            foreach (Book book in books)
            {
                Console.WriteLine(book);
            }
        }

        static void Main(string[] args)
        {
            Book[] books = new Book[10];
            Random random = new Random();

            for (int i = 0; i < books.Length; i++)
            {
                books[i] = new Book(Teenager.Complain(), random.Next(2007));
            }

            PrintBookTitles(books);

            Array.Sort(books, 
                    delegate(Book a, Book b)
                    {
                        return a.Year.CompareTo(b.Year);
                    });

            Console.WriteLine("После сортировки:");

            PrintBookTitles(books);
        }
    }
}


Мене задали методом сортировка пузырьком ...

А тут сама сортировка:

Код

 for (j = 0; j < size; j++)
                        {
                            for (i = 1; i < size; i++)
                            {
                                if (d[i - 1] > d[i])
                                {
                                    x = d[i - 1];
                                    d[i - 1] = d[i];
                                    d[i] = x;
                                    
                                 }
                             }
                        }


А надо ету сортировку вставить в основную программу?
 

Автор: zaver 15.10.2007, 20:30
юзай метод Sort - он будет оптимальнее твоей сортировки

Автор: kurzon 15.10.2007, 20:32
Цитата(zaver @ 15.10.2007,  20:30)
юзай метод Sort - он будет оптимальнее твоей сортировки


Мене задали методом сортировка пузырьком ...

Мене задали задание и надо ето сделать пажалуста  ?

Автор: zaver 15.10.2007, 20:45
сортировка пузырьком для целых чисел. для всего остального аналогично.
Код

int[] list1=new int[]{.......};
int[] list2=new int[]{.......};

for (int i=0; i<list1.Length; i++)
for (int k=i; k<list2.Length; k++)
if (list1[i]<list2[k]) 
{
int temp=list1[i];
list1[i]=list2[k];
list2[k]=temp;
}


или так:

Код

for (int i=0; i<list1.Length; i++)
for (int k=i; k<list2.Length; k++)
if (list1[i]<list2[k]) 
{
list1[i]=list1[i]+list2[k];
list2[k]=list1[i]-list2[k];
list1[i]=list1[i]-list2[k];
}

Автор: kurzon 16.10.2007, 13:57
Все я уже сделал:


Код

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

namespace Sort_Book
{
    struct Book
    {
        public Book(string author, int year)
        {
            this._year = year;
            this._author = author;
        }

        private int _year;

        public int Year
        {
            get { return this._year; }
            set { this._year = value; }
        }

        private string _author;

        public string Author
        {
            get { return this._author; }
            set { this._author = value; }
        }

        public override string ToString()
        {
            return String.Format("Название книги :{0}, Год :{1}", Author, Year);
        }
    }
    static class BubbleSort
    {
        public static void Sort<T>(T[] array, Comparison<T> comparison)
        {
            for (int i = array.Length - 1; i > 0; i--)
            {
                for (int j = 0; j < i; j++)
                {
                    if (comparison(array[j], array[j + 1]) > 0)
                    {
                        T temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }
        }
    }
    class Teenager
    {
        private static Random random = new Random();
        private static readonly string[] messages = new string[6]
            { 
                "Троесент!", 
                "Ватсон!", 
                "Фаронов!", 
                "Шилд!", 
                "Агуров!", 
                "Глинський!" 
            };

        public static string Complain()
        {
            return messages[random.Next(messages.Length)];
        }
    }

    class Program
    {
        static void PrintBookTitles(Book[] books)
        {
            foreach (Book book in books)
            {
                Console.WriteLine(book);
            }
        }

        static void Main(string[] args)
        {
            int size;
            Book[] books = new Book[10];
            Random random = new Random();

            for (int i = 0; i < books.Length; i++)
            {
                books[i] = new Book(Teenager.Complain(), random.Next(2007));
            }

            PrintBookTitles(books);
            Console.ReadLine();

            BubbleSort.Sort(books, delegate(Book a, Book b)
                    {
                        return a.Year.CompareTo(b.Year);
                    }
        };
            Console.WriteLine("После сортировки:");

            PrintBookTitles(books);
            Console.ReadLine();
        }
    }
}


Надо сделать визуальном режиме?

Автор: kurzon 16.10.2007, 14:35
Надо сделать визуальном режиме?  тут http://forum.vingrad.ru/forum/act-ST/f-201/t-177430/unread-1.html

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