Java 历史课中重做的误用
我是计算机科学专业的学生。这学期,我要做一个项目(数独)。该项目的一个特点是建立历史记录。所以我开始实现这个特性。 “撤销”似乎有效,但我对重做有点问题。我想我知道这个bug是从哪里来的,但我不知道如何修复它 当我更改“案例”的值时,我会将旧的“案例”添加到我的历史记录中。这使我可以用undo恢复它们。然而,当我“重做”时,第一个动作什么也不做,如果我做了所有可能的“重做”,它就会丢失一个动作。我想这是因为我只有旧的价值观而不是新闻。但是如果我加上新闻,问题就会迎刃而解(撤销bug,重做有用吗?) 如果你有一个想法或轨道,我很感兴趣!提前谢谢你 以下是我在历史记录中添加项目时的代码:Java 历史课中重做的误用,java,Java,我是计算机科学专业的学生。这学期,我要做一个项目(数独)。该项目的一个特点是建立历史记录。所以我开始实现这个特性。 “撤销”似乎有效,但我对重做有点问题。我想我知道这个bug是从哪里来的,但我不知道如何修复它 当我更改“案例”的值时,我会将旧的“案例”添加到我的历史记录中。这使我可以用undo恢复它们。然而,当我“重做”时,第一个动作什么也不做,如果我做了所有可能的“重做”,它就会丢失一个动作。我想这是因为我只有旧的价值观而不是新闻。但是如果我加上新闻,问题就会迎刃而解(撤销bug,重做有用
// IN MY HISTORY CLASS
public E getCurrentElement() {
return leftQ.getLast();
}
public void add(E e) {
leftQ.addLast(e);
rightQ.clear();
currentPosition = currentPosition + 1;
endPosition = currentPosition;
}
// IN MY add actionPerformed
history.add(Case.duplicate(c)); // Add oldCase
c.addPossibleValue(++addedValues); // change old case
refresh();
“撤消”(工作)时的代码:
当我“重做”(不工作)时编码:
以下是调试时的执行跟踪:
首先,我在我的历史记录中添加了2个元素。所以我的标签上有“12”。
在第一次撤消结束时:
LEFT : [Case : Candidates :[]
] --> FIRST Element on history, empty
RIGHT : [Case : Candidates :[1] // Second one, contains "1"
]
第二次撤消:
LEFT : []
RIGHT : [Case : Candidates :[]
, Case : Candidates :[1]
]
然后2重做:
LEFT : [Case : Candidates :[]
]
RIGHT : [Case : Candidates :[1]
]
LEFT : [Case : Candidates :[]
, Case : Candidates :[1]
]
RIGHT : []
我的标签上只有“1”。我认为这是因为我总是添加旧值,因此我的历史记录不包含第一次撤消之前对象的状态。。。但我不知道我能做什么 使用链表可能是缩短撤消/重做实现的一个好方法。将轮次存储为列表中的节点,这样每当轮次时,都会在列表末尾生成一个新节点。在每个节点内部,保存电路板布局的int[3][3]。调用undo时,通过将线路板加载到上一个列表节点,使线路板后退。当调用redo时,该节点仍然存在,您可以向前一步。通过执行此操作,您可以一直撤消到回合1,然后一直重做到回合x。因为这只是数独游戏,所以使用链表不需要太多内存。对于更复杂的需求,此解决方案不是最佳选择 我否决了这个问题,因为这里的代码太多了。为了明确你的问题所在,请删除任何不直接导致你的问题的代码,如果你能把它减少到十行或更少,我会考虑撤回投票。请看:另外,我要警告你,如果你的导师发现了这一点,你可能会面临剽窃和/或允许剽窃的指控。相反,您应该创建一个演示您的问题的应用程序,而不会泄露太多的作业解决方案。这里的所有代码都是这个应用程序所必需的,因此您可以理解我的方法。Case和History是我的项目中使用的类,每个方法都被使用。所以我不知道如何制作一个简短的示例……您肯定不是建议您需要所有283行代码来重做吗?我编辑过。我尽可能多地总结。
LEFT : []
RIGHT : [Case : Candidates :[]
, Case : Candidates :[1]
]
LEFT : [Case : Candidates :[]
]
RIGHT : [Case : Candidates :[1]
]
LEFT : [Case : Candidates :[]
, Case : Candidates :[1]
]
RIGHT : []