Java: métodos Desfazer e Refazer para uma classe Rectangle [duplicado]
Oct 16 2020
Eu tenho uma classe Rectangle personalizada:
public class Rectangle () {
private int height, width, x, y;
private Color color;
public Rectangle () {
this.height = null;
this.width = null;
this.x = null;
this.y = null;
this.color = null;
}
public void setHeight(int h) { this.height = h; }
public void setWidth(int w) { this.width = w; }
public void setX(int x) { this.x = x; }
public void setY(int y) { this.y = y; }
public void setColor(Color c) { this.color = c; }
public int getWidth() { return this.width; }
public int getHeight() { return this.height; }
public int getX() { return this.x; }
public int getY() { return this.y; }
public Color getColor() { return this.color; }
public void undo() { }
public void redo() { }
}
Como eu implementaria as funções desfazer e refazer para esta classe de forma que ela pudesse reverter o retângulo ao estado anterior sem que o usuário mencionasse qual método foi usado pela última vez. Tenho uma vaga ideia que envolve o uso de uma pilha, mas não consigo descobrir como codificá-la de fato. Minha segunda pergunta é não tenho certeza se meu construtor está correto, eu inicializo tudo como nulo sem fornecer nenhum parâmetro porque quero que as pessoas usem os getters / setters. Por favor ajude.
Respostas
1 Harkal Oct 16 2020 at 12:37
você pode salvar o estado em uma matriz e restaurar o retângulo a partir dele
public class Rectangle () {
private states: List<Rectangle> = new ArrayList(); // we save the state of rectangle on every update to any property
private int stateIndex = 0; // this is the index of the state which is active on this rectangle
private int height, width, x, y;
private Color color;
public Rectangle () {
this.height = null;
this.width = null;
this.x = null;
this.y = null;
this.color = null;
}
public void setHeight(int h) {
this.stateIndex = states.size() + 1; // we ll increase one in state index as new state is added to the states
this.height = h;
this.states.add(this); // add the state after you set the value of any property
}
public void undo() {
if(this.stateIndex > 0){ // only undo when there is state available before the current state
this.stateIndex--; // reduce the current index by one
this.height = this.states.get(stateIndex).height; // set the properties from state
...
}
}
public void redo() {
if(this.stateIndex < states.size()){ // can go more the available states in cache
this.stateIndex++; // increase the current state index
this.height = this.states.get(stateIndex).height; // update the values of the properties
...
}
}
}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino