[POO] aula04 finished
This commit is contained in:
parent
ec6ffca1f2
commit
4d628f539d
|
@ -18,4 +18,8 @@ class Car {
|
||||||
this.kms += distance;
|
this.kms += distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s %s, %d, kms: %d", this.make, this.model, this.year, this.kms);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
package aula04;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class CarDemo {
|
||||||
|
|
||||||
|
static Scanner sc = new Scanner(System.in);
|
||||||
|
|
||||||
|
static int registerCars(Car[] cars) {
|
||||||
|
// TODO: pede dados dos carros ao utilizador e acrescenta ao vetor
|
||||||
|
// registo de carros termina quando o utilizador inserir uma linha vazia
|
||||||
|
// devolve número de carros registados
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
boolean validData = false;
|
||||||
|
while (!validData) {
|
||||||
|
System.out.print("Insira dados do carro (marca modelo ano quilómetros): ");
|
||||||
|
String input = sc.nextLine();
|
||||||
|
if (input.isEmpty()) return i;
|
||||||
|
String[] parts = input.split(" ");
|
||||||
|
validData = validateData(parts);
|
||||||
|
if (!validData) {
|
||||||
|
System.out.println("Dados mal formatados. Tente novamente.");
|
||||||
|
} else {
|
||||||
|
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]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean validateData(String[] parts) {
|
||||||
|
if (parts.length < 4) return false;
|
||||||
|
try {
|
||||||
|
Integer.parseInt(parts[parts.length-1]);
|
||||||
|
if (String.format("%d", Integer.parseInt(parts[parts.length-2])).length() != 4) return false;
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void registerTrips(Car[] cars, int numCars) {
|
||||||
|
// TODO: pede dados das viagens ao utilizador e atualiza informação do carro
|
||||||
|
// registo de viagens termina quando o utilizador inserir uma linha vazia
|
||||||
|
String input;
|
||||||
|
while (true) {
|
||||||
|
System.out.print("Registe uma viagem no formato \"carro:distância\": ");
|
||||||
|
if ((input = sc.nextLine()).isEmpty()) break;
|
||||||
|
String[] parts = input.split(":");
|
||||||
|
if (parts.length != 2) {
|
||||||
|
System.out.println("Dados mal formatados. Tente novamente.");
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
int car = Integer.parseInt(parts[0]);
|
||||||
|
int distance = Integer.parseInt(parts[1]);
|
||||||
|
if (car < 0 || car >= numCars || distance <= 0) {
|
||||||
|
System.out.println("Dados mal formatados. Tente novamente.");
|
||||||
|
} else {
|
||||||
|
cars[car].drive(distance);
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.out.println("Dados mal formatados. Tente novamente.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void listCars(Car[] cars) {
|
||||||
|
System.out.println("\nCarros registados: ");
|
||||||
|
// TODO: lista todos os carros registados
|
||||||
|
// Exemplo de resultado
|
||||||
|
// Carros registados:
|
||||||
|
// Toyota Camry, 2010, kms: 234346
|
||||||
|
// Renault Megane Sport Tourer, 2015, kms: 32536
|
||||||
|
for (Car car : cars) {
|
||||||
|
if (car != null) {
|
||||||
|
System.out.println(car);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
Car[] cars = new Car[10];
|
||||||
|
|
||||||
|
int numCars = registerCars(cars);
|
||||||
|
|
||||||
|
if (numCars>0) {
|
||||||
|
listCars(cars);
|
||||||
|
registerTrips(cars, numCars);
|
||||||
|
listCars(cars);
|
||||||
|
}
|
||||||
|
|
||||||
|
sc.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,9 @@
|
||||||
package aula04;
|
package aula04;
|
||||||
|
|
||||||
|
import utils.UserInput;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
class Circle {
|
class Circle {
|
||||||
public double radius;
|
public double radius;
|
||||||
|
|
||||||
|
@ -41,6 +45,10 @@ class Triangle {
|
||||||
|
|
||||||
public Triangle(double side1, double side2, double side3) {
|
public Triangle(double side1, double side2, double side3) {
|
||||||
assert side1 > 0 && side2 > 0 && side3 > 0;
|
assert side1 > 0 && side2 > 0 && side3 > 0;
|
||||||
|
if((Math.abs(side2 - side3) < side1 || side1 < side2 + side3
|
||||||
|
|| Math.abs(side1 - side3) < side2 || side2 < side1 + side3
|
||||||
|
|| Math.abs(side1 - side2) < side3 || side3 < side1 + side2))
|
||||||
|
throw new IllegalArgumentException("Triangle cannot be created with those sides.");
|
||||||
this.side1 = side1;
|
this.side1 = side1;
|
||||||
this.side2 = side2;
|
this.side2 = side2;
|
||||||
this.side3 = side3;
|
this.side3 = side3;
|
||||||
|
@ -52,6 +60,10 @@ class Triangle {
|
||||||
|
|
||||||
public void setSides(double side1, double side2, double side3) {
|
public void setSides(double side1, double side2, double side3) {
|
||||||
assert side1 > 0 && side2 > 0 && side3 > 0;
|
assert side1 > 0 && side2 > 0 && side3 > 0;
|
||||||
|
if((Math.abs(side2 - side3) < side1 || side1 < side2 + side3
|
||||||
|
|| Math.abs(side1 - side3) < side2 || side2 < side1 + side3
|
||||||
|
|| Math.abs(side1 - side2) < side3 || side3 < side1 + side2))
|
||||||
|
throw new IllegalArgumentException("Triangle cannot be created with those sides.");
|
||||||
this.side1 = side1;
|
this.side1 = side1;
|
||||||
this.side2 = side2;
|
this.side2 = side2;
|
||||||
this.side3 = side3;
|
this.side3 = side3;
|
||||||
|
@ -114,5 +126,72 @@ class Rectangle {
|
||||||
|
|
||||||
public class Shapes {
|
public class Shapes {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
Scanner sin = new Scanner(System.in);
|
||||||
|
|
||||||
|
// Circle
|
||||||
|
|
||||||
|
System.out.print("Raio do circulo 1: ");
|
||||||
|
double radius = UserInput.getPositiveNumber(sin);
|
||||||
|
Circle c1 = new Circle(radius);
|
||||||
|
System.out.print("Raio do circulo 2: ");
|
||||||
|
radius = UserInput.getPositiveNumber(sin);
|
||||||
|
Circle c2 = new Circle(radius);
|
||||||
|
|
||||||
|
System.out.println("Circulo 1: " + c1);
|
||||||
|
System.out.println("Area do circulo 1: " + c1.getArea());
|
||||||
|
System.out.println("Perimetro do circulo 1: " + c1.getPerimeter());
|
||||||
|
System.out.println("Circulo 2: " + c2);
|
||||||
|
System.out.println("Area do circulo 2: " + c2.getArea());
|
||||||
|
System.out.println("Perimetro do circulo 2: " + c2.getPerimeter());
|
||||||
|
System.out.println("Circulo 1 e igual ao circulo 2? " + c1.equals(c2));
|
||||||
|
|
||||||
|
|
||||||
|
// Triangle
|
||||||
|
|
||||||
|
System.out.print("\n\n\nLado 1 do triangulo 1: ");
|
||||||
|
double side1 = UserInput.getPositiveNumber(sin);
|
||||||
|
System.out.print("Lado 2 do triangulo 1: ");
|
||||||
|
double side2 = UserInput.getPositiveNumber(sin);
|
||||||
|
System.out.print("Lado 3 do triangulo 1: ");
|
||||||
|
double side3 = UserInput.getPositiveNumber(sin);
|
||||||
|
Triangle t1 = new Triangle(side1, side2, side3);
|
||||||
|
System.out.print("Lado 1 do triangulo 2: ");
|
||||||
|
side1 = UserInput.getPositiveNumber(sin);
|
||||||
|
System.out.print("Lado 2 do triangulo 2: ");
|
||||||
|
side2 = UserInput.getPositiveNumber(sin);
|
||||||
|
System.out.print("Lado 3 do triangulo 2: ");
|
||||||
|
side3 = UserInput.getPositiveNumber(sin);
|
||||||
|
Triangle t2 = new Triangle(side1, side2, side3);
|
||||||
|
|
||||||
|
System.out.println("Triangulo 1: " + t1);
|
||||||
|
System.out.println("Area do triangulo 1: " + t1.getArea());
|
||||||
|
System.out.println("Perimetro do triangulo 1: " + t1.getPerimeter());
|
||||||
|
System.out.println("Triangulo 2: " + t2);
|
||||||
|
System.out.println("Area do triangulo 2: " + t2.getArea());
|
||||||
|
System.out.println("Perimetro do triangulo 2: " + t2.getPerimeter());
|
||||||
|
System.out.println("Triangulo 1 e igual ao triangulo 2? " + t1.equals(t2));
|
||||||
|
|
||||||
|
|
||||||
|
// Rectangle
|
||||||
|
System.out.print("\n\n\nLado 1 do retangulo 1: ");
|
||||||
|
side1 = UserInput.getPositiveNumber(sin);
|
||||||
|
System.out.print("Lado 2 do retangulo 1: ");
|
||||||
|
side2 = UserInput.getPositiveNumber(sin);
|
||||||
|
Rectangle r1 = new Rectangle(side1, side2);
|
||||||
|
System.out.print("Lado 1 do retangulo 2: ");
|
||||||
|
side1 = UserInput.getPositiveNumber(sin);
|
||||||
|
System.out.print("Lado 2 do retangulo 2: ");
|
||||||
|
side2 = UserInput.getPositiveNumber(sin);
|
||||||
|
Rectangle r2 = new Rectangle(side1, side2);
|
||||||
|
|
||||||
|
System.out.println("Retangulo 1: " + r1);
|
||||||
|
System.out.println("Area do retangulo 1: " + r1.getArea());
|
||||||
|
System.out.println("Perimetro do retangulo 1: " + r1.getPerimeter());
|
||||||
|
System.out.println("Retangulo 2: " + r2);
|
||||||
|
System.out.println("Area do retangulo 2: " + r2.getArea());
|
||||||
|
System.out.println("Perimetro do retangulo 2: " + r2.getPerimeter());
|
||||||
|
System.out.println("Retangulo 1 e igual ao retangulo 2? " + r1.equals(r2));
|
||||||
|
|
||||||
|
sin.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@ public class SimpleCarDemo {
|
||||||
|
|
||||||
System.out.println();
|
System.out.println();
|
||||||
System.out.println("Carros registados: ");
|
System.out.println("Carros registados: ");
|
||||||
for (int i=0; i<cars.length; i++) {
|
for (Car car : cars) {
|
||||||
System.out.printf("%s %s, %d, kms: %d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].kms);
|
System.out.println(car);
|
||||||
}
|
}
|
||||||
System.out.println();
|
System.out.println();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue