lots of exercises in java... from https://github.com/exercism/java

QueenAttackCalculator.java 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. public final class QueenAttackCalculator {
  2. private final BoardCoordinate whiteQueenCoordinate;
  3. private final BoardCoordinate blackQueenCoordinate;
  4. public QueenAttackCalculator(final BoardCoordinate whiteQueenCoordinate, final BoardCoordinate blackQueenCoordinate)
  5. throws IllegalArgumentException {
  6. this.whiteQueenCoordinate = whiteQueenCoordinate;
  7. this.blackQueenCoordinate = blackQueenCoordinate;
  8. validateInputs();
  9. }
  10. public boolean canQueensAttackOneAnother() {
  11. return queensShareFile() || queensShareRank() || queensShareDiagonal();
  12. }
  13. private void validateInputs() throws IllegalArgumentException {
  14. if (whiteQueenCoordinate == null || blackQueenCoordinate == null) {
  15. throw new IllegalArgumentException("You must supply valid board coordinates for both Queens.");
  16. }
  17. if (queensShareBoardCoordinate()) {
  18. throw new IllegalArgumentException("Queens may not occupy the same board coordinate.");
  19. }
  20. }
  21. private boolean queensShareRank() {
  22. return differenceBetweenRanks() == 0;
  23. }
  24. private boolean queensShareFile() {
  25. return differenceBetweenFiles() == 0;
  26. }
  27. private boolean queensShareBoardCoordinate() {
  28. return queensShareRank() && queensShareFile();
  29. }
  30. private boolean queensShareDiagonal() {
  31. return differenceBetweenRanks() == differenceBetweenFiles();
  32. }
  33. private int differenceBetweenRanks() {
  34. return Math.abs(whiteQueenCoordinate.getRank() - blackQueenCoordinate.getRank());
  35. }
  36. private int differenceBetweenFiles() {
  37. return Math.abs(whiteQueenCoordinate.getFile() - blackQueenCoordinate.getFile());
  38. }
  39. }