Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Тип RECORD

Ответить
Настройки темы
Java - Тип RECORD

Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Здравствуйте!
Как в Java реализуется тип, аналогичный типу запись (RCORD) в языке Pascal?
Хотя бы как такой тип на Java называется?....

Отправлено: 13:55, 29-09-2009

 

Новый участник


Сообщения: 8
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата ManHack:
Как в Java реализуется тип, аналогичный типу запись (RCORD) в языке Pascal?
Хотя бы как такой тип на Java называется? »
А зачем?

Записи в Паскале нужны для хранения набора данных разных типов, если я правильно понимаю. Паскаль не объектно-ориентированный язык, поэтому для такой задачи ему требуется специальная структура - Record. А в Java любой класс может хранить набор гетерогенных данных.

Например, можно написать так:

class MyRecord {
public static int X;
public static String Y;
public static double Z;
}

И обращаешься к нему как к записи в Паскале:

MyRecord.X = 1;
MyRecord.Y = "xxx";

Или если не хочешь глобального доступа, тогда так:

class MyRecord {
public int X;
public String Y;
public double Z;
}

MyRecord myRecord = new MyRecord ();

myRecord.X = 1;
myRecord.Y = "xxx";
myRecord.Z = 2.2;

Вот тебе и аналог простой записи. Если немного поднапрячься, можно реализовать аналог вариантной записи. Когда у нас есть классы, необходимость в записях как таковых отпадает начисто.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:06, 29-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Спасибо! Я написал таким образом сортировку простым (прямым) выбором:

Код: Выделить весь код
public class Element {
public String Data; // здесь вставлял static после public, но компилятор выразил негодование: "This field can't be declared static. Static fields can only be declared in static or top level types"... На dynamic он ещё больше рассердился xD
public String Key; // аналогично... дак почему статик нельзя? что значит static or top level TYPE? Я вообще TYPE в своей программе не использую
}

public static void SelectSort (Element[] a, int n) {
	int i, j, jmin;
	Element buf;
	for ( i = 0; i < n - 1; i++) {
		jmin = 1;
		for ( j = i + 1; i < n; i++) {
			if (a[j].key < a[jmin].key) {
				jmin = j;
			}
		}
		buf = a[i];
		a[i] = a[jmin];
		a[jmin] = buf;
	}
}
С точки зрения языка код написан правильно? Или надо что-то изменить? Класс Element определён на месте?

Отправлено: 20:54, 29-09-2009 | #3


Новый участник


Сообщения: 8
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата ManHack:
С точки зрения языка код написан правильно? Или надо что-то изменить? Класс Element определён на месте? »
Код у тебя скорей всего приведён не полностью. Поэтому трудно сказать что на месте, а что нет. Могу только предположить, что Element у тебя является внутренним классом по отношению к другому (то есть он определён внутри другого класса). А внутренним классам Java запрещает иметь static элементы, поэтому компилятор и ругается. Top level type - это как раз про внешний класс. Объяви весь класс Element как static или вынеси его за пределы внешнего класса и всё будет OK. Только когда будешь выносить, учти, что по правилам в одном файле может быть только один public класс, поэтому Element либо не должен быть public, либо нужно его вынести в отдельный файл.

Поехали дальше

static в данном контексте вообще не требуется. Более того, сортировка не получится, потому что static поля являются глобальными по отношению ко всему классу, то есть для каждого экземпляра класса их значение всегда будет одним и тем же.

Сравнивать так: if (a[j].Кey < a[jmin].Кey) нельзя, потому что Key у тебя String, а не число. И вообще кey у тебя с маленькой буквы, а в Java в отличие от Паскаля идентификаторы чувствительны к регистру. key и Key - разные вещи.

Для пары "ключ - данные" есть специальные типы, например HashMap, и свой собственный тип создавать не надо. В HashMap, например можно добыть данные по ключу, получать список ключей и много ещё чего полезного там есть.

Для сортировки в принципе не требуется писать специальных методов, в Java есть встроенные механизмы. Например, вот - http://www.javaportal.ru/java/articles/sort.html

Вроде всё.

Последний раз редактировалось Cornknight, 30-09-2009 в 08:34.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:08, 30-09-2009 | #4


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата:
Для пары "ключ - данные" есть специальные типы, например HashMap, и свой собственный тип создавать не надо. В HashMap, например можно добыть данные по ключу, получать список ключей и много ещё чего полезного там есть.
А как этим хэшмапом пользоваться? На Джавапортал.ру информации не нашёл.

Цитата:
Сравнивать так: if (a[j].Кey < a[jmin].Кey) нельзя, потому что Key у тебя String, а не число. И вообще кey у тебя с маленькой буквы, а в Java в отличие от Паскаля идентификаторы чувствительны к регистру. key и Key - разные вещи.
Дурная привычка ^ ^
А как тогда строки сравнивать? О.о (допустим, передо мной стоит задача сравнить две переменные типа String).

