From b3da1725d2a52c5f4d1ef3dd2f88b6ce278d6bef Mon Sep 17 00:00:00 2001 From: Z1springer Date: Tue, 6 May 2025 14:49:31 -0700 Subject: [PATCH] Finished in class Livecode --- .../github/auberonedu/equalsLivecode/App.java | 151 ++++++++++-------- .../auberonedu/equalsLivecode/Centroid.java | 61 ++++++- .../auberonedu/equalsLivecode/Location.java | 5 + 3 files changed, 152 insertions(+), 65 deletions(-) create mode 100644 src/main/java/io/github/auberonedu/equalsLivecode/Location.java diff --git a/src/main/java/io/github/auberonedu/equalsLivecode/App.java b/src/main/java/io/github/auberonedu/equalsLivecode/App.java index 53efd3e..56e49e4 100644 --- a/src/main/java/io/github/auberonedu/equalsLivecode/App.java +++ b/src/main/java/io/github/auberonedu/equalsLivecode/App.java @@ -13,76 +13,99 @@ public static void main(String[] args) { Centroid locA = new Centroid(4, 9, "Salamander"); Centroid locB = new Centroid(4, 9, "Salamander"); - - System.out.println("Result of locA == locB " + (locA == locB)); - System.out.println("Result of locA.equals(locB) " + locA.equals(locB)); - - videoDemo(); + Centroid locC = locA; + + // represents referance equality + // System.out.println("Result of locA == locB " + (locA == locB)); + // System.out.println("Result of locA == locC " + (locA == locC)); + // represents value equality + // System.out.println("Result of locA.equals(locB) " + locA.equals(locB)); + // System.out.println("Result of locA.equals(locA) " + locA.equals(locA)); + + // Set centroids = new HashSet<>(); + // System.out.println(locA.hashCode()); + // System.out.println(locB.hashCode()); + // centroids.add(locA); + // centroids.add(locB); + // System.out.println(centroids.size()); + + Location a = new Location(5, 1, "food"); + Location b = new Location(5, 1, "food"); + + System.out.println(a.equals(b)); + System.out.println(a.hashCode()); + System.out.println(b.hashCode()); + + // videoDemo(); } - // We will look at this a bit later in the livecode, please ignore for first part + // We will look at this a bit later in the livecode, please ignore for first + // part public static void videoDemo() { List video = List.of( - // Frame 0: Salamander is at [2, 3] (all locations in [row, column] format) - // Food is at [4, 5] - new char[][]{{'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','s','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','f','.',}, - {'.','.','.','.','.','.','.',}}, - - // Frame 2: Salamander is at [2, 4] - // Food is at [4, 5] - new char[][]{{'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','s','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','f','.',}, - {'.','.','.','.','.','.','.',}}, - - // Frame 3: Salamander is at [2, 4] (it didn't move) - // Food is at [4, 5] - new char[][]{{'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','s','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','f','.',}, - {'.','.','.','.','.','.','.',}}, - - - // Frame 4: Salamander is at [3, 4] - // Food is at [4, 5] - new char[][]{{'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','s','.','.',}, - {'.','.','.','.','.','f','.',}, - {'.','.','.','.','.','.','.',}}, - - // Frame 5: Salamander is at [4, 4] - // Food is at [4, 5] - new char[][]{{'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','s','f','.',}, - {'.','.','.','.','.','.','.',}}, - - // Frame 6: Salamander is at [4, 5] - // No food present (the salamander ate it!) - new char[][]{{'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','.','.',}, - {'.','.','.','.','.','s','.',}, - {'.','.','.','.','.','.','.',}} - ); + // Frame 0: Salamander is at [2, 3] (all locations in [row, column] format) + // Food is at [4, 5] + new char[][] { + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', 's', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', 'f', '.', }, + { '.', '.', '.', '.', '.', '.', '.', } }, + + // Frame 2: Salamander is at [2, 4] + // Food is at [4, 5] + new char[][] { + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', 's', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', 'f', '.', }, + { '.', '.', '.', '.', '.', '.', '.', } }, + + // Frame 3: Salamander is at [2, 4] (it didn't move) + // Food is at [4, 5] + new char[][] { + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', 's', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', 'f', '.', }, + { '.', '.', '.', '.', '.', '.', '.', } }, + + // Frame 4: Salamander is at [3, 4] + // Food is at [4, 5] + new char[][] { + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', 's', '.', '.', }, + { '.', '.', '.', '.', '.', 'f', '.', }, + { '.', '.', '.', '.', '.', '.', '.', } }, + + // Frame 5: Salamander is at [4, 4] + // Food is at [4, 5] + new char[][] { + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', 's', 'f', '.', }, + { '.', '.', '.', '.', '.', '.', '.', } }, + + // Frame 6: Salamander is at [4, 5] + // No food present (the salamander ate it!) + new char[][] { + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', '.', '.', }, + { '.', '.', '.', '.', '.', 's', '.', }, + { '.', '.', '.', '.', '.', '.', '.', } }); Map legend = Map.of( - "Salamander", 's', - "Food", 'f' - ); + "Salamander", 's', + "Food", 'f'); Finder finder = new Finder(legend); Set salamanderLocations = finder.allLocations(video, "Salamander"); diff --git a/src/main/java/io/github/auberonedu/equalsLivecode/Centroid.java b/src/main/java/io/github/auberonedu/equalsLivecode/Centroid.java index b0e343a..719397e 100644 --- a/src/main/java/io/github/auberonedu/equalsLivecode/Centroid.java +++ b/src/main/java/io/github/auberonedu/equalsLivecode/Centroid.java @@ -4,7 +4,7 @@ public class Centroid { private int r; private int c; private String name; - + public Centroid(int r, int c, String name) { this.r = r; this.c = c; @@ -22,4 +22,63 @@ public int getC() { public String getName() { return name; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + r; + result = prime * result + c; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Centroid other = (Centroid) obj; + if (r != other.r) + return false; + if (c != other.c) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + // @Override + // public boolean equals(Object o) { + // if (o == null) { + // return false; + // } else if (getClass() != o.getClass()) { + // return false; + // } + // // Before casting, o is recognized as an Object and thus r and c cannot be + // // accessed + // Centroid other = (Centroid) o; + // if (r != other.r) { + // return false; + // } else if (c != other.c) { + // return false; + // } else if (name == null) { + // if (other.name == null) { + // return true; + // } else if (other.name != null) { + // return false; + // } + // } else if (!name.equals(other.name)) { + // return false; + // } + + // return true; + // } + } diff --git a/src/main/java/io/github/auberonedu/equalsLivecode/Location.java b/src/main/java/io/github/auberonedu/equalsLivecode/Location.java new file mode 100644 index 0000000..ac8f04c --- /dev/null +++ b/src/main/java/io/github/auberonedu/equalsLivecode/Location.java @@ -0,0 +1,5 @@ +package io.github.auberonedu.equalsLivecode; + +public record Location(int x, int y, String label) { + +}