Мне кажется, что это упражнение в объектно-ориентированном программировании, то есть в иерархиях классов, поскольку класс Cat
и класс Dog
имеют общих членов. На самом деле они имеют одинаковые элементы, а Dog
имеет дополнительный элемент, а именно z
.
Кроме того, ваш входной файл похож на CSV-файл, который использует один пробел в качестве разделителя полей, а не запятую .
Следовательно, я бы создал родительский класс HousePet
, поскольку кошки и собаки, как правило, являются домашними питомцами, в которых содержатся члены, общие для Cat
и Dog
, и оба эти класса расширяют класс HousePet
.
Затем вы просто читаете файл построчно. Для каждой строки вы разделяете ее на один пробел. Если линия состоит из шести частей, это Cat
, в противном случае это Dog
. Вы вызываете соответствующий конструктор в зависимости от количества частей в прочитанной строке.
Поскольку вам необходимо добавить и Cat
s, и Dog
s в один и тот же список, создайте List
из HousePet
.
Вот код.
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CatsDogs {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(new File("catsdogs.txt"))) {
List<HousePet> pets = new ArrayList<>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] parts = line.split("\\s");
HousePet pet;
if (parts.length == 6) {
pet = new Cat(parts[1],
Integer.parseInt(parts[2]),
Integer.parseInt(parts[3]),
parts[4],
Integer.parseInt(parts[5]));
}
else {
pet = new Dog(parts[1],
Integer.parseInt(parts[2]),
Integer.parseInt(parts[3]),
Integer.parseInt(parts[4]),
parts[5],
Integer.parseInt(parts[6]));
}
pets.add(pet);
}
}
catch (IOException xIo) {
xIo.printStackTrace();
}
}
}
abstract class HousePet {
protected String name;
protected int x;
protected int y;
protected String colour;
protected int id;
protected HousePet(String name, int x, int y, String colour, int id) {
this.name = name;
this.x = x;
this.y = y;
this.colour = colour;
this.id = id;
}
}
class Cat extends HousePet {
public Cat(String name, int x, int y, String colour, int id) {
super(name, x, y, colour, id);
}
}
class Dog extends HousePet {
private int z;
public Dog(String name, int x, int y, int z, String colour, int id) {
super(name, x, y, colour, id);
this.z = z;
}
}