Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 105

Generics Java

09.11.2015, 10:57. Показов 1215. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем!
У меня есть лабораторная работа по JAVA “Работа с Jenericami”

1. Есть определенный класс допустим Class City в котором есть поля:
String название города;
String страна;
Double население:

Конструктор данного класса получает String откуда и берет данные для иниц. Своих полей

Пример “ Moscow Russia 10.9 “
String название города = Moscow;
И тд.

Также в этом классе будет метод cmp
Int cmp( Class City){} который будет сравнивать два обьекта класса City
String toString()
И тд.

Таких классов может быть сколько угодно ( к примеру класс Сar, mobilePhone, colors, byke, Appartaments и тд)

У каждого из этих классов будут конечно свой поля и не обязательно (String, String , int как в классе City)

Единственно что у них общее это их структура. То есть набор методов будет у всех одинаковый ( cmp(), toString() и тд) и конструктор на вход у которого String и которого будут инициироваться все поля по примеру classa City.

Надо создать class Table у которого есть параметр <T>

T- может быть любым их этих классов ( Сity ,Сar, mobilePhone, colors, byke, Appartaments и тд)

Class Table <T>{
}
У этого класса есть метод read() который считывает из Text.txt строки типа “Moscow Russia 10.9” и создает объекты того или иного класса ( Сity ,Сar, mobilePhone, colors, byke, Appartaments и тд)
Дело в том что с этими объектами надо будут потом работать ( в основном сравнивать)
То есть int k=T[i].cmp(T[j]);
То есть вся обработка данный в таблице Table будет через <T> ему надо только прицепить список метод (который одинаков для всех классов Сity ,Сar, mobilePhone, colors, byke, Appartaments и тд)
Проблема следующая у меня
У меня есть

Class Table <T> {

ArrayList<T> List=new ArrayList<T>(); В лист думал сохранять все объекты класса <T>
}

Когда начал считывать строки с txt файла то понял что не смогу создать объект типа <T>
Допустим прочитал строку String st=“ Moscow Russia 10.9 “

T temp=new T (“ Moscow Russia 10.9 “); это вариант не проходит
Думал добавить temp в List и таким образом собрать все объекты в LIST

То есть

Table<City> tb=new Table <City> (String File_name);
tb.read();

Помощь нужна именно с точки зрения дженериков как это все сделать . Что касается прочитать фаил или инициализировать поля classa из String я разобрался.

Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.11.2015, 10:57
Ответы с готовыми решениями:

Generics extends super with ? differencies
плохо понимаю генерики в java, но руководствуясь бытовой логикой пишу 2 ассиметричных примера. общая часть: class A1{} class B1...

Использование одного интерфейса для нескольких ответов (<generics> )
Дано: Итрефейс public interface INet&lt;T&gt; { public void setResult(T result, int method); } Вызывающий класс

Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ?
Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ? Ответье, плиз, новичку, по MSDN я не понятно, это исключительно...

15
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.11.2015, 11:37
VladV, какая то у вас архитектура программы кривая.

Цитата Сообщение от VladV Посмотреть сообщение
Int cmp( Class City){} который будет сравнивать два обьекта класса City
для этих целей в джава есть метод equals который вы должны переопределить, а не выдумывать свой.

Ну и непонятно зачем тут дженерики. Это задание больше подходит для интерфейсов.

