Мне было дано следующее назначение:
Создать матрицу 10x10 в виде 2D-массива. Предположим, что робот находится в положении [0, 0]. Теперь случайным образом создайте ход. Движение может привести робота к одному из восьми возможных соседних слотов - {вверх, вниз, влево, вправо, влево-вверх, влево-вниз, вправо-вверх и вправо-вниз}} -эти слоты представлены {1, 2, 3, 4, 5, 6, 7, 8}. Однако в [0, 0] у робота есть только три возможных слота для перемещения - вправо, вниз, вправо-вниз. Создайте другого робота по имени R2 и поместите его в [9, 9]. Теперь случайным образом сгенерируйте целое число в диапазоне от [1 до 8]. Это первое случайное целое число соответствует возможному ходу робота R1. Если ход действителен, то переместите R1 в свой новый слот. Ход недействителен, если он выводит робота за пределы матрицы [10x10]. Если движение недопустимо, продолжайте генерировать случайные целые числа, пока не будет найдено правильное движение. Повторите эту процедуру для второго робота R2. Если оба R1 и R2 находятся в одном и том же слоте, остановитесь, напечатайте последний слот, напечатайте последовательность случайных чисел, которые привели R1 в этот слот, и напечатайте последовательность случайных чисел, которые привели R2 в один и тот же слот. Реализуйте эту программу с помощью класса Robot и подкласса MovingRobot.
Методы, переменные, типы возвращаемых данных и параметры задаются инструктором и не могут быть изменены.
```public class Robot {
int x;
int y;
public static final int DOWN = 1;
public static final int LEFT = 2;
public static final int LEFT_DOWN_CORNER = 3;
public static final int LEFT_UP_CORNER = 4;
public static final int RIGHT = 5;
public static final int RIGHT_DOWN_CORNER = 6;
public static final int RIGHT_UP_CORNER = 7;
public static final int UP = 8;
//getters
public int getX() {
return x;
}
public int getY() {
return y;
}
//setters
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
//constructor
public Robot(int x, int y) {
this.x = x;
this.y = y;
}
}//end Robot class
import java.util.ArrayList;
public class MovingRobot extends Robot{
ArrayList<Integer> moves;
int nextMove;
//constructor
public MovingRobot(int x, int y){
super(x, y);
}
public boolean validateNextMove() {
if ((nextMove == LEFT || nextMove == LEFT_UP_CORNER || nextMove == LEFT_DOWN_CORNER) && (this.getY() == 0))
return false;
if ((nextMove == RIGHT || nextMove == RIGHT_UP_CORNER || nextMove == RIGHT_DOWN_CORNER) && (this.getY() == 9))
return false;
if ((nextMove == UP || nextMove == LEFT_UP_CORNER || nextMove == RIGHT_UP_CORNER) && (this.getX() == 0))
return false;
if ((nextMove == DOWN || nextMove == LEFT_DOWN_CORNER || nextMove == RIGHT_DOWN_CORNER) && (this.getX() == 9))
return false;
else
return true;
}
public int generateNextMove(){
return (int)(Math.random()*8) + 1;
}
public static boolean sameSlot(Robot r1, Robot r2){
if ((r1.getX() == r2.getX()) && (r1.getY() == r2.getY()))
return true;
else
return false;
}
public String printMoves(){
String movesReport = "";
for (var nextMove: moves) {
if (nextMove == DOWN) movesReport += "Down, ";
if (nextMove == LEFT) movesReport += "Left, ";
if (nextMove == LEFT_DOWN_CORNER) movesReport += "Left Down Corner, ";
if (nextMove == LEFT_UP_CORNER) movesReport += "Left Up Corner, ";
if (nextMove == RIGHT) movesReport += "Right, ";
if (nextMove == RIGHT_DOWN_CORNER) movesReport += "Right Down Corner, ";
if (nextMove == RIGHT_UP_CORNER) movesReport += "Right Up Corner, ";
if (nextMove == UP) movesReport += "Up, ";
}
return movesReport;
}
public void move(){
do nextMove = generateNextMove();
while (validateNextMove() == false);
switch (nextMove) {
case 1: //LEFT
this.x -= 1;
moves.add(nextMove);
break;
case 2: //LEFT DOWN
this.x -= 1;
this.y += 1;
moves.add(nextMove);
break;
case 3: //LEFT UP
this.x -= 1;
this.y -= 1;
moves.add(nextMove);
break;
case 4: //RIGHT
this.x += 1;
moves.add(nextMove);
break;
case 5: // RIGHT DOWN
this.x += 1;
this.y += 1;
moves.add(nextMove);
break;
case 6: // RIGHT UP
this.x += 1;
this.y -= 1;
moves.add(nextMove);
break;
case 7: // UP
this.y -= 1;
moves.add(nextMove);
break;
case 8: //DOWN
this.y += 1;
moves.add(nextMove);
break;
default: System.out.print("invalid move");
}
}
public static void main(String[] args) {
var r1 = new MovingRobot(0,0);
var r2 = new MovingRobot(9, 9);
r1.moves = new ArrayList<>();
r2.moves = new ArrayList<>();
while (!sameSlot(r1, r2)) {
r1.move();
if (!sameSlot(r1, r2)) {
r2.move();
}
}
System.out.println("Robot 1's moves were: " + r1.printMoves());
System.out.println("Robot 2's moves were: " + r2.printMoves());
}
}```
Я являюсьполучение:
Исключение в потоке "main" java.lang.OutOfMemoryError: пространство кучи Java в java.base / java.util.Arrays.copyOf (Arrays.java:3721) в java.base /java.util.Arrays.copyOf (Arrays.java:3690) в java.base / java.util.ArrayList.grow (ArrayList.java:237) в java.base / java.util.ArrayList.grow (ArrayList.java:242) в java.base / java.util.ArrayList.add (ArrayList.java:485) в java.base / java.util.ArrayList.add (ArrayList.java:498) в MovingRobot.move (MovingRobot.java:60) в MovingRobot.main (MovingRobot.java:97)