У меня есть класс, предназначенный для реализации основ стека в URL-адресах веб-браузера.Правильная реализация поведения стека
Предполагаемое поведение выглядит следующим образом: Если пользователь вводит URL-адрес в адресную строку, передний стек очищается. Если пользователь нажимает кнопку «Назад», текущий URL-адрес (в адресной строке) помещается в передний стек. Задний стек выталкивается, а всплывающий URL-адрес помещается в адресную строку. Если задний стек пуст, ничего не происходит. Если пользователь нажимает кнопку «вперед», текущий URL-адрес (в адресной строке) помещается в задний стек. Выдвинутый стек выскользнут, а всплывающий URL-адрес помещается в адресную строку Если задний стек назад пуст, ничего не происходит.
В принципе, я столкнулся с проблемой при работе с задним стеклом. Каждый раз, когда вызывается задний блок стека, текущий URL-адрес помещается в передний стек. Хотя это поведение является правильным для одного нажатия заднего стека, оно непреднамеренно, когда задний стек больше не перемещается назад (пример: Google.com [обратный вызов стека] Google.com, толкает Google.com в передний стек дважды) ,
У меня возникли проблемы с мышлением о логике, чтобы это не произошло. Очевидно, что некорректное поведение требует многократного нажатия на передний стек, чтобы переместить только одну веб-страницу.
Любые предложения, сохраняя мою суть моего кода целым?
public class BrowserStack {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
// the current URL
String url = null;
Stack<String> forward = new Stack<String>();
Stack<String> back = new Stack<String>();
String input;
System.out.println("Type a combination of URLs, or the > or < symbol.\nType 'q' to quit.");
while (true) {
input = s.next();
if (input.equals("q")) {
System.out.println("Bye");
return;
}
if (input.equals("<")) {
try {
forward.push(url); //unintended behavior happens here
url = back.pop();
} catch (EmptyStackException e) {
}
}
else if (input.equals(">")) {
try {
back.push(url);
url = forward.pop();
} catch (EmptyStackException e) {
}
}
else {
if (url != null)
back.push(url);
url = input;
forward.clear();
}
System.out.println("Current webpage [" + url + "]");
}
}
}
где вы заселяете 'url'? – Helios
@Helios в выражении 'else' внизу,' url = input' – 23k
Под «задним стеком больше не движется назад» вы имеете в виду, что он пуст (или имеет только один элемент)? И не было бы лучше явно проверить пустое() вместо обработки EmptyStackException? –