From d2c2cedf4d2389ea21cecc13d26676a1748403fd Mon Sep 17 00:00:00 2001 From: Nicholas Maximilian Gabriel Schmidtke <3003668@stud.hs-mannheim.de> Date: Mon, 15 Apr 2024 10:34:49 +0200 Subject: [PATCH] Dateien nach "/" hochladen --- Alien.java | 100 ++++++++++++++++++++++++++++++++++++++++++++ AlienCloneTest.java | 36 ++++++++++++++++ Raumanzug.java | 75 +++++++++++++++++++++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 Alien.java create mode 100644 AlienCloneTest.java create mode 100644 Raumanzug.java diff --git a/Alien.java b/Alien.java new file mode 100644 index 0000000..be6ddff --- /dev/null +++ b/Alien.java @@ -0,0 +1,100 @@ +package pr2.object.clone_alien; + +/** + * Ein Alien. + */ +public class Alien implements Cloneable { + + /** + * Name des Aliens. + */ + private final String name; + + /** + * Raumanzug des Aliens. + */ + private Raumanzug raumanzug; + + /** + * Erzeugt ein neues Alien. + * + * @param name Name des Aliens. + * @param raumanzug Anzug. + */ + public Alien(String name, Raumanzug raumanzug) { + this.name = name; + this.raumanzug = raumanzug; + } + + /** + * Gibt den Namen des Aliens zurück. + * + * @return Name des Aliens. + */ + public String getName() { + return name; + } + + /** + * Gibt den Anzug zurück. + * + * @return der Anzug. + */ + public Raumanzug getAnzug() { + return raumanzug; + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((raumanzug + == null) ? 0 : raumanzug.hashCode()); + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Alien other = (Alien) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } + else if (!name.equals(other.name)) { + return false; + } + if (raumanzug == null) { + return other.raumanzug == null; + } + else { + return raumanzug.equals(other.raumanzug); + } + } + + /** + * @see java.lang.Object#clone() + */ + @Override + public Object clone() throws CloneNotSupportedException { + Alien o = (Alien) super.clone(); + o.raumanzug = (Raumanzug) raumanzug.clone(); + return o; + } +} diff --git a/AlienCloneTest.java b/AlienCloneTest.java new file mode 100644 index 0000000..22d652d --- /dev/null +++ b/AlienCloneTest.java @@ -0,0 +1,36 @@ +package pr2.object.clone_alien; + +import org.junit.jupiter.api.Test; + + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotSame; + +/** + * Test für die Clone-Methoden. + */ +public class AlienCloneTest { + + /** + * Test-Methode. + * + * @throws CloneNotSupportedException wird geworfen, wenn clone_alien + * nicht korrekt implementiert wurde. + */ + @Test + void testClone() throws CloneNotSupportedException { + Raumanzug r1 = new Raumanzug(); + Alien a1 = new Alien("Predator", r1); + + Alien a2 = (Alien) a1.clone(); + Raumanzug r2 = a2.getAnzug(); + + assertNotSame(a1, a2); + assertNotSame(r1, r2); + + assertEquals(a1, a2); + assertEquals(r1, r2); + assertEquals(r1.getSauerstoffVorrat(), r2.getSauerstoffVorrat(), + 0.0001); + } +} diff --git a/Raumanzug.java b/Raumanzug.java new file mode 100644 index 0000000..98f9c83 --- /dev/null +++ b/Raumanzug.java @@ -0,0 +1,75 @@ +package pr2.object.clone_alien; + +/** + * Ein Raumanzug. + */ +public class Raumanzug implements Cloneable { + + /** + * Sauerstoffvorrat, der noch im Raumanzug ist. + */ + private double sauerstoffVorrat; + + /** + * Ertzeugt einen neuen Raumanzug. + */ + public Raumanzug() { + sauerstoffVorrat = Math.random(); + } + + /** + * Sauerstoffvorrat im Anzug. + * + * @return Vorrat in % (0.0-1.0) + */ + public double getSauerstoffVorrat() { + return sauerstoffVorrat; + } + + /** + * Tankt den Anzug auf. + */ + public void auftanken() { + sauerstoffVorrat = 1.0; + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(sauerstoffVorrat); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Raumanzug other = (Raumanzug) obj; + return Double.doubleToLongBits(sauerstoffVorrat) + == Double.doubleToLongBits(other.sauerstoffVorrat); + } + + /** + * @see java.lang.Object#clone() + */ + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } +}