public class Point { private int x; private int y; public Point (int x, int y) { this.setX(x); this.setY(y); } public Point (String str) { if (Point.isValidSyntax(str)) { this.setX(str.charAt(0)); this.setY(Integer.parseInt(str.substring(1))); } else { throw new IllegalArgumentException("String ist keine gültige Koordinate"); } } @Override public String toString() { return (char) ('A' + this.x) + String.valueOf(this.y); } public int getX() { return x; } public int getY() { return y; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } public void setX(char c) { this.x = c - 'A'; } public static boolean isValidSyntax(String str) { return str.matches("^[A-Z]\\d+$"); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || this.getClass() != o.getClass()) return false; Point p = (Point)o; return p.getX() == this.getX() && p.getY() == this.getY(); } public boolean neighbours(Point other) { if (other == null) return false; return (int)Math.abs(this.getX() - other.getX()) <= 1 && (int)Math.abs(this.getY() - other.getY()) <= 1; } }