Я пишу ответ на вопрос CCC в java, но каждый раз, когда я что-то вводю, это просто требует бесконечного ввода. Кто-нибудь может мне помочь остановить это?
Ваша задача - написать программу, которая проверяет правильность плана скважины, проверяя, что ствол скважины не пересекает себя. Двумерный план скважины используется для представления вертикального поперечного сечения скважины, и этот план скважины включает некоторое бурение, которое началось с (0, −1)
и двигалось к (−1, −5)
. Вы закодируете в своей программе текущий план скважины, показанный на рисунке ниже:
Формат ввода:
Вход состоит из последовательности пар команд бурения. Пара команд сверления начинается с одного из четырех указателей поворота (d
для спада, u
для вверх, l
для левого и r
для правого), за которым следует положительная длина. Существует дополнительная команда сверления, обозначенная q (quit), за которой следует целое число, которое указывает, что программа должна остановить выполнение. Вы можете предположить, что входной сигнал таков, что точка сверления не будет:
- подниматься над землей, или
- не будет более чем на 200 единиц ниже уровня земли, или
- быть на расстоянии более 200 единиц слева от исходной начальной точки, а также
- на расстоянии более 200 единиц справа от исходной начальной точки.
Формат вывода:
Программа должна продолжать следить за бурением, предполагая, что скважина, показанная на рисунке, уже сделана. Как мы видим, (−1, −5)
- это начальная позиция вашей программы. После каждой команды программа должна вывести одну строку с координатами новой позиции сверла и один из двух комментариев safe
, если пересечения с предыдущей позицией не было, или DANGER
, если былопересечение с предыдущим местоположением скважины. После обнаружения и сообщения о самопересечении ваша программа должна остановиться.
Мой код:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> holeX = new ArrayList<>();
ArrayList<Integer> holeY = new ArrayList<>();
String direction;
boolean danger = false;
holeX.add(0);
holeX.add(0);
for (int i = 0; i < 4; i++) {
holeX.add(i);
}
holeX.add(3);
holeX.add(3);
holeX.add(4);
holeX.add(5);
holeX.add(5);
holeX.add(5);
holeX.add(6);
for (int i = -3; i > -8; i--) {
holeX.add(7);
}
for (int i = 6; i > -2; i--) {
holeX.add(i);
}
holeX.add(-1);
holeX.add(-1);
holeY.add(-1);
holeY.add(-2);
for (int i = 0; i < 4; i++) {
holeY.add(-3);
}
holeY.add(-4);
holeY.add(-5);
holeY.add(-5);
holeY.add(-5);
holeY.add(-4);
holeY.add(-3);
holeY.add(-3);
for (int i = -3; i > -8; i--) {
holeY.add(i);
}
for (int i = 6; i > -2; i--) {
holeY.add(-7);
}
holeY.add(-6);
holeY.add(-5);
do {
direction = sc.next();
int steps = sc.nextInt();
switch (direction) {
case "d":
for (int i = holeY.get(holeY.size() - 1); i > holeY.get(holeY.size() - 1) - steps; i--) {
holeY.add(i);
for (int j = 0; j < holeY.size() - 2; j++) {
if (Objects.equals(holeY.get(holeY.size() - 1), holeY.get(j)) && Objects.equals(holeX.get(holeX.size() - 1), holeX.get(j))) {
danger = true;
}
}
}
case "u":
for (int i = holeY.get(holeY.size() - 1); i < holeY.get(holeY.size() - 1) + steps; i++) {
holeY.add(i);
for (int j = 0; j < holeY.size() - 2; j++) {
if (Objects.equals(holeY.get(holeY.size() - 1), holeY.get(j)) && Objects.equals(holeX.get(holeX.size() - 1), holeX.get(j))) {
danger = true;
}
}
}
break;
case "l":
for (int i = holeX.get(holeX.size() - 1); i > holeX.get(holeX.size() - 1) - steps; i--) {
holeX.add(i);
for (int j = 0; j < holeX.size() - 2; j++) {
if (Objects.equals(holeX.get(holeX.size() - 1), holeX.get(j)) && i == holeY.get(j)) {
danger = true;
}
}
}
break;
case "r":
for (int i = holeX.get(holeX.size() - 1); i < holeX.get(holeX.size() - 1) + steps; i++) {
holeX.add(i);
for (int j = 0; j < holeX.size() - 2; j++) {
if (Objects.equals(holeX.get(holeX.size() - 1), holeX.get(j)) && i == holeY.get(j)) {
danger = true;
}
}
}
break;
default:
break;
}
if (danger == false && !"q".equals(direction)) {
System.out.println(holeX.get(holeX.size() - 1) + " " + holeY.get(holeY.size() - 1) + "safe");
System.out.print(" safe");
} else {
System.out.println(holeX.get(holeX.size() - 1) + " " + holeY.get(holeY.size() - 1) + " DANGER");
}
} while (!"q".equals(direction) && danger == false);
}
holeX
и holeY
- координаты пробуренной области.
Ввод:
l 2
d 2
r 1
q 0
Выход:
-3 -5 safe
-3 -7 safe
-2 -7 safe