Добавлено через 26 секунд
Покажите текст задания
0
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 105
09.11.2015, 11:56  [ТС]
задание в С++ и есть весь код мы всей группой решили писать на JAVA. Код С++ использует женерики. Когда столнулись с женириками на JAVA все дружно застряли

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <iostream.h>
#include <math.h>
//
// a b s t r a c t c l a s s "e l e m"
//
class elem
{
public:
virtual int fscanf_el(FILE *f)=0;
virtual void show(const char* opening=NULL,
const char* ending=NULL)=0;
virtual int free() = 0;
virtual int cmp(elem& e2) = 0;
int operator > (elem& e2)
{
return cmp(e2)>0;
}
int operator >= (elem& e2)
{
return cmp(e2)>=0;
}
 
int operator < (elem& e2)
{
return cmp(e2)<0;
}
int operator <= (elem& e2)
{
return cmp(e2)<=0;
}
int operator == (elem& e2)
{
return cmp(e2)==0;
}
int operator != (elem& e2)
{
return cmp(e2)!=0;
}
protected:
void error(char* message)
{
cerr << message;
cout << "Press any key to fin...\n";
getch();
exit(1);
}
};
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//
// c l a s s "u s u a l _ e l e m"
//
class usual_elem : public elem
{
protected:
char name[16];
int year;
 
 
double salary;
public:
usual_elem()
{
name[0]='\0';
year=0;
salary=0.0;
}
usual_elem(char* init_name, int init_year, double init_salary)
{
strcpy(name, init_name);
year=init_year;
salary=init_salary;
}
virtual int fscanf_el(FILE *f)
{
return fscanf(f, "%s %d %lf", name, &year, &salary);
}
virtual void show(const char* opening=NULL,
const char* ending=NULL)
{
if(!opening)
opening="";
if(!ending)
ending="\n";
cout << opening;
if(name[0]) // sau mai bine if(free()==0), sau if(!free())
cout << name << ", " << year << ", " << salary;
cout << ending;
}
virtual int free()
{
return name[0]=='\0';
}
virtual int cmp(elem& e2)
 
return strcmp(this->name, ((usual_elem&)e2).name);
}
};
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//
// a b s t r a c t c l a s s "S D"
//
class SD
{
protected:
FILE* pf;
long ncomp;
public:
SD()
{
pf=NULL;
ncomp=0;
}
SD(char* file_name)
{
if(!(pf=fopen(file_name, "rt")))
{
char *mes = new char[5+strlen(file_name)+12+1];
error(strcat(strcat(strcpy(mes,"File "),file_name),
" not found!\n"));
 
}
ncomp=0;
}
~SD()
{
if(pf)
fclose(pf);
}
virtual void show(const char* opening=NULL,
const char* ending=NULL)=0;
long get_ncomp()
{
return ncomp;
}
void reset_ncomp()
{
ncomp=0;
}
protected:
void error(char* message)
{
cerr << message;
cout << "Press any key to fin...\n";
getch();
exit(1);
}
};
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//
// c l a s s "t a b l e"
//
const NMAX=200;
//
template <class el> class table : public SD
{
protected:
int n; // numărul de înregistrări tabelare
 
el t[NMAX]; // vector de înregistrări tabelare
public:
table()
{
n=0;
}
table(char* file_name) :
SD(file_name)
{
int repeated;
n=0;
while(!feof(pf))
if(t[n].fscanf_el(pf)>0)
{
if ( (repeated=search(t[n]))>=0 )
{
char message[60];
char repeated_str[10];
message[0]='\0';
strcat(message,
"Key coincides with the key in the position: ");
strcat(message, itoa(repeated+1, repeated_str, 10));
strcat(message, "!\n");
error(message);
}
n++;
}
fclose(pf) , pf=NULL;
}
virtual void show(const char* opening =NULL,
const char* ending=NULL)
{
clrscr();
cout << opening;
if(!opening)
opening="";
if(!ending)
ending="\n";
for(int i=0; i<n; i++)
{
if(i>0 && i%20==0)
{
cout << "Press any key to continue...\n";
getch();
clrscr();
cout << opening;
}
cout << (i+1) << ". "; t[i].show();
}
cout << ending;
cout << "End of Table. Press any key ...\n";
getch();
}
int search(el e)
{
int position = -1;
for(int i=0; (position==-1) && i<n ; i++)
if(ncomp++, e==this->t[i])
position=i;
return position;
}
int get_n()
{
return n;
}
};
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.11.2015, 11:59
VladV, на каком языке написанно решение роли не играет. Судя по вашему описанию архитектура неподходит для дженериков поэтому я попросил текст задания. Читать кучу кода на С++ нет никакого желания.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
09.11.2015, 13:06
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
для этих целей в джава есть метод equals
Может всё таки compareTo, а не equals?
0
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 105
09.11.2015, 13:09  [ТС]
Скему напишите как все это черех женерики написать
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.11.2015, 16:53
Цитата Сообщение от turbanoff Посмотреть сообщение
Может всё таки compareTo, а не equals?
конечно compareTo...с утра писал, не проснулся ещё