Цитата:
Для сортировки в принципе не требуется писать специальных методов, в Java есть встроенные механизмы. Например, вот - http://www.javaportal.ru/java/articles/sort.html
Изобретать свой велосипед куда полезнее, познавательнее и интересней

P.S.> А на C# алгоритм сортировки сильно отличаться будет?
Чем там заменятся записи и классы?
Хотелось бы пару умных ссылок, где можно было бы про это коротко и внятно прочитать.. а то время поджимает >_<"

Отправлено: 22:13, 30-09-2009 | #5


Новый участник


Сообщения: 8
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата ManHack:
А как этим хэшмапом пользоваться? На Джавапортал.ру информации не нашёл. »
RTFM. То есть читай javadoc. Скачать можно отсюда: http://java.sun.com/javase/downloads/index.jsp

Цитата ManHack:
А как тогда строки сравнивать? О.о (допустим, передо мной стоит задача сравнить две переменные типа String). »
Если у тебя в String находятся числа, то их надо преобразовать в числа, а потом сравнивать. Преобразовать в число можно, например, так: Integer.parseInt(Key), ну или Double.parseDouble(Key), в зависимости от типа, который у тебя находится в Key. А вообще, если нет специальной причины делать Key строкой, то почему бы его сразу не объявить числом?

Если что-то другое, то.. не знаю. Как "Вася" сравнить с "Петя"? Тут разный подход возможен.. Можно сравнивать в алфавитном порядке так: a[j].Key.compareTo(a[jmin].Кey), но подробно про этот метод снова стоит почитать в документации.

Цитата ManHack:
Изобретать свой велосипед куда полезнее, познавательнее и интересней »
Кому как.. По мне лучше написать что-то действительно полезное.

Цитата ManHack:
А на C# алгоритм сортировки сильно отличаться будет?
Чем там заменятся записи и классы? »
На С# всё будет выглядеть почти так же. C# вообще местами от Java не отличить.

Цитата ManHack:
Хотелось бы пару умных ссылок, где можно было бы про это коротко и внятно прочитать.. а то время поджимает »
Ну, не знаю.. Гугль тебе в помощь.

Отправлено: 07:34, 01-10-2009 | #6


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


А как быть с сортировкой двоичным деревом? Там ведь указатели вида t^.key .... На что их заменить в C#?

К сожалению, ключи у меня содержат буквы и цифры

Отправлено: 19:55, 01-10-2009 | #7


Новый участник


Сообщения: 8
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата ManHack:
А как быть с сортировкой двоичным деревом? Там ведь указатели вида t^.key .... На что их заменить в C#? »
Ну не знаю я, что за сортировку ты имеешь в виду. Могу только сказать, что указателей ни в C#, ни в Java в явном виде нет.

Цитата ManHack:
К сожалению, ключи у меня содержат буквы и цифры »
Хорошо, тогда как ты их сравниваешь? Как определяешь какой больше, а какой меньше?

Отправлено: 21:00, 01-10-2009 | #8


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Обычное лексикографическое упорядочивание по алфавиту вида:
Andrey
Kolya1
Kolya22
Laurinas
Vasyapupkin
Warezov
...

Судя повсему метод String.Compare(str1, str2, false) в C# и str1.compareTo(str2) в Java мне подходит...
Я переписал процедуры с использованием этого метода.
http://msdn.microsoft.com/ru-ru/library/885e1sy1.aspx (C#)

Теперь надо ломать голову над TreeSort...
оказывается это чудо в википедии всё-таки описано... http://ru.wikipedia.org/wiki/Сортиро...оичного_дерева
осталось ээ... вдуматься в код ^_^

Отправлено: 21:38, 01-10-2009 | #9


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Я не совсем понял что мы тут делаем:
Код: Выделить весь код
public Tree(int k) {   // конструктор с инициализацией ключа
      key = k;
   }
(взята из кода программы на Java по ссылке на Википедию выше)

Отправлено: 21:55, 01-10-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Тип RECORD

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Неизвестный тип файла roniro Microsoft Windows 2000/XP 6 06-07-2008 01:00
550 Your host [xxx.xxx.xxx.xxx] doesn't have correct PTR record Donner Microsoft Windows NT/2000/2003 3 24-12-2007 16:01
TEdit и тип AnsiString Sir Z Программирование и базы данных 6 15-02-2006 12:34
Как удалить загрузчик из Master Boot Record vadimiron Общий по Linux 13 30-12-2004 17:24
тип сервера? modem Хочу все знать 1 02-03-2003 05:49




 
Переход