Массив из разных типов данных
Помогите с таким вопросом:
Возникла необходимость создать массив из записей с разными типами полей.
Я попробовал сделать так:
создал класс с нужными полями и сделать массив этого класса
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
package myproject; public class myParams { public String name = ""; public double d = 0; public int i = 0; public Color c = Color.decode("#F0F0F0"); public boolean isSelected = false; public boolean isCreated = false; } // далее пытаюсь сделать массив с использованием этого класса примерно так: . . . myproject.myParams[][] mPall = new myproject.myParams[5][5]; myproject.myParams mP = new myproject.myParams; for(int i=0; i5; i++) { for(int j=0; j5; j++) { mp.name = ""; mp.d = 0; mp.i = 0; . . mPall[i][j] = mp; } } . . . // Далее пытаюсь работать с этим массивом типа так: . . mPall[2][3].i = 3; // а затем к примеру сразу так: int y = mPall[1][1].i; System.out.println(y); // по идее должно отпнчатать 0, а печатает 3
Добавлено через 16 минут
поправлю ошибочку, торопился, про регистры забыл как всегда
но смысл не поменялся
for(int i=0; i5; i++) { for(int j=0; j5; j++) { mP.name = ""; mP.d = 0; mP.i = 0; . . mPall[i][j] = mP; } }
ArrayList объекты разных типов
Здравствуйте.Подскажите пожалуйста. Такой вопрос куда запихнуть объекты разных типов (шаблон фабрика),в ArrayList?.Вот у меня 2 класса, повар и учитель. Я думаю заносить в ArrayList. А как быть с типом ставить object? И как всё это дело потом записать и считать из файла?
ArrayList и Объекты
Допустим, у меня есть суперкласс "Человек" и два подкласа "Доктор" и "Учитель". Есть ArrayList в.
Хранение разных классов в одном ArrayList
Добрый день :senor: У меня есть программа в которой динамически создаются классы определенного.
Получение разных типов данных
Суть задачи такова: в функцию передаётся неизвестное кол-во переменных разного типа(а именно.
Vector с элементами разных типов
Собственно вопрос такой, предположим я хочу создать vector, элементами которого будут объекты.
Сообщение от vifelso
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 class Car { private String carBrand; private int engine; private int year; Car(String carBrand,int engine,int year){ this.setCarBrand(carBrand); this.setEngine(engine); this.setYear(year); } public String getCarBrand() { return carBrand; } public void setCarBrand(String carBrand) { this.carBrand = carBrand; } public int getEngine() { return engine; } public void setEngine(int engine) { this.engine = engine; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } }
ArrayListCar> arr=new ArrayListCar>();
Сообщение от vifelso
ArrayList extends Car> arr=new ArrayList<>();
arr.add(cars.createPassengerCar());
1 2 3 4 5 6 7 8 9 10 11 12
public PassengerCar createPassengerCar () { System.out.println("Input Brand car"); carBrand = in.nextLine(); System.out.println("Input engine car"); engine = in.nextInt(); System.out.println("Input year car"); year = in.nextInt(); System.out.println("Input count of place in car"); countPlace = in.nextInt(); return new PassengerCar(carBrand, engine, year, countPlace); }
А если я буду делать так ArrayList
Подскажите решение пожалуйста.
Сообщение от vifelso
при добавлении класса родителя , в массив пишется класс только содержащие поля и методы в классе родителя
FactoryCar cars=new FactoryCar(); ArrayList extends Car> arr=new ArrayList<>(); arr.add(cars.createPassengerCar());
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
package com.company; import java.util.ArrayList; import java.util.Scanner; /** * Created by Andrei on 06.02.2016. */ public class FactoryCar { Scanner in = new Scanner(System.in); String carBrand; int engine, year, countPlace, maxCapacity; public PassengerCar createPassengerCar() { in.nextLine(); System.out.println("Input Brand car"); carBrand = in.nextLine(); System.out.println("Input engine car"); engine = in.nextInt(); System.out.println("Input year car"); year = in.nextInt(); System.out.println("Input count of place in car"); countPlace = in.nextInt(); return new PassengerCar(carBrand, engine, year, countPlace); } public Truck createTruckCar() { in.nextLine(); System.out.println("Input Brand car"); carBrand = in.nextLine(); System.out.println("Input engine car"); engine = in.nextInt(); System.out.println("Input year car"); year = in.nextInt(); System.out.println("Input machine capacity"); maxCapacity = in.nextInt(); return new Truck(carBrand, engine, year, maxCapacity); } }
Добавлено через 18 минут
Error34, 24) java: no suitable method found for add(com.company.PassengerCar)
method java.util.Collection.add(capture#1 of ? extends com.company.Car) is not applicable
(argument mismatch; com.company.PassengerCar cannot be converted to capture#1 of ? extends com.company.Car)
method java.util.List.add(capture#1 of ? extends com.company.Car) is not applicable
(argument mismatch; com.company.PassengerCar cannot be converted to capture#1 of ? extends com.company.Car)
method java.util.AbstractCollection.add(capture#1 of ? extends com.company.Car) is not applicable
(argument mismatch; com.company.PassengerCar cannot be converted to capture#1 of ? extends com.company.Car)
method java.util.AbstractList.add(capture#1 of ? extends com.company.Car) is not applicable
(argument mismatch; com.company.PassengerCar cannot be converted to capture#1 of ? extends com.company.Car)
method java.util.ArrayList.add(capture#1 of ? extends com.company.Car) is not applicable
(argument mismatch; com.company.PassengerCar cannot be converted to capture#1 of ? extends com.company.Car)
Java массив разных типов данных
Массив представляет набор однотипных значений. Объявление массива похоже на объявление обычной переменной, которая хранит одиночное значение, причем есть два способа объявления массива:
тип_данных название_массива[]; // либо тип_данных[] название_массива;
Например, определим массив чисел:
После объявления массива мы можем инициализовать его:
int nums[]; nums = new int[4]; // массив из 4 чисел
Создание массива производится с помощью следующей конструкции: new тип_данных[количество_элементов] , где new — ключевое слово, выделяющее память для указанного в скобках количества элементов. Например, nums = new int[4]; — в этом выражении создается массив из четырех элементов int, и каждый элемент будет иметь значение по умолчанию — число 0.
Также можно сразу при объявлении массива инициализировать его:
int nums[] = new int[4]; // массив из 4 чисел int[] nums2 = new int[5]; // массив из 5 чисел
При подобной инициализации все элементы массива имеют значение по умолчанию. Для числовых типов (в том числе для типа char) это число 0, для типа boolean это значение false , а для остальных объектов это значение null . Например, для типа int значением по умолчанию является число 0, поэтому выше определенный массив nums будет состоять из четырех нулей.
Однако также можно задать конкретные значения для элементов массива при его создании:
// эти два способа равноценны int[] nums = new int[] < 1, 2, 3, 5 >; int[] nums2 = < 1, 2, 3, 5 >;
Стоит отметить, что в этом случае в квадратных скобках не указывается размер массива, так как он вычисляется по количеству элементов в фигурных скобках.
После создания массива мы можем обратиться к любому его элементу по индексу, который передается в квадратных скобках после названия переменной массива:
int[] nums = new int[4]; // устанавливаем значения элементов массива nums[0] = 1; nums[1] = 2; nums[2] = 4; nums[3] = 100; // получаем значение третьего элемента массива System.out.println(nums[2]); // 4
Индексация элементов массива начинается с 0, поэтому в данном случае, чтобы обратиться к четвертому элементу в массиве, нам надо использовать выражение nums[3] .
И так как у нас массив определен только для 4 элементов, то мы не можем обратиться, например, к шестому элементу: nums[5] = 5; . Если мы так попытаемся сделать, то мы получим ошибку.
Длина массива
Важнейшее свойство, которым обладают массивы, является свойство length , возвращающее длину массива, то есть количество его элементов:
int[] nums = ; int length = nums.length; // 5
Нередко бывает неизвестным последний индекс, и чтобы получить последний элемент массива, мы можем использовать это свойство:
int last = nums[nums.length-1];
Многомерные массивы
Ранее мы рассматривали одномерные массивы, которые можно представить как цепочку или строку однотипных значений. Но кроме одномерных массивов также бывают и многомерными. Наиболее известный многомерный массив — таблица, представляющая двухмерный массив:
int[] nums1 = new int[] < 0, 1, 2, 3, 4, 5 >; int[][] nums2 = < < 0, 1, 2 >, < 3, 4, 5 >>;
Визуально оба массива можно представить следующим образом: