isak2
unknown
java
3 years ago
11 kB
7
Indexable
//Isak Masoliver isma7969
import java.util.ArrayList;
import java.util.Iterator;
public class DogRegister {
private static final String[] VALID_COMMANDS = {
"Register new dog",
"List dogs",
"Increase age",
"Remove dog",
"Register new owner",
"Give dog",
"List owners",
"Remove owned dog",
"Remove owner",
"Exit",
};
private final ArrayList<Dog> mainDogList = new ArrayList<>();
private final ArrayList<Owner> mainOwnerList = new ArrayList<>();
private final ScannerAdapter commandScanner = new ScannerAdapter();
public static void main(String[] args) {
new DogRegister().run();
}
private void run() {
start();
startCommandLoop();
stop();
}
private void start() {
System.out.println("Welcome!");
printCommands();
}
private void stop() {
System.out.println("Goodbye!");
}
private void startCommandLoop() {
String command;
boolean isRunning;
do {
command = commandScanner.readText("Command");
String validCommand = checkCommand(command);
if (validCommand == null) {
System.out.println("Error: Unknown command");
printCommands();
isRunning = true;
} else if (validCommand.equals("Exit")) {
isRunning = false;
} else {
executeCommand(validCommand);
isRunning = true;
}
} while (isRunning);
}
private void printCommands() {
System.out.println("Enter one of the following commands:");
for (int i = 0; i < VALID_COMMANDS.length; i++) {
String command = VALID_COMMANDS[i];
System.out.println("* " + command);
}
}
private String checkCommand(String unCheckedCommand) {
String normalizedCommand = unCheckedCommand.trim().toLowerCase();
for (int i = 0; i < VALID_COMMANDS.length; i++) {
if (VALID_COMMANDS[i].toLowerCase().equals(normalizedCommand)) {
return VALID_COMMANDS[i];
}
}
return null;
}
private void executeCommand(String validCommand) {
switch (validCommand) {
case "Register new dog" -> registerNewDog();
case "List dogs" -> listDogs();
case "Increase age" -> increaseDogAge();
case "Remove dog" -> removeDogMethod();
case "Register new owner" -> newOwner();
case "Give dog" -> giveDog();
case "List owners" -> listOwners();
case "Remove owned dog" -> removeOwnedDog();
case "Remove owner" -> removeOwnerMethod();
}
}
private void registerNewDog() {
String breed;
String name;
int age;
int weight;
do {
name = commandScanner .readText("Enter name of dog");
if (name.isBlank()) {
System.out.println("Error, can't input empty name.");
}
} while (name.isBlank());
do {
breed = commandScanner .readText("Enter breed of dog");
if (breed.isBlank()) {
System.out.println("Error, can't input empty breed.");
}
} while (breed.isBlank());
age = commandScanner .readInteger("Enter age of dog");
weight = commandScanner .readInteger("Enter weight of dog");
Dog dog = new Dog(name.trim(), breed.trim(), age, weight);
mainDogList.add(dog);
}
private void listDogs() {
if (mainDogList.size() == 0) {
System.out.println("Error: no dogs in register");
return;
}
double minTailLength = commandScanner.readDecimal("Smallest tail length to display");
// Get dogs with tail length greater than or equal to minTailLength
Dog[] validDogs = getDogsByTailLength(minTailLength);
// Sort the valid dogs array using the sortDogs() method
int numSwaps = sortDogs(validDogs);
if (validDogs.length == 0) {
System.out.println("Error: no dog have a tail that long");
} else {
for (Dog dog : validDogs) {
if (dog.getOwner() == null) {
System.out.println(dog);
}
if (dog.getOwner() != null) {
System.out.println(dog + "\n" + dog.getOwner());
}
}
}
System.out.println("Sorted " + validDogs.length + " dogs with " + numSwaps + " swaps.");
}
private int sortDogs(Dog[] dogs) {
int numSwaps = 0;
for (int i = 0; i < dogs.length - 1; i++) {
int smallestDogIndex = i;
for (int j = i + 1; j < dogs.length; j++) {
if (dogs[j].compareTo(dogs[smallestDogIndex]) < 0) {
smallestDogIndex = j;
}
}
if (smallestDogIndex != i) {
swapDogs(dogs, smallestDogIndex, i);
numSwaps++;
}
}
return numSwaps;
}
private void swapDogs(Dog[] dogs, int i, int j) {
Dog temp = dogs[i];
dogs[i] = dogs[j];
dogs[j] = temp;
}
private void increaseDogAge() {
String name = commandScanner .readText("Ange hundens namn");
Dog dog = getDogByName(name);
if (dog != null) {
dog.increaseAge();
System.out.println(dog.getName() + " är nu äldre.");
} else {
System.out.println("Error, Hunden kunde inte hittas.");
}
}
private void removeDogMethod() {
String name = commandScanner .readText("Enter the name of the dog:").trim();
Dog dog = getDogByName(name);
if (dog != null) {
mainDogList.remove(dog);
dog.removeOwner();
System.out.println(name.concat(" is removed from the register"));
} else {
System.out.println("Error: no such dog");
}
}
private void newOwner(){
String name;
do {
name = commandScanner .readText("Enter name of dog");
if (name.isBlank()) {
System.out.println("Error, can't input empty name.");
}
} while (name.isBlank());
Owner owner = new Owner(name.trim());
mainOwnerList.add(owner);
}
private void giveDog() {
String dogName = commandScanner .readText("Enter the name of the dog:").trim();
Dog dog = getDogByName(dogName);
if (dog == null) {
System.out.println("Error: Dog not found!");
return;
}
if (dog.getOwner() != null) {
System.out.println("Error: The dog already has an owner");
return;
}
String ownerName = "";
do {
ownerName = commandScanner .readText("Enter the name of the owner:").trim();
if (ownerName.isEmpty()) {
System.out.println("Error: Please enter a valid owner name!");
}
} while (ownerName.isEmpty());
Owner owner = getOwnerByName(ownerName);
if (owner == null) {
System.out.println("Error: Owner not found!");
return;
}
owner.addDogtoOwner(dog);
System.out.println(ownerName + " now owns " + dogName);
}
private void listOwners() {
if (mainOwnerList.size() == 0) {
System.out.println("Error: No owners in list.");
return;
}
for (Owner owner : mainOwnerList) {
boolean hasDog = false;
for (Dog dog : mainDogList) {
if (owner == dog.getOwner()) {
System.out.println("Owner: " + owner.getName() + " Dog: " + dog.getName());
hasDog = true;
}
}
if (!hasDog) {
System.out.println("Owner: " + owner.getName());
}
}
}
private void removeOwnedDog() {
String dogsName = commandScanner .readText("Enter the name of the dog:").trim();
Dog dog = getDogByName(dogsName);
if (dog == null) {
System.out.println("Error: Dog not found!");
return;
}
if (dog.getOwner() == null) {
System.out.println("Error: The dog is not owned by anyone.");
return;
}
String ownerName = dog.getOwner().getName();
dog.removeOwner();
System.out.println(dogsName + "/n" + ownerName);
}
private void removeOwnerMethod() {
String ownerName = commandScanner .readText("Enter the name of the owner:").trim();
Owner owner = getOwnerByName(ownerName);
if (owner != null) {
removeDogsOwnedBy(owner);
mainOwnerList.remove(owner);
System.out.println(owner.getName() + " has been removed.");
} else {
System.out.println("Error: no such owner.");
}
}
private void removeDogsOwnedBy(Owner owner) {
Iterator<Dog> iter = mainDogList.iterator();
while (iter.hasNext()) {
Dog dog = iter.next();
if (dog.getOwner() != null && dog.getOwner().equals(owner)) {
iter.remove();
}
}
}
private Dog[] getDogsByTailLength(double minTailLength) {
ArrayList<Dog> result = new ArrayList<>();
for (int i = 0; i < mainDogList.size(); i++) {
Dog dog = mainDogList.get(i);
if (dog.getTailLength() >= minTailLength) {
result.add(dog);
}
}
return result.toArray(new Dog[result.size()]);
}
private Dog getDogByName(String name) {
for (int i = 0; i < mainDogList.size(); i++) {
Dog dog = mainDogList.get(i);
if (dog.getName().equalsIgnoreCase(name)) {
return dog;
}
}
return null;
}
private Owner getOwnerByName(String name) {
for (int i = 0; i < mainOwnerList.size(); i++) {
Owner owner = mainOwnerList.get(i);
if (owner.getName().equalsIgnoreCase(name)) {
return owner;
}
}
return null;
}
}Editor is loading...