[POO] Changes (#69)

[POO] ATP1 added
--> Exercise made in Codecheck

[POO] Removed tp_codecheck
--> Didn't really have too much there and not worth keeping around

[POO] Code reformat
--> Optimized and reformated code for all directories in source
This commit is contained in:
Tiago Garcia 2023-05-31 20:02:14 +01:00 committed by GitHub
parent 4142a45071
commit 7475a2edc4
Signed by untrusted user who does not match committer: TiagoRG
GPG Key ID: DFCD48E3F420DB42
90 changed files with 575 additions and 742 deletions

View File

@ -1,14 +1,15 @@
package aula01; package aula01;
import java.util.Scanner; import java.util.Scanner;
public class KmToMiles { public class KmToMiles {
public static void main(String[] args) { public static void main(String[] args) {
double km, miles; double km, miles;
Scanner sc = new Scanner(System.in); Scanner sc = new Scanner(System.in);
System.out.print("Insira distância em km: "); System.out.print("Insira distância em km: ");
km = sc.nextDouble(); km = sc.nextDouble();
miles = km / 1.609; miles = km / 1.609;
System.out.println("A distância em milhas é " + miles); System.out.println("A distância em milhas é " + miles);
sc.close(); sc.close();
} }
} }

View File

@ -2,12 +2,12 @@ package aula01;
public class MyFirstClass { public class MyFirstClass {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("Hello Eclipse!"); System.out.println("Hello Eclipse!");
int sum = 0; int sum = 0;
for (int i = 1; i <= 100; i++) { for (int i = 1; i <= 100; i++) {
sum += i; sum += i;
} }
System.out.println(sum); System.out.println(sum);
} }
} }

View File

@ -2,15 +2,15 @@ package aula01;
public class PescadaDeRaboNaBoca { public class PescadaDeRaboNaBoca {
public static void main(String[] args) { public static void main(String[] args) {
recursivoSimples(100); recursivoSimples(100);
} }
public static void recursivoSimples(int x) { public static void recursivoSimples(int x) {
System.out.println(x); System.out.println(x);
x--; x--;
if (x>0) if (x > 0)
recursivoSimples(x); recursivoSimples(x);
} }
} }

View File

@ -1,4 +1,5 @@
package aula01; package aula01;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
@ -7,12 +8,12 @@ import java.nio.file.Paths;
public class ReadFileExample { public class ReadFileExample {
public static void main(String[] args) { public static void main(String[] args) {
Path fich = Paths.get("datafiles/aula01/major.txt"); Path fich = Paths.get("datafiles/aula01/major.txt");
try { try {
Files.readAllLines(fich).stream().forEach(System.out::println); Files.readAllLines(fich).stream().forEach(System.out::println);
} catch (IOException e) { } catch (IOException e) {
System.out.println("Certifique-se que o ficheiro \"major.txt\" está na raiz da pasta do projeto"); System.out.println("Certifique-se que o ficheiro \"major.txt\" está na raiz da pasta do projeto");
} }
} }
} }

View File

@ -1,11 +1,11 @@
package aula01; package aula01;
public class StringExample { public class StringExample {
public static void main(String[] args) { public static void main(String[] args) {
String s1 = "programar em Java"; String s1 = "programar em Java";
System.out.println(s1.split(" ")[0] + " é engraçado!! :)"); System.out.println(s1.split(" ")[0] + " é engraçado!! :)");
System.out.println("É giro " + s1); System.out.println("É giro " + s1);
for (int i=0; i<14; i++) for (int i = 0; i < 14; i++)
System.out.println("vamos " + s1 + " na aula " + i); System.out.println("vamos " + s1 + " na aula " + i);
} }
} }

View File

