Как мы можем реализовать гаражную дверь, отслеживая, каким было последнее направление движения?JAVA

Программисты JAVA общаются здесь
Anonymous
Как мы можем реализовать гаражную дверь, отслеживая, каким было последнее направление движения?

Сообщение Anonymous »

Я выполняю следующее упражнение по программированию: Дверь гаража убийцы. Заявление: < /p>


Ситуация < /p>

Вы были наняты компанией, производящей электрические двери гараж. Ваша миссия состоит в том, чтобы
написать более безопасную версию их программного обеспечения для контроллера. Спецификация < /p>

Мы всегда начинаем с закрытой двери. Пульт дистанционного управления имеет ровную кнопку
со следующим поведением. < /P>

Код: Выделить всё

If the door is closed, a push starts opening the door, and vice-versa
It takes 5 seconds for the door to open or close completely
While the door is moving, one push pauses movement, another push resumes movement in the same direction
< /code>

Чтобы сделать дверь более безопасной, она была оборудована
на основе устойчивости обнаружения препятствий. Когда дверь обнаруживает препятствие
, она должна немедленно изменить направление движения. Ввод < /p>

Строка, где каждый символ представляет одну секунду, с
следующие возможные значения. < /P>

'.' No event
'P' Button has been pressed
'O' Obstacle has been detected (supersedes P)
< /code>

в качестве примера, '..p ....' означает, что ничего не происходит в течение двух секунд,
, затем нажата кнопка, затем никаких дальнейших событий. Выход < /p>

Строка, где каждый символ представляет одну секунду, и указывает положение
двери (0, если он полностью закрыт и 5 полностью открыт). Дверь
начинает немедленно двигаться, следовательно, ее положение изменяется в том же
секунду, что и событие. Пример < /p>

.. p ... o ..... как вход должен дать 001234321000 как выход < /p>
< /blockquote>

Я написал следующий код: < /p>

public class Door {
public static String run(String events) {
System.out.println("\n\n\nevents: "+events);
int count = 0;
StringBuilder result = new StringBuilder();
boolean movingUp = false;
boolean movingDown = false;

for(char c : events.toCharArray()){
System.out.println("movingUp: "+movingUp);
System.out.println("movingDown: "+movingDown);
System.out.println("c: "+c);
System.out.println("count: "+count);
System.out.println("result: "+result);
if(c=='.'){
if(movingUp){
result.append(count < 5 ? ++count : 5);
}else if(movingDown){
result.append(count > 0 ? --count : 0);
}else{
result.append(count);
}
}else if(c=='P'){
if(count==5){
movingUp = false;
movingDown = true;
result.append(count > 0 ? --count : 0);
}else if(movingUp){
movingUp = false;
result.append(count);
}else if(movingDown){
movingDown = false;
result.append(count);
}else{
movingUp = true;
result.append(count < 5 ? ++count : 5);
}
}else if(c=='O'){
movingUp = false;
movingDown = true;
result.append(count > 0 ? --count : 0);
}
}
return result.toString();
}
}
< /code>

Мне было интересно, как мы могли бы справиться, когда есть пауза, а затем дверь снова возобновляется, чтобы иметь возможность поддерживать ее вверх или вниз, как это было до паузы? Вверх, и после препятствия оно должно идти вниз.  < /p>

import static org.junit.Assert.*;

import org.junit.Test;

public class MainTest {
@Test
public void testNormalOperation() {
test("should stay closed unless button is pressed (no buttonpresses)", "..........", "0000000000");
test("should start opening on buttonpress", "P..", "123");
test("should open completely and stay open", "P....", "12345");
}

@Test
public void testPause() {
test("should start opening and pause on second buttonpress", "P.P..", "12222");
test("→ should resume closing on third buttonpress", ".....P......P.P..P....", "0000012345554333321000");
}

@Test
public void testObstacles() {
test("should reverse while opening", "P.O....", "1210000");
test("→ should reverse while closing", "P.O....", "12345554345555");
}

@Test
public void testObstaclePlusPause () {
test("→ should reverse while opening (and allow pause)", "P..OP..P..", "1232222100");
}

@Test
public void testExample() {
test("should start opening and reverse when obstacle", "..P...O.....", "001234321000");
}

private void test(String description, String events, String result) {
assertEquals(description ,result, Door.run(events));
}
}
Я также прочитал:


[*]https://users.cs.jmu.edu/bernstdh/web/c ... attern.php

Подробнее здесь: https://stackoverflow.com/questions/601 ... t-moving-d

Вернуться в «JAVA»