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

Robot.java 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. final class Robot {
  2. private GridPosition gridPosition;
  3. private Orientation orientation;
  4. Robot(final GridPosition initialGridPosition, final Orientation initialOrientation) {
  5. this.gridPosition = initialGridPosition;
  6. this.orientation = initialOrientation;
  7. }
  8. GridPosition getGridPosition() {
  9. return gridPosition;
  10. }
  11. Orientation getOrientation() {
  12. return orientation;
  13. }
  14. Robot advance() {
  15. switch (orientation) {
  16. case NORTH:
  17. gridPosition = new GridPosition(gridPosition.x, gridPosition.y + 1);
  18. break;
  19. case EAST:
  20. gridPosition = new GridPosition(gridPosition.x + 1, gridPosition.y);
  21. break;
  22. case SOUTH:
  23. gridPosition = new GridPosition(gridPosition.x, gridPosition.y - 1);
  24. break;
  25. case WEST:
  26. gridPosition = new GridPosition(gridPosition.x - 1, gridPosition.y);
  27. break;
  28. }
  29. return this;
  30. }
  31. Robot simulate(final String instructions) {
  32. for (final char instruction : instructions.toCharArray()) {
  33. switch (instruction) {
  34. case 'A':
  35. advance();
  36. break;
  37. case 'R':
  38. turnRight();
  39. break;
  40. case 'L':
  41. turnLeft();
  42. break;
  43. default:
  44. throw new IllegalArgumentException(String.format("Invalid instruction: '%s'", instruction));
  45. }
  46. }
  47. return this;
  48. }
  49. Robot turnLeft() {
  50. final int newOrientationOrdinal = Math.floorMod(orientation.ordinal() - 1, Orientation.values().length);
  51. orientation = Orientation.values()[newOrientationOrdinal];
  52. return this;
  53. }
  54. Robot turnRight() {
  55. final int newOrientationOrdinal = Math.floorMod(orientation.ordinal() + 1, Orientation.values().length);
  56. orientation = Orientation.values()[newOrientationOrdinal];
  57. return this;
  58. }
  59. }