@ -9,7 +9,7 @@ public class CelciusToFahrenheit {
System.out.print("ºC? "); System.out.print("ºC? ");
Scanner sin = new Scanner(System.in); Scanner sin = new Scanner(System.in);
double celcius = sin.nextDouble(); double celcius = sin.nextDouble();
double fahrenheit = 1.8*celcius+32; double fahrenheit = 1.8 * celcius + 32;
System.out.printf("%.2fºC = %.2fºF\n", celcius, fahrenheit); System.out.printf("%.2fºC = %.2fºF\n", celcius, fahrenheit);
sin.close(); sin.close();

View File

@ -5,7 +5,7 @@ import java.util.Scanner;
// Solução do exercício 9 // Solução do exercício 9
public class Countdown { public class Countdown {
public static void main(String[] args){ public static void main(String[] args) {
Scanner sin = new Scanner(System.in); Scanner sin = new Scanner(System.in);
System.out.print("N? "); System.out.print("N? ");
@ -13,7 +13,7 @@ public class Countdown {
for (int i = n; i >= 0; i--) { for (int i = n; i >= 0; i--) {
// If the statement before '?' is true then the expression before the ':' is used, else the expression after the ':' is used. // If the statement before '?' is true then the expression before the ':' is used, else the expression after the ':' is used.
// In python: i + "\n" if i%10 == 0 else i + "," // In python: i + "\n" if i%10 == 0 else i + ","
System.out.print(i%10 == 0 ? i + "\n" : i + ","); System.out.print(i % 10 == 0 ? i + "\n" : i + ",");
} }
sin.close(); sin.close();

View File

@ -2,6 +2,7 @@ package aula02;
// Código da package utils disponível em // Código da package utils disponível em
// https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils // https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils
import utils.UserInput; import utils.UserInput;
import java.util.Scanner; import java.util.Scanner;
@ -9,7 +10,7 @@ import java.util.Scanner;
// Solução do exercício 7 // Solução do exercício 7
public class DistanceBetweenPoints { public class DistanceBetweenPoints {
public static void main(String[] args){ public static void main(String[] args) {
Scanner sin = new Scanner(System.in); Scanner sin = new Scanner(System.in);
String[] p1 = UserInput.input(sin, "Coordenadas do ponto 1 (separadas por ','): ").split(","); String[] p1 = UserInput.input(sin, "Coordenadas do ponto 1 (separadas por ','): ").split(",");
@ -17,7 +18,7 @@ public class DistanceBetweenPoints {
double distance = Math.sqrt( double distance = Math.sqrt(
Math.pow(Double.parseDouble(p1[0]) - Double.parseDouble(p2[0]), 2) + Math.pow(Double.parseDouble(p1[0]) - Double.parseDouble(p2[0]), 2) +
Math.pow(Double.parseDouble(p1[1]) - Double.parseDouble(p2[1]), 2)); Math.pow(Double.parseDouble(p1[1]) - Double.parseDouble(p2[1]), 2));
System.out.printf("A distância entre os dois pontos é %.3f\n", distance); System.out.printf("A distância entre os dois pontos é %.3f\n", distance);

View File

@ -2,6 +2,7 @@ package aula02;
// Código da package utils disponível em // Código da package utils disponível em
// https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils // https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils
import utils.UserInput; import utils.UserInput;
import java.util.Scanner; import java.util.Scanner;

View File

@ -2,6 +2,7 @@ package aula02;
// Código da package utils disponível em // Código da package utils disponível em
// https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils // https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils
import utils.UserInput; import utils.UserInput;
import java.util.Scanner; import java.util.Scanner;
@ -15,7 +16,7 @@ public class Investment {
double initialWallet = UserInput.getPositiveNumber(sin); double initialWallet = UserInput.getPositiveNumber(sin);
System.out.print("Taxa de juro mensal (%)? "); System.out.print("Taxa de juro mensal (%)? ");
double tax = sin.nextDouble(); double tax = sin.nextDouble();
double finalWallet = initialWallet * Math.pow(1 + tax/100, 3); double finalWallet = initialWallet * Math.pow(1 + tax / 100, 3);
System.out.printf("O saldo final será de %.2f euros\n", finalWallet); System.out.printf("O saldo final será de %.2f euros\n", finalWallet);
sin.close(); sin.close();

View File

@ -2,6 +2,7 @@ package aula02;
// Código da package utils disponível em // Código da package utils disponível em
// https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils // https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils
import utils.UserInput; import utils.UserInput;
import java.util.Scanner; import java.util.Scanner;

View File

@ -2,6 +2,7 @@ package aula02;
// Código da package utils disponível em // Código da package utils disponível em
// https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils // https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils
import utils.UserInput; import utils.UserInput;
import java.util.Scanner; import java.util.Scanner;
@ -9,7 +10,7 @@ import java.util.Scanner;
// Solução do exercício 8 // Solução do exercício 8
public class PythagoreanTheorem { public class PythagoreanTheorem {
public static void main(String[] args){ public static void main(String[] args) {
Scanner sin = new Scanner(System.in); Scanner sin = new Scanner(System.in);
System.out.println("Cateto A:"); System.out.println("Cateto A:");

View File

@ -5,7 +5,7 @@ import java.util.Scanner;
// Solução do exercício 10 // Solução do exercício 10
public class RealNumbers { public class RealNumbers {
public static void main(String[] args){ public static void main(String[] args) {
Scanner sin = new Scanner(System.in); Scanner sin = new Scanner(System.in);
int readNumbers = 1; int readNumbers = 1;
@ -27,7 +27,7 @@ public class RealNumbers {
++readNumbers; ++readNumbers;
} while (n != first); } while (n != first);
System.out.printf("Valor máximo: %f\nValor mínimo: %f\nMédia: %f\nTotal: %f\n", max, min, (float) sum/readNumbers, sum); System.out.printf("Valor máximo: %f\nValor mínimo: %f\nMédia: %f\nTotal: %f\n", max, min, (float) sum / readNumbers, sum);
sin.close(); sin.close();
} }

View File

@ -2,6 +2,7 @@ package aula02;
// Código da package utils disponível em // Código da package utils disponível em
// https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils // https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/src/utils
import utils.UserInput; import utils.UserInput;
import java.util.Scanner; import java.util.Scanner;
@ -9,7 +10,7 @@ import java.util.Scanner;
// Solução do exercício 6 // Solução do exercício 6
public class SecsToHMS { public class SecsToHMS {
public static void main(String[] args){ public static void main(String[] args) {
Scanner sin = new Scanner(System.in); Scanner sin = new Scanner(System.in);
System.out.println("Introduza os segundos totais: "); System.out.println("Introduza os segundos totais: ");

View File

@ -47,13 +47,13 @@ public class Calendar {
private static void printCalendar(int[] data, int monthDays) { private static void printCalendar(int[] data, int monthDays) {
String[] monthNames = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}; String[] monthNames = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"};
System.out.printf("\n%15s %d\n", monthNames[data[0]-1], data[1]); System.out.printf("\n%15s %d\n", monthNames[data[0] - 1], data[1]);
System.out.println("Dom Seg Ter Qua Qui Sex Sab"); System.out.println("Dom Seg Ter Qua Qui Sex Sab");
if (data[2] != 7) if (data[2] != 7)
for (int i = 0; i < data[2]; i++) for (int i = 0; i < data[2]; i++)
System.out.print(" "); System.out.print(" ");
for (int monthDay = 1; monthDay <= monthDays; monthDay++) { for (int monthDay = 1; monthDay <= monthDays; monthDay++) {
System.out.printf("%3d ", monthDay); System.out.printf("%3d ", monthDay);
if ((monthDay + data[2]) % 7 == 0) if ((monthDay + data[2]) % 7 == 0)

View File

@ -8,24 +8,24 @@ import java.util.Scanner;
public class Grades { public class Grades {
private static final Scanner sin = new Scanner(System.in); private static final Scanner sin = new Scanner(System.in);
public static void main(String[] args) { public static void main(String[] args) {
System.out.print("Quantos alunos tem a turma? "); System.out.print("Quantos alunos tem a turma? ");
int studentCount = sin.nextInt(); int studentCount = sin.nextInt();
Student[] students = new Student[studentCount]; Student[] students = new Student[studentCount];
for (int i = 0; i < studentCount; i++) { for (int i = 0; i < studentCount; i++) {
System.out.printf("Nota teórica do aluno %d: ", i+1); System.out.printf("Nota teórica do aluno %d: ", i + 1);
double notaT = UserInput.getNumberBetween(sin, 0, 20); double notaT = UserInput.getNumberBetween(sin, 0, 20);
System.out.printf("Nota prática do aluno %d: ", i+1); System.out.printf("Nota prática do aluno %d: ", i + 1);
double notaP = UserInput.getNumberBetween(sin, 0, 20); double notaP = UserInput.getNumberBetween(sin, 0, 20);
students[i] = new Student(notaT, notaP); students[i] = new Student(notaT, notaP);
} }
printGrades(students); printGrades(students);
System.out.println(); System.out.println();
} }
private static void printGrades(Student[] students) { private static void printGrades(Student[] students) {
System.out.println("NotaT NotaP Pauta"); System.out.println("NotaT NotaP Pauta");
for (Student student : students) { for (Student student : students) {

View File

@ -9,7 +9,7 @@ import java.util.Scanner;
public class GradesRandom { public class GradesRandom {
private static final Scanner sin = new Scanner(System.in); private static final Scanner sin = new Scanner(System.in);
private static final Random rand = new Random(); private static final Random rand = new Random();
public static void main(String[] args) { public static void main(String[] args) {
System.out.print("Quantos alunos tem a turma? "); System.out.print("Quantos alunos tem a turma? ");
int studentCount = sin.nextInt(); int studentCount = sin.nextInt();

View File

@ -20,8 +20,8 @@ public class Investment {
double tax = UserInput.getNumberBetween(sin, 0, 5); double tax = UserInput.getNumberBetween(sin, 0, 5);
for (int i = 1; i <= 12; i++) { for (int i = 1; i <= 12; i++) {
investment *= 1+tax/100; investment *= 1 + tax / 100;
System.out.printf("Investimento em %d %s: %.2f\n", i, i==1?"mês":"meses", investment); System.out.printf("Investimento em %d %s: %.2f\n", i, i == 1 ? "mês" : "meses", investment);
} }
sin.close(); sin.close();

View File

@ -11,7 +11,7 @@ public class StringExtras {
String str = sin.nextLine(); String str = sin.nextLine();
System.out.println("Frase convertida para minúsculas: " + str.toLowerCase()); System.out.println("Frase convertida para minúsculas: " + str.toLowerCase());
System.out.println("Último caracter da frase: " + str.substring(str.length()-1)); System.out.println("Último caracter da frase: " + str.substring(str.length() - 1));
System.out.println("Os 3 primeiros caracteres: " + str.substring(0, 3)); System.out.println("Os 3 primeiros caracteres: " + str.substring(0, 3));
System.out.printf("Número de digitos na frase: %d\n", StringMethods.countDigits(str)); System.out.printf("Número de digitos na frase: %d\n", StringMethods.countDigits(str));
System.out.printf("Número de espaços na frase: %d\n", StringMethods.countSpaces(str)); System.out.printf("Número de espaços na frase: %d\n", StringMethods.countSpaces(str));

View File

@ -23,7 +23,7 @@ public class CarDemo {
System.out.println("Dados mal formatados. Tente novamente."); System.out.println("Dados mal formatados. Tente novamente.");
} else { } else {
String model = String.join(" ", Arrays.stream(parts, 1, parts.length - 2).toArray(String[]::new)); String model = String.join(" ", Arrays.stream(parts, 1, parts.length - 2).toArray(String[]::new));
cars[i] = new Car(parts[0], model, Integer.parseInt(parts[parts.length-2]), Integer.parseInt(parts[parts.length-1])); cars[i] = new Car(parts[0], model, Integer.parseInt(parts[parts.length - 2]), Integer.parseInt(parts[parts.length - 1]));
} }
} }
} }
@ -33,8 +33,8 @@ public class CarDemo {
static boolean validateData(String[] parts) { static boolean validateData(String[] parts) {
if (parts.length < 4) return false; if (parts.length < 4) return false;
try { try {
Integer.parseInt(parts[parts.length-1]); Integer.parseInt(parts[parts.length - 1]);
if (String.format("%d", Integer.parseInt(parts[parts.length-2])).length() != 4) return false; if (String.format("%d", Integer.parseInt(parts[parts.length - 2])).length() != 4) return false;
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return false; return false;
} }
@ -80,7 +80,7 @@ public class CarDemo {
System.out.println(car); System.out.println(car);
} }
} }
System.out.println("\n"); System.out.println("\n");
} }
@ -90,7 +90,7 @@ public class CarDemo {
int numCars = registerCars(cars); int numCars = registerCars(cars);
if (numCars>0) { if (numCars > 0) {
listCars(cars); listCars(cars);
registerTrips(cars, numCars); registerTrips(cars, numCars);
listCars(cars); listCars(cars);

View File

@ -23,7 +23,7 @@ class Product {
return price; return price;
} }
public int getQuantity() { public int getQuantity() {
return quantity; return quantity;
} }
} }
@ -77,7 +77,7 @@ public class CashRegisterDemo {
cr.addProduct(new Product("Headphones", 29.99, 2)); cr.addProduct(new Product("Headphones", 29.99, 2));
cr.addProduct(new Product("Notebook", 19.99, 5)); cr.addProduct(new Product("Notebook", 19.99, 5));
cr.addProduct(new Product("Phone case", 5.99, 1)); cr.addProduct(new Product("Phone case", 5.99, 1));
// TODO: Listar o conteúdo e valor total // TODO: Listar o conteúdo e valor total
System.out.println(cr); System.out.println(cr);

View File

@ -6,7 +6,7 @@ import java.util.Scanner;
class Circle { class Circle {
public double radius; public double radius;
public Circle(double radius) { public Circle(double radius) {
if (!(radius > 0)) if (!(radius > 0))
throw new IllegalArgumentException("Sizes must be positive."); throw new IllegalArgumentException("Sizes must be positive.");
@ -48,7 +48,7 @@ class Triangle {
public Triangle(double side1, double side2, double side3) { public Triangle(double side1, double side2, double side3) {
if (!(side1 > 0 && side2 > 0 && side3 > 0)) if (!(side1 > 0 && side2 > 0 && side3 > 0))
throw new IllegalArgumentException("Sizes must be positive."); throw new IllegalArgumentException("Sizes must be positive.");
if(!(side1 < side2 + side3 && side2 < side1 + side3 && side3 < side1 + side2)) if (!(side1 < side2 + side3 && side2 < side1 + side3 && side3 < side1 + side2))
throw new IllegalArgumentException("Triangle cannot be created with those sides."); throw new IllegalArgumentException("Triangle cannot be created with those sides.");
this.side1 = side1; this.side1 = side1;
this.side2 = side2; this.side2 = side2;
@ -56,13 +56,13 @@ class Triangle {
} }
public double[] getSides() { public double[] getSides() {
return new double[] {this.side1, this.side2, this.side3}; return new double[]{this.side1, this.side2, this.side3};
} }
public void setSides(double side1, double side2, double side3) { public void setSides(double side1, double side2, double side3) {
if (!(side1 > 0 && side2 > 0 && side3 > 0)) if (!(side1 > 0 && side2 > 0 && side3 > 0))
throw new IllegalArgumentException("Sizes must be positive."); throw new IllegalArgumentException("Sizes must be positive.");
if(!(side1 < side2 + side3 && side2 < side1 + side3 && side3 < side1 + side2)) if (!(side1 < side2 + side3 && side2 < side1 + side3 && side3 < side1 + side2))
throw new IllegalArgumentException("Triangle cannot be created with those sides."); throw new IllegalArgumentException("Triangle cannot be created with those sides.");
this.side1 = side1; this.side1 = side1;
this.side2 = side2; this.side2 = side2;
@ -99,7 +99,7 @@ class Rectangle {
} }
public double[] getSides() { public double[] getSides() {
return new double[] {this.side1, this.side2}; return new double[]{this.side1, this.side2};
} }
public void setSides(double side1, double side2) { public void setSides(double side1, double side2) {

View File

@ -32,11 +32,11 @@ public class SimpleCarDemo {
listCars(cars); listCars(cars);
// Adicionar 10 viagens geradas aleatoriamente // Adicionar 10 viagens geradas aleatoriamente
for (int i=0; i<10; i++) { for (int i = 0; i < 10; i++) {
int j = (int)Math.round(Math.random()*2); // escolhe um dos 3 carros int j = (int) Math.round(Math.random() * 2); // escolhe um dos 3 carros
int kms = (int)Math.round(Math.random()*1000); // viagem até 1000 kms int kms = (int) Math.round(Math.random() * 1000); // viagem até 1000 kms
System.out.printf("Carro %d viajou %d quilómetros.\n", j, kms); System.out.printf("Carro %d viajou %d quilómetros.\n", j, kms);
// TODO: adicionar viagem ao carro j // TODO: adicionar viagem ao carro j
cars[j].drive(kms); cars[j].drive(kms);
} }

View File

@ -21,23 +21,23 @@ public class AuctionDemo {
} }
class RealEstate { class RealEstate {
private final Property[] properties; private final Property[] properties;
private int currentId; private int currentId;
public RealEstate() { public RealEstate() {
this.properties = new Property[10]; this.properties = new Property[10];
this.currentId = 1000; this.currentId = 1000;
} }
public void newProperty(String address, int rooms, int price) { public void newProperty(String address, int rooms, int price) {
Property newProperty = new Property(currentId++, address, rooms, price); Property newProperty = new Property(currentId++, address, rooms, price);
for (int i = 0; i < this.properties.length; i++) { for (int i = 0; i < this.properties.length; i++) {
if (this.properties[i] == null) { if (this.properties[i] == null) {
this.properties[i] = newProperty; this.properties[i] = newProperty;
break; break;
} }
} }
} }
public void sell(int id) { public void sell(int id) {
for (Property property : this.properties) { for (Property property : this.properties) {
@ -53,7 +53,7 @@ class RealEstate {
} }
} }
System.out.printf("Imóvel %d não existe.\n", id); System.out.printf("Imóvel %d não existe.\n", id);
} }
public void setAuction(int id, DateYMD date, int duration) { public void setAuction(int id, DateYMD date, int duration) {
for (Property property : this.properties) { for (Property property : this.properties) {
@ -103,9 +103,11 @@ class Property {
public int getId() { public int getId() {
return this.id; return this.id;
} }
public boolean isAvailable() { public boolean isAvailable() {
return this.availability; return this.availability;
} }
public void setAvailability(boolean availability) { public void setAvailability(boolean availability) {
this.availability = availability; this.availability = availability;
} }
@ -116,7 +118,7 @@ class Property {
} }
public DateYMD[] getAuction() { public DateYMD[] getAuction() {
return new DateYMD[] {this.auctionBegin, this.auctionEnd}; return new DateYMD[]{this.auctionBegin, this.auctionEnd};
} }
public boolean isAuction() { public boolean isAuction() {

View File

@ -33,18 +33,18 @@ public class Calendar {
day -= 7; day -= 7;
day++; day++;
} }
return day == 7 ? 7 : day%7; return day == 7 ? 7 : day % 7;
} }
public void printMonth(int month) { public void printMonth(int month) {
String[] monthNames = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}; String[] monthNames = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"};
System.out.printf("\n%15s %d\n", monthNames[month-1], year); System.out.printf("\n%15s %d\n", monthNames[month - 1], year);
System.out.println("Dom Seg Ter Qua Qui Sex Sab"); System.out.println("Dom Seg Ter Qua Qui Sex Sab");
int firstWeekday = this.firstWeekdayOfMonth(month); int firstWeekday = this.firstWeekdayOfMonth(month);
for (int i = 1; i < firstWeekday; i++) for (int i = 1; i < firstWeekday; i++)
System.out.print(" "); System.out.print(" ");
for (int monthDay = 1; monthDay <= monthDays(month, year); monthDay++) { for (int monthDay = 1; monthDay <= monthDays(month, year); monthDay++) {
System.out.print(this.isEvent(monthDay, month, this.year) ? String.format("*%2d ", monthDay) : String.format("%3d ", monthDay)); System.out.print(this.isEvent(monthDay, month, this.year) ? String.format("*%2d ", monthDay) : String.format("%3d ", monthDay));
if ((monthDay + firstWeekday - 1) % 7 == 0) if ((monthDay + firstWeekday - 1) % 7 == 0)

View File

@ -15,6 +15,27 @@ public class DateYMD {
this.year = year; this.year = year;
} }
static boolean validMonth(int month) {
return month >= 1 && month <= 12;
}
static int monthDays(int month, int year) {
if (!validMonth(month))
return -1;
int[] daysPerMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year))
return 29;
return daysPerMonth[month - 1];
}
static boolean isLeapYear(int year) {
return year % 100 == 0 ? year % 400 == 0 : year % 4 == 0;
}
static boolean validDate(int day, int month, int year) {
return day >= 1 && day <= monthDays(month, year);
}
public void set(int day, int month, int year) { public void set(int day, int month, int year) {
if (!validDate(day, month, year)) if (!validDate(day, month, year))
throw new IllegalArgumentException("Invalid date"); throw new IllegalArgumentException("Invalid date");
@ -73,26 +94,6 @@ public class DateYMD {
public String toString() { public String toString() {
return String.format("%04d-%02d-%02d", this.year, this.month, this.day); return String.format("%04d-%02d-%02d", this.year, this.month, this.day);
} }
static boolean validMonth(int month) {
return month >= 1 && month <= 12;
}
static int monthDays(int month, int year) {
if (!validMonth(month))
return -1;
int[] daysPerMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year))
return 29;
return daysPerMonth[month - 1];
}
static boolean isLeapYear(int year) {
return year % 100 == 0 ? year % 400 == 0 : year % 4 == 0;
}
static boolean validDate(int day, int month, int year) {
return day >= 1 && day <= monthDays(month, year);
}
} }
class TestDateYMD { class TestDateYMD {

View File

@ -2,7 +2,7 @@ package aula06.ex1;
import utils.DateYMD; import utils.DateYMD;
public class Bolser extends Student{ public class Bolser extends Student {
private Professor supervisor; private Professor supervisor;
private double monthlyAmount; private double monthlyAmount;
@ -19,6 +19,7 @@ public class Bolser extends Student{
public Professor getSupervisor() { public Professor getSupervisor() {
return this.supervisor; return this.supervisor;
} }
public void setSupervisor(Professor supervisor) { public void setSupervisor(Professor supervisor) {
if (supervisor == null) { if (supervisor == null) {
throw new IllegalArgumentException("Supervisor cannot be null"); throw new IllegalArgumentException("Supervisor cannot be null");
@ -29,6 +30,7 @@ public class Bolser extends Student{
public double getMonthlyAmount() { public double getMonthlyAmount() {
return this.monthlyAmount; return this.monthlyAmount;
} }
public void setMonthlyAmount(double monthlyAmount) { public void setMonthlyAmount(double monthlyAmount) {
if (monthlyAmount < 0) { if (monthlyAmount < 0) {
throw new IllegalArgumentException("Monthly amount cannot be negative"); throw new IllegalArgumentException("Monthly amount cannot be negative");

View File

@ -18,6 +18,7 @@ public class Person {
public String getName() { public String getName() {
return this.name; return this.name;
} }
public void setName(String name) { public void setName(String name) {
if (name == null || name.isEmpty()) if (name == null || name.isEmpty())
throw new IllegalArgumentException("Name cannot be null or empty"); throw new IllegalArgumentException("Name cannot be null or empty");
@ -27,6 +28,7 @@ public class Person {
public int getCc() { public int getCc() {
return this.cc; return this.cc;
} }
public void setCc(int cc) { public void setCc(int cc) {
if (String.valueOf(cc).length() != 8) if (String.valueOf(cc).length() != 8)
throw new IllegalArgumentException("CC must have 8 digits"); throw new IllegalArgumentException("CC must have 8 digits");
@ -36,6 +38,7 @@ public class Person {
public DateYMD getBirthDate() { public DateYMD getBirthDate() {
return this.birthDate; return this.birthDate;
} }
public void setBirthDate(DateYMD birthDate) { public void setBirthDate(DateYMD birthDate) {
if (birthDate == null) if (birthDate == null)
throw new IllegalArgumentException("Birth date cannot be null"); throw new IllegalArgumentException("Birth date cannot be null");

View File

@ -8,13 +8,13 @@ public class PersonTest {
public static void main(String[] args) { public static void main(String[] args) {
Scanner sin = new Scanner(System.in); Scanner sin = new Scanner(System.in);
Student al = new Student ("Andreia Melo", 98556781,new DateYMD(18, 7, 1990), new DateYMD(1, 9, 2018)); Student al = new Student("Andreia Melo", 98556781, new DateYMD(18, 7, 1990), new DateYMD(1, 9, 2018));
Professor p1 = new Professor("Jorge Almeida", 34672215, new DateYMD(13, 3, 1967), "Associado", "Informática"); Professor p1 = new Professor("Jorge Almeida", 34672215, new DateYMD(13, 3, 1967), "Associado", "Informática");
Bolser bls = new Bolser ("Igor Santos", 89765431, new DateYMD(11, 5, 1985), p1, 900); Bolser bls = new Bolser("Igor Santos", 89765431, new DateYMD(11, 5, 1985), p1, 900);
bls.setMonthlyAmount(1050); bls.setMonthlyAmount(1050);
System.out.println("Student:"+ al.getName()); System.out.println("Student:" + al.getName());
System.out.println(al); System.out.println(al);
System.out.println("Bolser:"+ bls.getName() + ", NMec: " + bls.getNMec() + ", Bolsa:" + bls.getMonthlyAmount()+ ", Orientador:" + bls.getSupervisor()); System.out.println("Bolser:" + bls.getName() + ", NMec: " + bls.getNMec() + ", Bolsa:" + bls.getMonthlyAmount() + ", Orientador:" + bls.getSupervisor());
System.out.println(bls); System.out.println(bls);
sin.close(); sin.close();

View File

@ -15,6 +15,7 @@ public class Professor extends Person {
public String getCategory() { public String getCategory() {
return this.category; return this.category;
} }
public void setCategory(String category) { public void setCategory(String category) {
if (category == null || category.isEmpty()) if (category == null || category.isEmpty())
throw new IllegalArgumentException("Category cannot be null or empty"); throw new IllegalArgumentException("Category cannot be null or empty");
@ -26,6 +27,7 @@ public class Professor extends Person {
public String getDepartment() { public String getDepartment() {
return this.department; return this.department;
} }
public void setDepartment(String department) { public void setDepartment(String department) {
if (department == null || department.isEmpty()) if (department == null || department.isEmpty())
throw new IllegalArgumentException("Department cannot be null or empty"); throw new IllegalArgumentException("Department cannot be null or empty");

View File

@ -5,9 +5,9 @@ import utils.DateYMD;
import java.time.LocalDate; import java.time.LocalDate;
public class Student extends Person { public class Student extends Person {
public static int currentNMec = 100;
private DateYMD registrationDate; private DateYMD registrationDate;
private int nMec; private int nMec;
public static int currentNMec = 100;
public Student(String name, int cc, DateYMD birthDate, DateYMD registrationDate) { public Student(String name, int cc, DateYMD birthDate, DateYMD registrationDate) {
super(name, cc, birthDate); super(name, cc, birthDate);
@ -22,6 +22,7 @@ public class Student extends Person {
public int getNMec() { public int getNMec() {
return this.nMec; return this.nMec;
} }
public void setNMec(int nMec) { public void setNMec(int nMec) {
this.nMec = nMec; this.nMec = nMec;
} }
@ -29,6 +30,7 @@ public class Student extends Person {
public DateYMD getRegistrationDate() { public DateYMD getRegistrationDate() {
return this.registrationDate; return this.registrationDate;
} }
public void setRegistrationDate(DateYMD registrationDate) { public void setRegistrationDate(DateYMD registrationDate) {
LocalDate now = LocalDate.now(); LocalDate now = LocalDate.now();
this.registrationDate = registrationDate == null ? new DateYMD(now.getDayOfMonth(), now.getMonthValue(), now.getYear()) : registrationDate; this.registrationDate = registrationDate == null ? new DateYMD(now.getDayOfMonth(), now.getMonthValue(), now.getYear()) : registrationDate;

View File

@ -3,13 +3,12 @@ package aula06.ex2;
import aula06.ex1.Person; import aula06.ex1.Person;
public class Contact { public class Contact {
private static int currentId = 1;
private final int id; private final int id;
private Person person; private Person person;
private String email; private String email;
private String phone; private String phone;
private static int currentId = 1;
public Contact(Person person, String email, String phone) { public Contact(Person person, String email, String phone) {
if ((email == null || email.isEmpty()) && (phone == null || phone.isEmpty())) if ((email == null || email.isEmpty()) && (phone == null || phone.isEmpty()))
throw new IllegalArgumentException("Either email or phone must be provided"); throw new IllegalArgumentException("Either email or phone must be provided");
@ -26,6 +25,7 @@ public class Contact {
public Person getPerson() { public Person getPerson() {
return person; return person;
} }
public void setPerson(Person person) { public void setPerson(Person person) {
if (person == null) if (person == null)
throw new IllegalArgumentException("Person must be provided"); throw new IllegalArgumentException("Person must be provided");
@ -35,9 +35,10 @@ public class Contact {
public String getEmail() { public String getEmail() {
return email; return email;
} }
public void setEmail(String email) { public void setEmail(String email) {
if (!(email == null || email.isEmpty()) && if (!(email == null || email.isEmpty()) &&
!email.matches("^[a-zA-Z_0-9.]+@[a-zA-Z_0-9.]+\\.[a-zA-Z_0-9]+$")) !email.matches("^[a-zA-Z_0-9.]+@[a-zA-Z_0-9.]+\\.[a-zA-Z_0-9]+$"))
throw new IllegalArgumentException("Invalid email"); throw new IllegalArgumentException("Invalid email");
this.email = email; this.email = email;
} }
@ -45,9 +46,10 @@ public class Contact {
public String getPhone() { public String getPhone() {
return phone; return phone;
} }
public void setPhone(String phone) { public void setPhone(String phone) {
if (!(phone == null || phone.isEmpty()) && if (!(phone == null || phone.isEmpty()) &&
!phone.matches("^9[0-9]{8}$")) !phone.matches("^9[0-9]{8}$"))
throw new IllegalArgumentException("Invalid phone"); throw new IllegalArgumentException("Invalid phone");
this.phone = phone; this.phone = phone;
} }

View File

@ -40,6 +40,7 @@ public class ContactList {
System.out.print("> "); System.out.print("> ");
return sin.nextLine(); return sin.nextLine();
} }
private static void addContact() { private static void addContact() {
System.out.print("Insira o nome: "); System.out.print("Insira o nome: ");
String name = sin.nextLine(); String name = sin.nextLine();
@ -69,6 +70,7 @@ public class ContactList {
contacts = newContacts; contacts = newContacts;
} }
} }
private static void changeContact() { private static void changeContact() {
System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: "); System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: ");
String query = sin.nextLine(); String query = sin.nextLine();

View File

@ -7,12 +7,15 @@ public class Vector {
public Vector() { public Vector() {
this.vector = new int[0]; this.vector = new int[0];
} }
public Vector(int size) { public Vector(int size) {
this.vector = new int[size]; this.vector = new int[size];
} }
public Vector(int[] vector) { public Vector(int[] vector) {
this.vector = vector; this.vector = vector;
} }
public int[] getVector() { public int[] getVector() {
return vector; return vector;
} }
@ -21,12 +24,14 @@ public class Vector {
public int size() { public int size() {
return this.vector.length; return this.vector.length;
} }
public boolean contains(int value) { public boolean contains(int value) {
for (int n : this.vector) for (int n : this.vector)
if (n == value) if (n == value)
return true; return true;
return false; return false;
} }
public int count(int value) { public int count(int value) {
int count = 0; int count = 0;
for (int n : this.vector) for (int n : this.vector)
@ -38,13 +43,14 @@ public class Vector {
// Method to change values // Method to change values
public void insert(int value) { public void insert(int value) {
if (this.contains(value)) return; if (this.contains(value)) return;
int[] aux = new int[this.size()+1]; int[] aux = new int[this.size() + 1];
System.arraycopy(this.vector, 0, aux, 0, this.size()); System.arraycopy(this.vector, 0, aux, 0, this.size());
aux[this.size()] = value; aux[this.size()] = value;
this.vector = aux; this.vector = aux;
} }
public void remove(int value) { public void remove(int value) {
int[] aux = new int[this.size()-this.count(value)]; int[] aux = new int[this.size() - this.count(value)];
int i = 0; int i = 0;
for (int n : this.vector) { for (int n : this.vector) {
if (n == value) if (n == value)
@ -54,6 +60,7 @@ public class Vector {
} }
this.vector = aux; this.vector = aux;
} }
public void empty() { public void empty() {
this.vector = new int[0]; this.vector = new int[0];
} }
@ -69,6 +76,7 @@ public class Vector {
result.insert(n); result.insert(n);
return result; return result;
} }
public Vector subtract(Vector secondVector) { public Vector subtract(Vector secondVector) {
Vector result = new Vector(); Vector result = new Vector();
for (int n : this.vector) for (int n : this.vector)
@ -76,6 +84,7 @@ public class Vector {
result.insert(n); result.insert(n);
return result; return result;
} }
public Vector intersect(Vector secondVector) { public Vector intersect(Vector secondVector) {
Vector result = new Vector(); Vector result = new Vector();
for (int n : this.vector) for (int n : this.vector)
@ -90,6 +99,6 @@ public class Vector {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
for (int n : this.vector) for (int n : this.vector)
result.append(String.format("%d ", n)); result.append(String.format("%d ", n));
return this.size() > 0 ? result.substring(0, result.length()-1) : result.toString(); return this.size() > 0 ? result.substring(0, result.length() - 1) : result.toString();
} }
} }

View File

@ -4,19 +4,24 @@ package aula06.ex3;
public class VectorTest { public class VectorTest {
public static void main(String[] args) { public static void main(String[] args) {
Vector c1 = new Vector(); Vector c1 = new Vector();
c1.insert(4); c1.insert(7); c1.insert(6); c1.insert(5); c1.insert(4);
c1.insert(7);
c1.insert(6);
c1.insert(5);
Vector c2 = new Vector(); Vector c2 = new Vector();
int[] test = { 7, 3, 2, 5, 4, 6, 7}; int[] test = {7, 3, 2, 5, 4, 6, 7};
for (int el : test) c2.insert(el); for (int el : test) c2.insert(el);
c2.remove(3); c2.remove(5); c2.remove(6); c2.remove(3);
c2.remove(5);
c2.remove(6);
System.out.println(c1); System.out.println(c1);
System.out.println(c2); System.out.println(c2);
System.out.println("Número de elementos em c1: " + c1.size()); System.out.println("Número de elementos em c1: " + c1.size());
System.out.println("Número de elementos em c2: " + c2.size()); System.out.println("Número de elementos em c2: " + c2.size());
System.out.println("c1 contém 6?: " + ((c1.contains(6) ? "sim" : "não"))); System.out.println("c1 contém 6?: " + ((c1.contains(6) ? "sim" : "não")));
System.out.println("c2 contém 6?: " + ((c2.contains(6) ? "sim" : "não"))); System.out.println("c2 contém 6?: " + ((c2.contains(6) ? "sim" : "não")));

View File

@ -12,7 +12,7 @@ public class Rectangle extends Shape {
} }
public double[] getSides() { public double[] getSides() {
return new double[] {this.side1, this.side2}; return new double[]{this.side1, this.side2};
} }
public void setSides(double side1, double side2) { public void setSides(double side1, double side2) {
@ -33,7 +33,7 @@ public class Rectangle extends Shape {
@Override @Override
public boolean equals(Shape s2) { public boolean equals(Shape s2) {
if (s2 instanceof Rectangle s2Rect) if (s2 instanceof Rectangle s2Rect)
return Objects.equals(this.color, s2Rect.color) && this.side1 == s2Rect.side1 && this.side2 == s2Rect.side2; return Objects.equals(this.color, s2Rect.color) && this.side1 == s2Rect.side1 && this.side2 == s2Rect.side2;
return false; return false;
} }

View File

@ -2,8 +2,12 @@ package aula07.ex1;
public abstract class Shape { public abstract class Shape {
protected String color; protected String color;
public abstract boolean equals(Shape c2); public abstract boolean equals(Shape c2);
public abstract String toString(); public abstract String toString();
public abstract double getArea(); public abstract double getArea();
public abstract double getPerimeter(); public abstract double getPerimeter();
} }

View File

@ -13,7 +13,7 @@ public class Triangle extends Shape {
} }
public double[] getSides() { public double[] getSides() {
return new double[] {this.side1, this.side2, this.side3}; return new double[]{this.side1, this.side2, this.side3};
} }
public void setSides(double side1, double side2, double side3) { public void setSides(double side1, double side2, double side3) {

View File

@ -1,16 +1,6 @@
package aula07.ex2; package aula07.ex2;
public abstract class Date { public abstract class Date {
public abstract int getAbsDay();
public abstract int getDay();
public abstract int getMonth();
public abstract int getYear();
public abstract void increment();
public abstract void decrement();
public abstract void addDays(int days);
public abstract void removeDays(int days);
public static int monthDays(int month, int year) { public static int monthDays(int month, int year) {
if (!validMonth(month)) if (!validMonth(month))
return -1; return -1;
@ -31,4 +21,20 @@ public abstract class Date {
public static boolean isLeapYear(int year) { public static boolean isLeapYear(int year) {
return year % 100 == 0 ? year % 400 == 0 : year % 4 == 0; return year % 100 == 0 ? year % 400 == 0 : year % 4 == 0;
} }
public abstract int getAbsDay();
public abstract int getDay();
public abstract int getMonth();
public abstract int getYear();
public abstract void increment();
public abstract void decrement();
public abstract void addDays(int days);
public abstract void removeDays(int days);
} }

View File

@ -6,7 +6,8 @@ public class DateTest {
public static void main(String[] args) { public static void main(String[] args) {
Scanner sin = new Scanner(System.in); Scanner sin = new Scanner(System.in);
mainLoop: while (true) { mainLoop:
while (true) {
System.out.print("Class to test (0-Quit;1-DateYMD;2-DateND): "); System.out.print("Class to test (0-Quit;1-DateYMD;2-DateND): ");
int classoption = sin.nextInt(); int classoption = sin.nextInt();
@ -17,7 +18,8 @@ public class DateTest {
} }
case 1 -> { case 1 -> {
DateYMD date = null; DateYMD date = null;
class1Loop: while (true) { class1Loop:
while (true) {
System.out.println("Date operations:"); System.out.println("Date operations:");
System.out.println("1 - Create date"); System.out.println("1 - Create date");
System.out.println("2 - Show current date"); System.out.println("2 - Show current date");
@ -28,8 +30,9 @@ public class DateTest {
System.out.print("Option: "); System.out.print("Option: ");
int option = sin.nextInt(); int option = sin.nextInt();
if (option == 0) if (option == 0)
break class1Loop; break;
class1Switch: switch (option) { class1Switch:
switch (option) {
case 1 -> { case 1 -> {
System.out.print("Day: "); System.out.print("Day: ");
int day = sin.nextInt(); int day = sin.nextInt();
@ -43,21 +46,21 @@ public class DateTest {
case 2 -> { case 2 -> {
if (date == null) { if (date == null) {
System.out.println("Date not created"); System.out.println("Date not created");
break class1Switch; break;
} }
System.out.println("Current date: " + date); System.out.println("Current date: " + date);
} }
case 3 -> { case 3 -> {
if (date == null) { if (date == null) {
System.out.println("Date not created"); System.out.println("Date not created");
break class1Switch; break;
} }
System.out.println("Current date: " + new DateND(date.getAbsDay())); System.out.println("Current date: " + new DateND(date.getAbsDay()));
} }
case 4 -> { case 4 -> {
if (date == null) { if (date == null) {
System.out.println("Date not created"); System.out.println("Date not created");
break class1Switch; break;
} }
System.out.print("Number of days to increment date by: "); System.out.print("Number of days to increment date by: ");
int daysToIncrement = sin.nextInt(); int daysToIncrement = sin.nextInt();
@ -67,7 +70,7 @@ public class DateTest {
case 5 -> { case 5 -> {
if (date == null) { if (date == null) {
System.out.println("Date not created"); System.out.println("Date not created");
break class1Switch; break;
} }
System.out.print("Number of days to decremente date by: "); System.out.print("Number of days to decremente date by: ");
int daysToDecrement = sin.nextInt(); int daysToDecrement = sin.nextInt();
@ -80,7 +83,8 @@ public class DateTest {
} }
case 2 -> { case 2 -> {
DateND date = null; DateND date = null;
class2Loop: while (true) { class2Loop:
while (true) {
System.out.println("Date operations:"); System.out.println("Date operations:");
System.out.println("1 - Create date"); System.out.println("1 - Create date");
System.out.println("2 - Show current date"); System.out.println("2 - Show current date");
@ -91,8 +95,9 @@ public class DateTest {
System.out.print("Option: "); System.out.print("Option: ");
int option = sin.nextInt(); int option = sin.nextInt();
if (option == 0) if (option == 0)
break class2Loop; break;
class2Switch: switch (option) { class2Switch:
switch (option) {
case 1 -> { case 1 -> {
System.out.print("Day: "); System.out.print("Day: ");
int day = sin.nextInt(); int day = sin.nextInt();
@ -102,21 +107,21 @@ public class DateTest {
case 2 -> { case 2 -> {
if (date == null) { if (date == null) {
System.out.println("Date not created"); System.out.println("Date not created");
break class2Switch; break;
} }
System.out.println("Current date: " + date); System.out.println("Current date: " + date);
} }
case 3 -> { case 3 -> {
if (date == null) { if (date == null) {
System.out.println("Date not created"); System.out.println("Date not created");
break class2Switch; break;
} }
System.out.println("Current date: " + new DateYMD(date.getDay(), date.getMonth(), date.getYear())); System.out.println("Current date: " + new DateYMD(date.getDay(), date.getMonth(), date.getYear()));
} }
case 4 -> { case 4 -> {
if (date == null) { if (date == null) {
System.out.println("Date not created"); System.out.println("Date not created");
break class2Switch; break;
} }
System.out.print("Number of days to increment date by: "); System.out.print("Number of days to increment date by: ");
int daysToIncrement = sin.nextInt(); int daysToIncrement = sin.nextInt();
@ -126,7 +131,7 @@ public class DateTest {
case 5 -> { case 5 -> {
if (date == null) { if (date == null) {
System.out.println("Date not created"); System.out.println("Date not created");
break class2Switch; break;
} }
System.out.print("Number of days to decremente date by: "); System.out.print("Number of days to decremente date by: ");
int daysToDecrement = sin.nextInt(); int daysToDecrement = sin.nextInt();

View File

@ -69,7 +69,7 @@ public class DateYMD extends Date {
if (this.day > 1) if (this.day > 1)
this.day--; this.day--;
else { else {
this.day = monthDays(this.month == 1 ? 12 : this.month-1, this.year); this.day = monthDays(this.month == 1 ? 12 : this.month - 1, this.year);
if (this.month > 1) if (this.month > 1)
this.month--; this.month--;
else { else {

View File

@ -3,10 +3,10 @@ package aula07.ex3;
public class Game { public class Game {
private final Team team1; private final Team team1;
private final Team team2; private final Team team2;
private int team1Goals;
private int team2Goals;
private final Ball ball; private final Ball ball;
private final double gameDuration; private final double gameDuration;
private int team1Goals;
private int team2Goals;
private double timeElapsed; private double timeElapsed;
public Game(Team team1, Team team2, Ball ball, double gameDuration) { public Game(Team team1, Team team2, Ball ball, double gameDuration) {

View File

@ -38,13 +38,13 @@ public class Main {
} }
System.out.println("Equipas:"); System.out.println("Equipas:");
for (int i = 0; i < teams.length; i++) for (int i = 0; i < teams.length; i++)
System.out.println((i+1) + " - " + teams[i].getName()); System.out.println((i + 1) + " - " + teams[i].getName());
System.out.print("Escolha a equipa 1: "); System.out.print("Escolha a equipa 1: ");
int team1Id = Integer.parseInt(sin.nextLine()); int team1Id = Integer.parseInt(sin.nextLine());
System.out.print("Escolha a equipa 2: "); System.out.print("Escolha a equipa 2: ");
int team2Id = Integer.parseInt(sin.nextLine()); int team2Id = Integer.parseInt(sin.nextLine());
Team team1 = teams[team1Id-1]; Team team1 = teams[team1Id - 1];
Team team2 = teams[team2Id-1]; Team team2 = teams[team2Id - 1];
System.out.println("Bola para o jogo:"); System.out.println("Bola para o jogo:");
System.out.print("Cor da bola: "); System.out.print("Cor da bola: ");
String color = sin.nextLine(); String color = sin.nextLine();
@ -60,9 +60,9 @@ public class Main {
double duration = Double.parseDouble(durationString.equals("") ? "90" : durationString); double duration = Double.parseDouble(durationString.equals("") ? "90" : durationString);
Game game = new Game(team1, team2, ball, duration); Game game = new Game(team1, team2, ball, duration);
if (games == null) if (games == null)
games = new Game[] { game }; games = new Game[]{game};
else { else {
Game[] newGames = new Game[games.length+1]; Game[] newGames = new Game[games.length + 1];
System.arraycopy(games, 0, newGames, 0, games.length); System.arraycopy(games, 0, newGames, 0, games.length);
newGames[games.length] = game; newGames[games.length] = game;
games = newGames; games = newGames;
@ -75,7 +75,8 @@ public class Main {
System.out.println("3 - Adicionar golo"); System.out.println("3 - Adicionar golo");
System.out.print("Opção: "); System.out.print("Opção: ");
int option = Integer.parseInt(sin.nextLine()); int option = Integer.parseInt(sin.nextLine());
swit : switch (option) { swit:
switch (option) {
case 1 -> { case 1 -> {
System.out.print("Novo X: "); System.out.print("Novo X: ");
double x = Double.parseDouble(sin.nextLine()); double x = Double.parseDouble(sin.nextLine());
@ -86,7 +87,7 @@ public class Main {
case 2 -> { case 2 -> {
System.out.println("Robots:"); System.out.println("Robots:");
for (Robot r : game.getTeam1().getRobots()) for (Robot r : game.getTeam1().getRobots())
System.out.println(r); System.out.println(r);
for (Robot r : game.getTeam2().getRobots()) for (Robot r : game.getTeam2().getRobots())
System.out.println(r); System.out.println(r);
System.out.print("Escolha o ID do robot: "); System.out.print("Escolha o ID do robot: ");
@ -151,7 +152,7 @@ public class Main {
int nRobots = Integer.parseInt(sin.nextLine()); int nRobots = Integer.parseInt(sin.nextLine());
Robot[] robots = new Robot[nRobots]; Robot[] robots = new Robot[nRobots];
for (int i = 0; i < nRobots; i++) { for (int i = 0; i < nRobots; i++) {
System.out.println("Robot " + (i+1)); System.out.println("Robot " + (i + 1));
System.out.print("\n1 - GoalKeeper\n2 - Defender\n3 - Midfielder\n4 - Striker\nPosição: "); System.out.print("\n1 - GoalKeeper\n2 - Defender\n3 - Midfielder\n4 - Striker\nPosição: ");
PlayerPosition position = PlayerPosition.getPositionById(Integer.parseInt(sin.nextLine())); PlayerPosition position = PlayerPosition.getPositionById(Integer.parseInt(sin.nextLine()));
System.out.print("X inicial: "); System.out.print("X inicial: ");
@ -164,9 +165,9 @@ public class Main {
} }
Team team = new Team(name, coach, robots); Team team = new Team(name, coach, robots);
if (teams == null) if (teams == null)
teams = new Team[] {team}; teams = new Team[]{team};
else { else {
Team[] newTeams = new Team[teams.length+1]; Team[] newTeams = new Team[teams.length + 1];
System.arraycopy(teams, 0, newTeams, 0, teams.length); System.arraycopy(teams, 0, newTeams, 0, teams.length);
newTeams[teams.length] = team; newTeams[teams.length] = team;
teams = newTeams; teams = newTeams;

View File

@ -23,6 +23,7 @@ public class Robot extends MovableObject {
public PlayerPosition getPlayerPosition() { public PlayerPosition getPlayerPosition() {
return this.playerPosition; return this.playerPosition;
} }
public void setPlayerPosition(PlayerPosition playerPosition) { public void setPlayerPosition(PlayerPosition playerPosition) {
this.playerPosition = playerPosition; this.playerPosition = playerPosition;
} }
@ -30,6 +31,7 @@ public class Robot extends MovableObject {
public int getGoalsScored() { public int getGoalsScored() {
return this.goalsScored; return this.goalsScored;
} }
public void increaseGoalsScored() { public void increaseGoalsScored() {
this.goalsScored++; this.goalsScored++;
} }
@ -37,6 +39,6 @@ public class Robot extends MovableObject {
@Override @Override
public String toString() { public String toString() {
return String.format("Robot %d (%s) at (%.2f, %.2f) with %.2f travelled distance and %d goals scored", return String.format("Robot %d (%s) at (%.2f, %.2f) with %.2f travelled distance and %d goals scored",
this.id, this.playerPosition, this.x, this.y, this.distanceTravelled, this.goalsScored); this.id, this.playerPosition, this.x, this.y, this.distanceTravelled, this.goalsScored);
} }
} }

View File

@ -54,17 +54,17 @@ public class Team {
public void addRobot(Robot robot) { public void addRobot(Robot robot) {
if (this.robots == null) if (this.robots == null)
this.setRobots(new Robot[] {robot}); this.setRobots(new Robot[]{robot});
else { else {
Robot[] newRobots = new Robot[this.robots.length+1]; Robot[] newRobots = new Robot[this.robots.length + 1];
System.arraycopy(this.robots, 0, newRobots, 0, this.robots.length); System.arraycopy(this.robots, 0, newRobots, 0, this.robots.length);
newRobots[newRobots.length-1] = robot; newRobots[newRobots.length - 1] = robot;
this.setRobots(newRobots); this.setRobots(newRobots);
} }
} }
public void removeRobot(Robot robot) { public void removeRobot(Robot robot) {
Robot[] newRobots = new Robot[this.robots.length-1]; Robot[] newRobots = new Robot[this.robots.length - 1];
int index = 0; int index = 0;
for (Robot r : this.robots) for (Robot r : this.robots)
if (r.getId() != robot.getId()) { if (r.getId() != robot.getId()) {
@ -80,6 +80,6 @@ public class Team {
for (Robot r : this.robots) for (Robot r : this.robots)
robotsString.append("\n\t\t").append(r.toString()); robotsString.append("\n\t\t").append(r.toString());
return String.format("Team %s\n\tCoach: %s\n\tGoals Scored: %d\n\tGoals Taken: %d\n\tRobots:%s", return String.format("Team %s\n\tCoach: %s\n\tGoals Scored: %d\n\tGoals Taken: %d\n\tRobots:%s",
this.name, this.coach, this.goalsScored, this.goalsTaken, robotsString); this.name, this.coach, this.goalsScored, this.goalsTaken, robotsString);
} }
} }

View File

@ -2,5 +2,6 @@ package aula08.ex1.Interfaces;
public interface IElectricVehicle { public interface IElectricVehicle {
int currentBatteryLvl(); int currentBatteryLvl();
void charge(int percentage); void charge(int percentage);
} }

View File

@ -2,5 +2,6 @@ package aula08.ex1.Interfaces;
public interface IFuelVehicle { public interface IFuelVehicle {
int fuelLevel(); int fuelLevel();
void fillTank(int level); void fillTank(int level);
} }

View File

@ -2,6 +2,8 @@ package aula08.ex1.Interfaces;
public interface IKmTravelled { public interface IKmTravelled {
void trip(int km); void trip(int km);
int lastTrip(); int lastTrip();
int totalDistance(); int totalDistance();
} }

View File

@ -26,15 +26,15 @@ public class Motorcycle extends Vehicle implements IFuelVehicle {
@Override @Override
public String toString() { public String toString() {
return "Motorcycle {" + return "Motorcycle {" +
"\n\tplate='" + this.getPlate() + '\'' + "\n\tplate='" + this.getPlate() + '\'' +
",\n\tbrand='" + this.getBrand() + '\'' + ",\n\tbrand='" + this.getBrand() + '\'' +
",\n\tmodel='" + this.getModel() + '\'' + ",\n\tmodel='" + this.getModel() + '\'' +
",\n\tpotency=" + this.getPotency() + ",\n\tpotency=" + this.getPotency() +
",\n\ttype=" + this.getType().toString() + ",\n\ttype=" + this.getType().toString() +
",\n\tlastTripKm=" + this.lastTrip() + ",\n\tlastTripKm=" + this.lastTrip() +
",\n\tkm=" + this.totalDistance() + ",\n\tkm=" + this.totalDistance() +
",\n\tfuelLevel=" + this.fuelLevel() + ",\n\tfuelLevel=" + this.fuelLevel() +
"\n}"; "\n}";
} }
@Override @Override
@ -64,13 +64,6 @@ public class Motorcycle extends Vehicle implements IFuelVehicle {
public enum MotorcycleType { public enum MotorcycleType {
SPORT, TOURING; SPORT, TOURING;
public String toString() {
return switch (this) {
case SPORT -> "Sport";
case TOURING -> "Touring";
};
}
public static MotorcycleType fromString(String s) { public static MotorcycleType fromString(String s) {
return switch (s) { return switch (s) {
case "SPORT", "Sport", "sport" -> SPORT; case "SPORT", "Sport", "sport" -> SPORT;
@ -78,5 +71,12 @@ public class Motorcycle extends Vehicle implements IFuelVehicle {
default -> throw new IllegalArgumentException("Invalid MotorcycleType: " + s); default -> throw new IllegalArgumentException("Invalid MotorcycleType: " + s);
}; };
} }
public String toString() {
return switch (this) {
case SPORT -> "Sport";
case TOURING -> "Touring";
};
}
} }
} }

View File

@ -5,10 +5,10 @@ import aula08.ex2.Enums.AlimentOrigin;
import java.util.Objects; import java.util.Objects;
public abstract class Aliment { public abstract class Aliment {
final AlimentOrigin alimentOrigin;
double proteins; double proteins;
double calories; double calories;
double weight; double weight;
final AlimentOrigin alimentOrigin;
public Aliment(double proteins, double calories, double weight, AlimentOrigin alimentOrigin) { public Aliment(double proteins, double calories, double weight, AlimentOrigin alimentOrigin) {
setProteins(proteins); setProteins(proteins);
@ -19,7 +19,7 @@ public abstract class Aliment {
public double getProteins() { public double getProteins() {
return this.proteins; return this.proteins;
}; }
public void setProteins(double proteins) { public void setProteins(double proteins) {
if (proteins <= 0) if (proteins <= 0)

View File

@ -5,7 +5,7 @@ public enum AlimentType {
public static AlimentType fromString(String string) { public static AlimentType fromString(String string) {
return switch (string.toUpperCase()) { return switch (string.toUpperCase()) {
case "MEAT"-> MEAT; case "MEAT" -> MEAT;
case "FISH" -> FISH; case "FISH" -> FISH;
case "CEREAL" -> CEREAL; case "CEREAL" -> CEREAL;
case "VEGETABLE" -> VEGETABLE; case "VEGETABLE" -> VEGETABLE;

View File

@ -5,7 +5,7 @@ public enum FishState {
public static FishState fromString(String string) { public static FishState fromString(String string) {
return switch (string.toUpperCase()) { return switch (string.toUpperCase()) {
case "FRESH"-> FRESH; case "FRESH" -> FRESH;
case "FROZEN" -> FROZEN; case "FROZEN" -> FROZEN;
default -> null; default -> null;
}; };

View File

@ -2,9 +2,14 @@ package aula08.ex3.Interfaces;
public interface IProduct { public interface IProduct {
String getName(); String getName();
void setPrice(double price);
double getPrice(); double getPrice();
void setPrice(double price);
int stock(); int stock();
void addStock(int amount); void addStock(int amount);
void removeStock(int amount); void removeStock(int amount);
} }

View File

@ -4,6 +4,8 @@ import aula08.ex3.Product;
public interface IPurchase { public interface IPurchase {
void addProduct(Product product, int amount); void addProduct(Product product, int amount);
void listProducts(); void listProducts();
double getTotal(); double getTotal();
} }

View File

@ -14,7 +14,7 @@ public class Purchase implements IPurchase {
product.removeStock(amount); product.removeStock(amount);
if (products.containsKey(product)) { if (products.containsKey(product)) {
int currentAmount = products.get(product); int currentAmount = products.get(product);
products.replace(product, currentAmount+amount); products.replace(product, currentAmount + amount);
} else } else
products.put(product, amount); products.put(product, amount);
} }

View File

@ -6,7 +6,7 @@ public class ShoppingCartTester {
Product p2 = new Product("Calças", 30, 1); Product p2 = new Product("Calças", 30, 1);
Product p3 = new ProductWithDiscount("Sapatilhas", 50, 2, 50); Product p3 = new ProductWithDiscount("Sapatilhas", 50, 2, 50);
Product p4 = new ProductWithDiscount("Casacos", 100, 1, 10); Product p4 = new ProductWithDiscount("Casacos", 100, 1, 10);
Purchase compra = new Purchase(); Purchase compra = new Purchase();
compra.addProduct(p2, 5); compra.addProduct(p2, 5);
compra.addProduct(p3, 2); compra.addProduct(p3, 2);

View File

@ -10,13 +10,14 @@ import java.util.Set;
public class ALDemo { public class ALDemo {
public static void main(String[] args) { public static void main(String[] args) {
ArrayList<Integer> c1= new ArrayList<>(); ArrayList<Integer> c1 = new ArrayList<>();
for(int i= 10; i<= 100; i+=10) c1.add(i);System.out.println("Size: "+ c1.size()); for (int i = 10; i <= 100; i += 10) c1.add(i);
System.out.println("Size: " + c1.size());
for(int i= 0; i< c1.size(); i++) for (int i = 0; i < c1.size(); i++)
System.out.println("Elemento: "+ c1.get(i)); System.out.println("Elemento: " + c1.get(i));
ArrayList<String> c2= new ArrayList<>(); ArrayList<String> c2 = new ArrayList<>();
c2.add("Vento"); c2.add("Vento");
c2.add("Calor"); c2.add("Calor");
c2.add("Frio"); c2.add("Frio");

View File

@ -6,8 +6,8 @@ import java.util.Iterator;
public class CollectionTester { public class CollectionTester {
public static void main(String[] args) { public static void main(String[] args) {
int DIM= 5000; int DIM = 5000;
Collection<Integer> col= new ArrayList<>(); Collection<Integer> col = new ArrayList<>();
checkPerformance(col, DIM); checkPerformance(col, DIM);
} }
@ -15,32 +15,32 @@ public class CollectionTester {
double start, stop, delta; double start, stop, delta;
// Add // Add
start = System.nanoTime(); // clock snapshot before start = System.nanoTime(); // clock snapshot before
for(int i=0; i<DIM; i++) for (int i = 0; i < DIM; i++)
col.add(i); col.add(i);
stop = System.nanoTime(); // clock snapshot after stop = System.nanoTime(); // clock snapshot after
delta = (stop-start)/1e6; // convert to milliseconds delta = (stop - start) / 1e6; // convert to milliseconds
System.out.println(col.size()+ ": Add to "+col.getClass().getSimpleName() +" took "+ delta+ "ms"); System.out.println(col.size() + ": Add to " + col.getClass().getSimpleName() + " took " + delta + "ms");
// Search // Search
start = System.nanoTime(); // clock snapshot before start = System.nanoTime(); // clock snapshot before
for(int i=0; i<DIM; i++) { for (int i = 0; i < DIM; i++) {
int n = (int) (Math.random()*DIM); int n = (int) (Math.random() * DIM);
if(!col.contains(n)) if (!col.contains(n))
System.out.println("Not found???"+n); System.out.println("Not found???" + n);
} }
stop = System.nanoTime(); // clock snapshot after stop = System.nanoTime(); // clock snapshot after
delta = (stop-start)/1e6; // convert nanoseconds to milliseconds delta = (stop - start) / 1e6; // convert nanoseconds to milliseconds
System.out.println(col.size()+ ": Search to "+ col.getClass().getSimpleName() +" took "+ delta+ "ms"); System.out.println(col.size() + ": Search to " + col.getClass().getSimpleName() + " took " + delta + "ms");
// Remove // Remove
start = System.nanoTime(); // clock snapshot before start = System.nanoTime(); // clock snapshot before
Iterator<Integer> iterator = col.iterator(); Iterator<Integer> iterator = col.iterator();
while(iterator.hasNext()) { while (iterator.hasNext()) {
iterator.next(); iterator.next();
iterator.remove(); iterator.remove();
} }
stop = System.nanoTime(); // clock snapshot after stop = System.nanoTime(); // clock snapshot after
delta = (stop-start)/1e6; // convert nanoseconds to milliseconds delta = (stop - start) / 1e6; // convert nanoseconds to milliseconds
System.out.println(col.size() + ": Remove from "+ col.getClass().getSimpleName() +" took "+ delta+ "ms"); System.out.println(col.size() + ": Remove from " + col.getClass().getSimpleName() + " took " + delta + "ms");
} }
} }

View File

@ -67,8 +67,7 @@ public class PlaneManager {
for (Plane plane : planes) { for (Plane plane : planes) {
if (plane instanceof CommercialPlane && type.equals("commercial")) { if (plane instanceof CommercialPlane && type.equals("commercial")) {
System.out.println(plane); System.out.println(plane);
} } else if (plane instanceof MilitaryPlane && type.equals("military")) {
else if (plane instanceof MilitaryPlane && type.equals("military")) {
System.out.println(plane); System.out.println(plane);
} }
} }

View File

@ -57,8 +57,7 @@ public class PlaneTester {
System.out.print("Enter the plane's crew members count: "); System.out.print("Enter the plane's crew members count: ");
int crewMembersCount = Integer.parseInt(scanner.nextLine()); int crewMembersCount = Integer.parseInt(scanner.nextLine());
planeManager.addPlane(new CommercialPlane(id, manufacturer, model, year, passengerCount, maxSpeed, crewMembersCount)); planeManager.addPlane(new CommercialPlane(id, manufacturer, model, year, passengerCount, maxSpeed, crewMembersCount));
} } else if (type.equals("military")) {
else if (type.equals("military")) {
System.out.print("Enter the plane's missile count: "); System.out.print("Enter the plane's missile count: ");
int missileCount = Integer.parseInt(scanner.nextLine()); int missileCount = Integer.parseInt(scanner.nextLine());
planeManager.addPlane(new MilitaryPlane(id, manufacturer, model, year, passengerCount, maxSpeed, missileCount)); planeManager.addPlane(new MilitaryPlane(id, manufacturer, model, year, passengerCount, maxSpeed, missileCount));

View File

@ -13,12 +13,29 @@ public class Book {
this.setYear(year); this.setYear(year);
} }
public String getTitle() { return this.title; } public String getTitle() {
public void setTitle(String title) { this.title = title; } return this.title;
public String getAuthor() { return this.author; } }
public void setAuthor(String author) { this.author = author; }
public int getYear() { return this.year; } public void setTitle(String title) {
public void setYear(int year) { this.year = year; } this.title = title;
}
public String getAuthor() {
return this.author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getYear() {
return this.year;
}
public void setYear(int year) {
this.year = year;
}
@Override @Override
public String toString() { public String toString() {

View File

@ -14,7 +14,7 @@ public class FileReaderTest {
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
while(input.hasNext()){ while (input.hasNext()) {
String word = input.next(); String word = input.next();
if (word.length() > 2) { if (word.length() > 2) {
words.add(word); words.add(word);

View File

@ -16,15 +16,15 @@ public class WordPairCounter {
String text = ""; String text = "";
Path path = Paths.get((new Scanner(System.in)).nextLine()); Path path = Paths.get((new Scanner(System.in)).nextLine());
try { try {
text = Files.readString(path); text = Files.readString(path);
} catch (IOException e) { } catch (IOException e) {
System.out.printf("Certifique-se que o ficheiro \"%s\" está na raiz da pasta do projeto", path); System.out.printf("Certifique-se que o ficheiro \"%s\" está na raiz da pasta do projeto", path);
System.exit(1); System.exit(1);
} }
Object[] words = Arrays.stream(text.split("[\\s.,:';?!\\-*{}=+&/()\\[\\]”“\"]+")).filter(word -> word.length() > 2).map(String::toLowerCase).toArray(); Object[] words = Arrays.stream(text.split("[\\s.,:';?!\\-*{}=+&/()\\[\\]”“\"]+")).filter(word -> word.length() > 2).map(String::toLowerCase).toArray();
for (int i = 1; i < words.length-1; i++) { for (int i = 1; i < words.length - 1; i++) {
String word1 = (String) words[i-1]; String word1 = (String) words[i - 1];
String word2 = (String) words[i]; String word2 = (String) words[i];
HashMap<String, Integer> word1Pair = wordPairs.getOrDefault(word1, new HashMap<>()); HashMap<String, Integer> word1Pair = wordPairs.getOrDefault(word1, new HashMap<>());

View File

@ -16,10 +16,10 @@ public class Gradebook {
Path path = Paths.get(filename); Path path = Paths.get(filename);
try { try {
lines = new LinkedList<>(Files.readAllLines(path)); lines = new LinkedList<>(Files.readAllLines(path));
} catch (IOException e) { } catch (IOException e) {
System.out.printf("Certifique-se que o ficheiro \"%s\" está na raiz da pasta do projeto", path); System.out.printf("Certifique-se que o ficheiro \"%s\" está na raiz da pasta do projeto", path);
System.exit(1); System.exit(1);
} }
for (String line : lines) { for (String line : lines) {
String[] data = line.split("\\|"); String[] data = line.split("\\|");

View File

@ -18,10 +18,10 @@ public class EnergyUsageReport {
Path path = Paths.get(file); Path path = Paths.get(file);
try { try {
lines = new LinkedList<>(Files.readAllLines(path)); lines = new LinkedList<>(Files.readAllLines(path));
} catch (IOException e) { } catch (IOException e) {
System.out.printf("Certifique-se que o ficheiro \"%s\" está na raiz da pasta do projeto", path); System.out.printf("Certifique-se que o ficheiro \"%s\" está na raiz da pasta do projeto", path);
System.exit(1); System.exit(1);
} }
for (String line : lines) { for (String line : lines) {
String[] data = line.split("\\|"); String[] data = line.split("\\|");

View File

@ -7,27 +7,27 @@ import java.util.List;
public class EnergyUsageReportTester { public class EnergyUsageReportTester {
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
// Create an instance of the EnergyUsageReport class // Create an instance of the EnergyUsageReport class
EnergyUsageReport energyReport = new EnergyUsageReport(); EnergyUsageReport energyReport = new EnergyUsageReport();
// Load the customer data from a text file using the load() method // Load the customer data from a text file using the load() method
energyReport.load("datafiles/aula11/ex3/clients.txt"); energyReport.load("datafiles/aula11/ex3/clients.txt");
// Add one or more customers to the collection using the addCustomer() method // Add one or more customers to the collection using the addCustomer() method
Customer newCustomer = new Customer(999, new LinkedList<>(List.of(1500.0, 2000.0, 2500.0, 3000.0))); Customer newCustomer = new Customer(999, new LinkedList<>(List.of(1500.0, 2000.0, 2500.0, 3000.0)));
energyReport.addCustomer(newCustomer); energyReport.addCustomer(newCustomer);
// Remove one or more customers from the collection using the removeCustomer() method // Remove one or more customers from the collection using the removeCustomer() method
energyReport.removeCustomer(1015); energyReport.removeCustomer(1015);
// Retrieve a customer from the collection using the getCustomer() method // Retrieve a customer from the collection using the getCustomer() method
Customer retrievedCustomer = energyReport.getCustomer(1025); Customer retrievedCustomer = energyReport.getCustomer(1025);
// Calculate the total energy usage for a specific customer using the calculateTotalUsage() method // Calculate the total energy usage for a specific customer using the calculateTotalUsage() method
double totalEnergyUsage = energyReport.calculateTotalUsage(1003); double totalEnergyUsage = energyReport.calculateTotalUsage(1003);
System.out.println("Total energy usage for customer 1003: " + totalEnergyUsage); System.out.println("Total energy usage for customer 1003: " + totalEnergyUsage);
// Generate a report of all customers and their total energy usage using the generateReport() method // Generate a report of all customers and their total energy usage using the generateReport() method
energyReport.generateReport("datafiles/aula11/ex3/energy_report.txt"); energyReport.generateReport("datafiles/aula11/ex3/energy_report.txt");
} }

View File

@ -15,6 +15,16 @@ public class FlightManager {
private String delaysTable; private String delaysTable;
private String flightsNTable; private String flightsNTable;
private static Map<String, Integer> sortByValue(Map<String, Integer> unsortMap) {
List<Map.Entry<String, Integer>> list = new LinkedList<>(unsortMap.entrySet());
// Sorting the list based on values
list.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()) == 0
? o2.getKey().compareTo(o1.getKey())
: o2.getValue().compareTo(o1.getValue()));
return list.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b, LinkedHashMap::new));
}
public void loadCompanies(String filename) { public void loadCompanies(String filename) {
Scanner input; Scanner input;
try { try {
@ -23,10 +33,10 @@ public class FlightManager {
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
while(input.hasNext()){ while (input.hasNext()) {
String line = input.nextLine(); String line = input.nextLine();
String[] fields = line.split("\t"); String[] fields = line.split("\t");
if(fields.length != 2) if (fields.length != 2)
throw new RuntimeException("Invalid file format"); throw new RuntimeException("Invalid file format");
this.companies.add(new Company(fields[0], fields[1], new LinkedList<>())); this.companies.add(new Company(fields[0], fields[1], new LinkedList<>()));
} }
@ -127,14 +137,4 @@ public class FlightManager {
} }
} }
} }
private static Map<String, Integer> sortByValue(Map<String, Integer> unsortMap) {
List<Map.Entry<String, Integer>> list = new LinkedList<>(unsortMap.entrySet());
// Sorting the list based on values
list.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()) == 0
? o2.getKey().compareTo(o1.getKey())
: o2.getValue().compareTo(o1.getValue()));
return list.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b, LinkedHashMap::new));
}
} }

View File

@ -11,6 +11,14 @@ public class Time {
this.minute = minute; this.minute = minute;
} }
public static int timeToMinsInt(Time time) {
return time.hour() * 60 + time.minute();
}
public static Time minsIntToTime(int mins) {
return new Time(mins / 60, mins % 60);
}
public Time addTime(Time time) { public Time addTime(Time time) {
int newHour = hour + time.hour(); int newHour = hour + time.hour();
int newMinute = minute + time.minute(); int newMinute = minute + time.minute();
@ -34,14 +42,6 @@ public class Time {
return String.format("%02d:%02d", hour, minute); return String.format("%02d:%02d", hour, minute);
} }
public static int timeToMinsInt(Time time) {
return time.hour() * 60 + time.minute();
}
public static Time minsIntToTime(int mins) {
return new Time(mins/60, mins%60);
}
public int hour() { public int hour() {
return hour; return hour;
} }

View File

@ -24,7 +24,7 @@ public class WordCounterByInitial {
}; };
Arrays.stream(Files.readString(Path.of((new Scanner(System.in)).nextLine())) Arrays.stream(Files.readString(Path.of((new Scanner(System.in)).nextLine()))
.split("[\\s.,:';?!\\-*{}=+&/()\\[\\]”“\"]+")) .split("[\\s.,:';?!\\-*{}=+&/()\\[\\]”“\"]+"))
.filter(word -> word.length() > 2) .filter(word -> word.length() > 2)
.map(String::toLowerCase) .map(String::toLowerCase)
.forEach(word -> { .forEach(word -> {

View File

@ -26,11 +26,16 @@ public class Animal {
return id; return id;
} }
public String getName() {
return name;
}
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public String getName() {
return name; public int getWeight() {
return weight;
} }
public void setWeight(int weight) { public void setWeight(int weight) {
@ -38,8 +43,9 @@ public class Animal {
throw new IllegalArgumentException("Weight must be positive!"); throw new IllegalArgumentException("Weight must be positive!");
this.weight = weight; this.weight = weight;
} }
public int getWeight() {
return weight; public int getAge() {
return age;
} }
public void setAge(int age) { public void setAge(int age) {
@ -47,21 +53,20 @@ public class Animal {
throw new IllegalArgumentException("Age must be positive!"); throw new IllegalArgumentException("Age must be positive!");
this.age = age; this.age = age;
} }
public int getAge() {
return age; public String getSponsor() {
return sponsor;
} }
public void setSponsor(String sponsor) { public void setSponsor(String sponsor) {
this.sponsor = sponsor; this.sponsor = sponsor;
} }
public String getSponsor() {
return sponsor;
}
@Override @Override
public String toString() { public String toString() {
return String.format("ID: %d\nName: %s\nAge: %d\nWeight: %d\nSponsor: %s", this.id, this.name, this.age, this.weight, this.sponsor == null ? "None" : sponsor); return String.format("ID: %d\nName: %s\nAge: %d\nWeight: %d\nSponsor: %s", this.id, this.name, this.age, this.weight, this.sponsor == null ? "None" : sponsor);
} }
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;
@ -69,6 +74,7 @@ public class Animal {
Animal animal = (Animal) o; Animal animal = (Animal) o;
return id == animal.id && weight == animal.weight && age == animal.age && Objects.equals(name, animal.name) && Objects.equals(sponsor, animal.sponsor); return id == animal.id && weight == animal.weight && age == animal.age && Objects.equals(name, animal.name) && Objects.equals(sponsor, animal.sponsor);
} }
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(id, name, weight, age, sponsor); return Objects.hash(id, name, weight, age, sponsor);

View File

@ -1,9 +1,13 @@
package aval.aa1; package aval.aa1;
public interface IPetShelter { public interface IPetShelter {
public void addAnimal(Animal animal); void addAnimal(Animal animal);
public void removeAnimal(Animal animal);
public Animal searchForAnimal(String name); void removeAnimal(Animal animal);
public boolean sponsorAnimal(int animalId);
public void listAllAnimals(); Animal searchForAnimal(String name);
boolean sponsorAnimal(int animalId);
void listAllAnimals();
} }

View File

@ -3,7 +3,7 @@ package aval.aa1;
import java.util.Scanner; import java.util.Scanner;
public class PetShelter implements IPetShelter { public class PetShelter implements IPetShelter {
private String shelterName; private final String shelterName;
private Animal[] animals; private Animal[] animals;
public PetShelter(String shelterName) { public PetShelter(String shelterName) {
@ -17,9 +17,7 @@ public class PetShelter implements IPetShelter {
animals[0] = animal; animals[0] = animal;
} else { } else {
Animal[] newAnimals = new Animal[animals.length + 1]; Animal[] newAnimals = new Animal[animals.length + 1];
for (int i = 0; i < animals.length; i++) { System.arraycopy(animals, 0, newAnimals, 0, animals.length);
newAnimals[i] = animals[i];
}
newAnimals[newAnimals.length - 1] = animal; newAnimals[newAnimals.length - 1] = animal;
animals = newAnimals; animals = newAnimals;
} }
@ -62,6 +60,6 @@ public class PetShelter implements IPetShelter {
@Override @Override
public void listAllAnimals() { public void listAllAnimals() {
for (Animal a : animals) for (Animal a : animals)
System.out.println(a.toString()+"\n"); System.out.println(a.toString() + "\n");
} }
} }

View File

@ -1,6 +1,5 @@
package aval.aa2.Classes; package aval.aa2.Classes;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -75,6 +74,6 @@ public class Order {
items.forEach(item -> itemsStringBuilder.append(item).append(", ")); items.forEach(item -> itemsStringBuilder.append(item).append(", "));
return String.format("Order #%d: Client ID: %s, Store ID: %s, Order Datetime: %s, Express order: %b, Total cost: %.2f, Items: {%s};", return String.format("Order #%d: Client ID: %s, Store ID: %s, Order Datetime: %s, Express order: %b, Total cost: %.2f, Items: {%s};",
getId(), getClientId(), getStoreId(), getOrderDateTime().toString().replace('T', ' '), isExpressOrder(), getId(), getClientId(), getStoreId(), getOrderDateTime().toString().replace('T', ' '), isExpressOrder(),
getPrice(), itemsStringBuilder.substring(0, itemsStringBuilder.length()-2)); getPrice(), itemsStringBuilder.substring(0, itemsStringBuilder.length() - 2));
} }
} }

View File

@ -20,7 +20,7 @@ public class OrderManager {
public double calculateOrderCost(int id) { public double calculateOrderCost(int id) {
StandardOrderCostCalculator calculator = new StandardOrderCostCalculator(); StandardOrderCostCalculator calculator = new StandardOrderCostCalculator();
double cost = searchOrder(id) != null ? calculator.calculateOrderCost(searchOrder(id)): -1; double cost = searchOrder(id) != null ? calculator.calculateOrderCost(searchOrder(id)) : -1;
searchOrder(id).setPrice(cost); searchOrder(id).setPrice(cost);
return cost; return cost;
} }

View File

@ -9,7 +9,6 @@ import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -21,20 +20,20 @@ public class OrderTester {
OrderManager orderManager = new OrderManager(); OrderManager orderManager = new OrderManager();
orderManager.addOrder(new Order(new ArrayList<>(List.of(new Item[]{ orderManager.addOrder(new Order(new ArrayList<>(List.of(new Item[]{
new Item("Chocolate", 2.43) new Item("Chocolate", 2.43)
})), })),
"104", "23", LocalDateTime.of(2023, 5, 2, 14, 5), false)); "104", "23", LocalDateTime.of(2023, 5, 2, 14, 5), false));
orderManager.addOrder(new Order(new ArrayList<>(List.of(new Item[]{ orderManager.addOrder(new Order(new ArrayList<>(List.of(new Item[]{
new Item("Pastel de nata", 7.73), new Item("Pastel de nata", 7.73),
new Item("Sumo de laranja", 1.20) new Item("Sumo de laranja", 1.20)
})), })),
"114", "27", LocalDateTime.of(2023, 5, 6, 12, 4), true)); "114", "27", LocalDateTime.of(2023, 5, 6, 12, 4), true));
orderManager.addOrder(new Order(new ArrayList<>(List.of(new Item[]{ orderManager.addOrder(new Order(new ArrayList<>(List.of(new Item[]{
new Item("Galão", 1.20), new Item("Galão", 1.20),
new Item("Torrada", 1.00) new Item("Torrada", 1.00)
})), })),
"124", "1", LocalDateTime.of(2023, 5, 12, 7, 4), false)); "124", "1", LocalDateTime.of(2023, 5, 12, 7, 4), false));
orderManager.printAllOrders(); orderManager.printAllOrders();

View File

@ -0,0 +1,41 @@
package aval.atp1;
import java.time.LocalDate;
// YOU MAY ADD IMPORTS HERE
public class RainfallInfo {
private final LocalDate date;
private final String location;
private final double rainfall;
public RainfallInfo(LocalDate date, String location, double rainfall) {
this.date = date;
this.location = location;
this.rainfall = rainfall;
}
public LocalDate date() {
return date;
}
public String location() {
return location;
}
public double rainfall() {
return rainfall;
}
// YOU MAY ADD METHODS HERE
@Override
public String toString() {
return String.format("(%s, %s, %.1f)", date(), location(), rainfall());
}
@Override
public int hashCode() {
return date.hashCode() | location.hashCode() | Double.hashCode(rainfall);
}
}

View File

@ -0,0 +1,118 @@
package aval.atp1;
import java.io.FileReader;
import java.io.IOError;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.Month;
import java.util.*;
// YOU MAY ADD IMPORTS HERE
public class RainfallTest {
public static List<RainfallInfo> loadData(String filePath) {
List<RainfallInfo> data = null;
try {
// Check if file is csv
if (!filePath.endsWith(".csv")) {
return null;
}
if (!Files.exists(Paths.get(filePath))) {
return null;
}
// 1) Read the file and add RainfallInfo objects to a list.
Scanner sc = new Scanner(new FileReader(filePath));
sc.nextLine(); // skip header
while (sc.hasNextLine()) {
String[] datacomps = sc.nextLine().split(",");
LocalDate date = LocalDate.parse(datacomps[0]);
String location = datacomps[1];
double rainfall = Double.parseDouble(datacomps[2]);
if (data == null) data = new ArrayList<>();
data.add(new RainfallInfo(date, location, rainfall));
}
} catch (Exception e) {
throw new IOError(e.getCause()); // repackage as error
}
return data;
}
public static String printLocationData(List<RainfallInfo> data, String loc) {
System.out.printf("Rainfall for location %s:\n", loc);
// 2) Print rainfall values for the given location
data.stream().filter(r -> r.location().equals(loc)).forEach(System.out::println);
return "";
}
public static Map<Month, Double> totalPerMonth(List<RainfallInfo> data) {
// 3) Calculate and return a map with the total rainfall per month
Map<Month, Double> map = new HashMap<>();
data.forEach(r -> {
Month m = r.date().getMonth();
if (map.containsKey(m)) {
map.put(m, map.get(m) + r.rainfall());
} else {
map.put(m, r.rainfall());
}
});
return map;
}
public static String printMapSorted(Map<Month, Double> map) {
// 4) Print map sorted by key
map.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(e -> System.out.printf("%s: %.1f\n", e.getKey(), e.getValue()));
return "";
}
// YOU MAY ADD METHODS HERE
public static String main() {
Test.lst = null;
Test.map = null;
// Load the file data to the list
List<RainfallInfo> rainfallData = loadData("rainfall_data.csv");
System.out.printf("Data size: %d\n", rainfallData.size());
System.out.printf("Data hash: %d\n", rainfallData.hashCode());
System.out.println();
// Show data for a single town
printLocationData(rainfallData, "Braga");
System.out.println();
// Find total rainfall per month
Map<Month, Double> rainfallPerMonth = totalPerMonth(rainfallData);
// Print sorted results
printMapSorted(rainfallPerMonth);
return "";
}
public static void main(String[] args) {
main();
}
}
class Test {
static List<RainfallInfo> lst = new ArrayList<>();
static Map<Month, Double> map = new HashMap<>();
// Variables used in unit tests (DON'T USE IN YOUR IMPLEMENTATION!):
private static final LocalDate[] dates = {
LocalDate.parse("2023-03-02"),
LocalDate.parse("2023-04-17"),
LocalDate.parse("2023-05-27"),
};
static {
lst.add(new RainfallInfo(dates[2], "Aveiro", 2.2));
lst.add(new RainfallInfo(dates[1], "Braga", 3.0));
lst.add(new RainfallInfo(dates[0], "Aveiro", 0.0));
lst.add(new RainfallInfo(dates[2], "Braga", 4.0));
lst.add(new RainfallInfo(dates[1], "Aveiro", 1.1));
map.put(Month.JULY, 7.7);
map.put(Month.MAY, 5.5);
map.put(Month.JUNE, 6.6);
map.put(Month.MARCH, 3.3);
}
}

View File

@ -1,6 +0,0 @@
# Programação Orientada a Objetos
## Exercícios TP
### Resoluções para exercícios sugeridos nas aulas Teórico-Práticas
---
*Pode conter erros, caso encontre algum, crie um* [*ticket*](https://github.com/TiagoRG/uaveiro-leci/issues/new)

View File

@ -1,59 +0,0 @@
package tp_codecheck.tp01;
// Solução do exercício 2
import java.util.Scanner;
/**
This program updates an account balance, according to the table below:
Balance Interest Rate Charge
> $100,000.00 2.75 % $ 0.00
> $25,000.00 2.00 % $ 0.00
> $10,000.00 1.00 % $ 0.00
>= $0.00 0.00 % $ 0.00
< $0.00 0.00 % $ 25.00
and prints out the new balance.
*/
public class BankInterest
{
public static void main(String[] args)
{
// Define constants
final double HI_RATE = 2.75;
final double MD_RATE = 2.00;
final double LO_RATE = 1.00;
final double ZERO_RATE = 0.00;
final double DEB_CHG = -25.00;
final double HI_LIMIT = 100000.00;
final double MD_LIMIT = 25000.00;
final double LO_LIMIT = 10000.00;
final double ZERO_LIMIT = 0.00;
// Print prompt to enter a current balence
System.out.print("Enter current balance: ");
// Read balance
Scanner in = new Scanner(System.in);
double balance = in.nextDouble();
// Determine interest rate (or charge) based on current balance
// to compute new balance
// Your work here
double newBalance;
if (balance > HI_LIMIT)
newBalance = balance*(1+HI_RATE/100);
else if (balance > MD_LIMIT)
newBalance = balance*(1+MD_RATE/100);
else if (balance > LO_LIMIT)
newBalance = balance*(1+LO_RATE/100);
else if (balance < ZERO_LIMIT)
newBalance = balance+DEB_CHG;
else
newBalance = balance;
System.out.printf("%.2f\n", newBalance);
}
}

View File

@ -1,28 +0,0 @@
package tp_codecheck.tp01;
// Solução do exercício 3
public class Table {
public static void main(String[] args) {
System.out.printf("%s | %s | %s | %s\n", "n", "Hn", "log n", "Hn - log n");
int n = 1;
while (n <= 1000000) {
double f1 = harmonic(n);
double f2 = Math.log((double)n);
System.out.printf("%d | %.3f | %.3f | %.9f\n", n, f1, f2, f1-f2);
n *= 2;
}
}
/**
* Computes the Harmonic number Hn = 1 + 1/2 + 1/3 + ... + 1/n.
*/
private static double harmonic(int n) {
double sum = 0;
for (int i = 1; i <= n; i++) {
sum += 1/(float)i;
}
return sum;
}
}

View File

@ -1,29 +0,0 @@
package tp_codecheck.tp01;
// Solução do exercício 1
/*
This is a short Java program to convert
a temperature from Celsius to Fahrenheit.
*/
// You may want to import stuff here...
import java.util.Scanner;
public class Temperature {
// Create a Scanner to parse standard input:
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
// Put your code here
System.out.print("Celsius? ");
double celcius = sc.nextDouble();
double fahrenheit = 1.8*celcius+32;
System.out.printf("%f C = %f F\n", celcius, fahrenheit);
System.out.println("THE END");
}
}
// JMR 2023

View File

@ -1,23 +0,0 @@
# Exercícios de Arrays
## Ex1
```java
final int LENGHT = 100;
int[] a = new int[LENGHT];
// Code for filling a ommited
for (int = 99; i >= 0; i--)
{
System.out.print(a[i]);
if (i > 0) { System.out.print(', '); }
}
```
## Ex2
```java
int[] numbers = new int[100];
for (int k = 0; k < numbers.length; k++)
{
numbers[k] = k + 1;
}
```

View File

@ -1,27 +0,0 @@
package tp_codecheck.tp02;
import java.util.Scanner;
public class NumberOfDays {
public static void main(String[] args)
{
// Declare and initialize daysOfMonth
int[] daysOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Scanner in = new Scanner(System.in);
System.out.print("Month (1 - 12): ");
int month = in.nextInt();
System.out.print("Year: ");
int year = in.nextInt();
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
// It's a leap year. Adjust the entry for February
daysOfMonth[1]+=1;
}
// Get the number of days in the given month
int days = daysOfMonth[month-1];
System.out.println("Number of days: " + days);
}
}

View File

@ -1,17 +0,0 @@
package tp_codecheck.tp02;
public class Numbers {
public static void main(String[] args) {
// Different arrays will be substituted here.
int[] values = { 3, 1, 4, 1, 5, 9 };
int[] newValues = new int[values.length/2];
for (int x = 0; x < values.length; x+=2) {
newValues[x/2] = values[x];
}
for (int i = 0; i < newValues.length; i++) {
System.out.println(newValues[i]);
}
}
}

View File

@ -1,9 +0,0 @@
# Tabela Exercício 1 de Strings
| Question | Answer |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|
| What is the length of the string below?<br>String str = "Java Program" | 12 |
| With str as defined above, give a call to the substring method that returns the substring "gram". | str.substring(8) |
| Use the string concatenation operator to change the string variable str to contain the string "Java Programming". | str += "ming" |
| What does the following statement sequence print?<br><br>String str = "Harry";<br>int n = str.length();<br>String mystery = str.substring(0, 1) + str.substring(n - 1, n);<br>System.out.println(mystery); | Hy |
| Consider the following statement sequence. If the user provides the input John Q. Public, what is printed? If an error occurs, type error.<br><br>Scanner in = new Scanner(System.in);<br>String first = in.next();<br>String last = in.next();<br>System.out.println(last + ", " + first); | Q., John |

View File

@ -1,12 +0,0 @@
package tp_codecheck.tp02;
import java.util.Scanner;
public class Words {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String word = in.next();
word = word.charAt(word.length()-1) + word.substring(1, word.length()-1) + word.charAt(0);
System.out.println(word);
}
}

View File

@ -1,66 +0,0 @@
package tp_codecheck.tp03.part1;
/**
A simulated traffic light.
*/
public class TrafficLight1
{
private String color;
private int reds;
/**
Constructs a green traffic light.
*/
public TrafficLight1()
{
this.color = "green";
this.reds = 0;
}
/**
Constructs a traffic light.
@param initialColor the initial color "green", "yellow", or "red"
*/
public TrafficLight1(String initialColor)
{
this.color = initialColor;
this.reds = initialColor == "red" ? 1 : 0;
}
/**
Moves this traffic light to the next color.
*/
public void next()
{
switch (this.color) {
case "red":
this.color = "green";
break;
case "green":
this.color = "yellow";
break;
case "yellow":
this.color = "red";
this.reds += 1;
break;
}
}
/**
Returns the current color of this traffic light.
@return the current color
*/
public String getColor()
{
return this.color;
}
/**
Counts how often this traffic light has been red.
@return the number of times this traffic light has been red
*/
public int getReds()
{
return this.reds;
}
}

View File

@ -1,68 +0,0 @@
package tp_codecheck.tp03.part1;
/**
A simulated traffic light.
*/
public class TrafficLight2
{
private int steps;
/**
Constructs a green traffic light.
*/
public TrafficLight2()
{
this.steps = 0;
}
/**
Constructs a traffic light.
@param initialColor the initial color "green", "yellow", or "red"
*/
public TrafficLight2(String initialColor)
{
switch (initialColor) {
case "green":
this.steps = 0;
break;
case "yellow":
this.steps = 1;
break;
case "red":
this.steps = 2;
break;
}
}
/**
Moves this traffic light to the next color.
*/
public void next()
{
steps++;
}
/**
Returns the current color of this traffic light.
@return the current color
*/
public String getColor()
{
int rem = (this.steps + 1) % 3;
if (rem == 0)
return "red";
else if (rem == 1)
return "green";
else
return "yellow";
}
/**
Counts how often this traffic light has been red.
@return the number of times this traffic light has been red
*/
public int getReds()
{
return (this.steps + 1) / 3;
}
}

View File

@ -1,72 +0,0 @@
package tp_codecheck.tp03.part2;
public class RentalCar {
private boolean rented;
private static int rentedCount = 0;
private static int availableCount = 0;
/**
* Constructs a rental car.
*/
public RentalCar() {
// your work here
rented = false;
RentalCar.availableCount++;
}
/**
* Get number of cars available.
*
* @return count of cars that are available
*/
public static int numAvailable() {
// your work here
return RentalCar.availableCount;
}
/**
* Get number of cars rented.
*
* @return count of cars that are rented
*/
public static int numRented() {
// your work here
return RentalCar.rentedCount;
}
/**
* Try to rent this car.
*
* @return true if the car was successfully rented, false if it was already
* rented
*/
public boolean rentCar() {
// your work here
if (this.rented) {
return false;
} else {
this.rented = true;
RentalCar.rentedCount++;
RentalCar.availableCount--;
return true;
}
}
/**
* Return rented car.
*
* @return true if the car was previously rented and is now returned,
* false if it was not previously rented
*/
public boolean returnCar() {
// your work here
if (this.rented) {
this.rented = false;
RentalCar.rentedCount--;
RentalCar.availableCount++;
return true;
} else {
return false;
}
}
}

View File

@ -13,6 +13,27 @@ public class DateYMD {
this.year = year; this.year = year;
} }
static boolean validMonth(int month) {
return month >= 1 && month <= 12;
}
static int monthDays(int month, int year) {
if (!validMonth(month))
return -1;
int[] daysPerMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year))
return 29;
return daysPerMonth[month - 1];
}
static boolean isLeapYear(int year) {
return year % 100 == 0 ? year % 400 == 0 : year % 4 == 0;
}
public static boolean validDate(int day, int month, int year) {
return day >= 1 && day <= monthDays(month, year);
}
public void set(int day, int month, int year) { public void set(int day, int month, int year) {
if (!validDate(day, month, year)) if (!validDate(day, month, year))
throw new IllegalArgumentException("Invalid date"); throw new IllegalArgumentException("Invalid date");
@ -71,24 +92,4 @@ public class DateYMD {
public String toString() { public String toString() {
return String.format("%04d-%02d-%02d", this.year, this.month, this.day); return String.format("%04d-%02d-%02d", this.year, this.month, this.day);
} }
static boolean validMonth(int month) {
return month >= 1 && month <= 12;
}
static int monthDays(int month, int year) {
if (!validMonth(month))
return -1;
int[] daysPerMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year))
return 29;
return daysPerMonth[month - 1];
}
static boolean isLeapYear(int year) {
return year % 100 == 0 ? year % 400 == 0 : year % 4 == 0;
}
public static boolean validDate(int day, int month, int year) {
return day >= 1 && day <= monthDays(month, year);
}
} }