Добавлено через 1 минуту
Цитата Сообщение от VladV Посмотреть сообщение
Скему напишите как все это черех женерики написать
вы так и не дали задание.
0
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 105
09.11.2015, 17:12  [ТС]
Задание как бы то что я написал выше.
Есть параметризрванный класс Class Table <T>

T - Это разаные классы с одинаковой структурой ( методы теже) поля могут разный и по количеству и по типу.

В классе Table coздаются обьекты данного класса ( Нужно показать void show() {})
Эти обиепкты нужно чтобы на основе их изучть алгоритмы сортировки( Buble Sort, Quik sort, Insertion Sort и тп)
У меня class City {

String City_name
String Country;
int Foundation_year;
boolean Capital;
double Population;
}

У колег к примеру Class Car, Class Phone, Class Appartament и тд

Class Table <T> должен работыть с Любым типом ( Class City , Class Car, Class Phone, Class Appartament и тд)
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.11.2015, 17:20
Цитата Сообщение от VladV Посмотреть сообщение
Есть параметризрванный класс Class Table <T>
T - Это разаные классы с одинаковой структурой ( методы теже) поля могут разный и по количеству и по типу.
это выглядит как ваша интерпретация задания, а не само задание.

Цитата Сообщение от VladV Посмотреть сообщение
Class Table <T> должен работыть с Любым типом
С любым но одним или со всеми сразу?
0
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 105
09.11.2015, 18:12  [ТС]
Допустим есть три класса
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class City{
    
    protected String City_name;
    protected String Country;
    protected int Fondation_Year;
    protected boolean Capital;
    protected double Population;
    public int index=-1;
    String p=null;
    
    
    public City (String St){
        String A[]=St.split(" ");
        City_name=A[0];
        Country=A[1];
        Fondation_Year=Integer.parseInt(A[2]);
        Capital=Boolean.parseBoolean(A[3]);
        Population=Double.parseDouble(A[4]);
        p=String.format("%.2f", Population);
    }
    
    public int cmp( City C){
        int result=0;
            if(City_name.compareTo(C.City_name())>0){
                result=1;
                return result;
            }
            if(City_name.compareTo(C.City_name())<0){
                result=-1;
                return result;
            }
            if(Country.compareTo(C.Country())>0){
                result=1;
                return result;
            }
            if(Country.compareTo(C.Country())<0){
                result=-1;
                return result;
            }
            if(Fondation_Year-C.Fondation_Year()>0){
                result=1;
                return result;
            }
            if(Fondation_Year-C.Fondation_Year()<0){
                result=-1;
                return result;
            }
            if(Fondation_Year-C.Fondation_Year()==0){
                result=0;
                return result;
            }   
            
            return result;
    }
    
    
    
    
 
    
    public String toString(){
        
        }
 
 
    public int hf(int n){
        return ((City_name.charAt(0)-'A')+(Country.charAt(0)-'A')+Fondation_Year)%n;
    }
 
    
    
}
Java
1
2
3
4
5
6
7
Class Car {
    //Поля ----- 
    //И 3 метода 
    public int cmp( Car C){}
    public String toString(){}
    public int hf(int n){}
}
Java
1
2
3
4
5
6
7
Class Phone {
    //Поля ----- 
    //И 3 метода 
    public int cmp( Phone C){}
    public String toString(){}
    public int hf(int n){}
}
Теперь есть Class Table <T>{

В котором есть методы
Void read() из .TXT
Void show () показывает таблицу с обьктами
Void bubble sort()
Void quicksort()
Void InsertionSort()
Void heapSort()
И тд……

То есть сортировать будем по названию городу или + страны + год ( это для City)
У меня ключ состоит из 3 колонок поэтому int cmp () соотсественно
У когото ключ таблицы может быть только с одной колонкой или 2
Не важно так как в классе Table( работатет только с int cmp() а что внутри не важно)
Int cmp() возвращает 1 или -1 или 0 (1 обьект больше, -1 обьект меньше, 0 равны)
Int cmp() нужен для сравнения обьектов ведь сорторивки это в приницципе сравнения.

Теперь надо так написать class Table что бы он работал с любым типом данных
Что то типа того
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Public static void main (String [] args){
 
Class table <City> tb=new table<city>(“City.txt)
tb.read();
tb.show();
tb.bublesort();
tb.show();
tb.quicksort();
tb.show(); 
и тд
 
 
 
Class table <Car> tb1=new table<car>(“Car.txt)
 
tb1.read();
tb1.show();
tb1.bublesort();
tb1.show();
tb1.quicksort();
tb1.show(); 
и тд
 
Class table <Appartament> tb2=new table<Appartament>(“Car.txt)
 
tb2.read();
tb2.show();
tb2.bublesort();
tb2.show();
tb2.quicksort();
tb2.show(); 
и тд
 
}
0
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
09.11.2015, 18:29
Ваш код и текст нечитабелен. Пользуйтесь тегами для оформления как кода (окружите код тегами [javа] ... [/java]) и сделайте табуляцию.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.11.2015, 20:24
Цитата Сообщение от VladV Посмотреть сообщение
Теперь надо так написать class Table что бы он работал с любым типом данных
теперь стало более понятно.

Вам надо определить интерфейс (скажем MyInterface) с методами
read();
show();
bublesort();

Ваши классы City Appartament и.т.д должны имплементировать этот интерфейс
Затем описать класс Table как
Java
1
2
3
public class Table<T extends MyInterface> {
...
}
PS вместо интерфейса можно взять абстрактный класс чтобы избежать повторов кода.
0
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 105
09.11.2015, 20:54  [ТС]
А зачем классу City к примеру метод show() ? class Table cобирает через read () все обькты в ArrayList <City> List = new ArrayList <City>(); а потом через show() выводит на консоль в виде таблицы где сторока это один обьект класса City
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.11.2015, 23:38
VladV, я в ваш код не вдавался и привел пример. Если думаете что какой-то метод ненужен, не реализовывайте.
0
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 105
09.11.2015, 23:55  [ТС]
Методы read, show ,buble_sort это методы class Table и он начинает с ними работать только когда уже есть 40-50 обьектов типа <T> ---> ( City , Appartament, Car, Phone ....... )

общее что есть у ( City , Appartament, Car, Phone ....... ) это метод int cmp(), String to srting ().....

Теперь немного о самих женериках
1. Так как я не делал посредством женериков данную задачу то у меня была следуая схема
a. ecть ArrayList<City> List=new ArrayList<City> (); ---- поле класса Table

2. В методе read()

был цикл while который пробегал по всемс строкам file.txt и каждю строку (String ) передавал
в конструктор обьекта City
while{
String St=Sc.nextLine();
City temp=new City(St);
List.add(temp);
}
таким образом я в контаинир кидал 20-50 oбектов Сity и далее уже этоm List уже обрабатывался либо давался на печать в show() либо на сортировки BubbleSort(), InsertortioSort(), QuikSort(), HeapSort()....... где единственое что нужно было это cmp() из oбекта Сity а теперь получается <T>.
Вопрос ! как все это сделать учитывая что T temp=new T(St) вместо City temp=new City(St); не проходит
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.11.2015, 00:47
VladV, я вам выше сказал как делать. Какой смысл ещё раз повторять если вы не слушаете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.11.2015, 00:47
Помогаю со студенческими работами здесь

Посоветуйте примеры кода по Java. Теория прочтена, но с языком Java не знакома
Или может кто может дать готовый код. В теории вроде бы не очень сложно. :cry: 1.Напишите процедуру, которая по заданному сообщению...

При работе JVM обвалвается java c кодом Java Result 1073807364.
При работе JVM обвалвается java c кодом Java Result 1073807364. Если кто-нибудь знает, помогите пожалуйста.

Актуально ли изучать java сейчас по книге, где примеры в java 5?
Книга &quot;Изучаем Java&quot;Берт Бейтс, Кэтти Сьерра .До этого ничего не читал по java

Хочу стать Java программистом, здесь есть Java программисты?
Здравствуйте, я хочу стать Ява программистом, если здесь есть Ява программисты, пж подскажите плюсы и мунусы профессии Ява программиста,...

Какие шаги предпринять для овладения java и какую среду java посоветуете?
Пока сть опыт по Visual С, Basic; Borland Delphi, CBuilder. Хочется и в java разбираться.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru