Boa tarde tava precisando de uma ajuda em um algoritmo que o professor pediu,
Objetivo: produzir o jogo Torre de Hanoi
o link do jogo:
o codigo ta dando erro na ultima jogada:
[code]package a1_Aula4_30082012_Stack;
import java.util.Stack;
import javax.swing.JOptionPane;
public class Pilha {
public static void main(String[] args) {
Stack <Disco> p1 = new Stack<Disco>(); //cria 3 pilhas que são as hastes
Stack <Disco> p2 = new Stack<Disco>();
Stack <Disco> p3 = new Stack<Disco>();
Disco a = new Disco(1); //cria 3 disco
Disco b = new Disco(2);
Disco c = new Disco(3);
p1.push(c); //coloca os 3 disco na primeira haste
p1.push(b);
p1.push(a);
do{
int origem = Integer.parseInt(JOptionPane.showInputDialog("Digite a origem: ")); //onde sai o disco topo
int destino = Integer.parseInt(JOptionPane.showInputDialog("Digite o destino: ")); //onde vai o disco topo
if(origem ==1&&destino==2){ //opcões para origem e destino
if(p2.size()==0){
p2.add(p1.get(p1.size()-1));
p1.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
[b]}else if((p1.get(p1.size()-1).getTamanho())<(p2.get(p2.size()-1).getTamanho())){ //erro aqui java.lang.ArrayIndexOutOfBoundsException ultima jogada[/b]
p2.add(p1.get(p1.size()-1));
p1.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else {
JOptionPane.showMessageDialog(null, "Jogada inválida.");
}
}
if(origem==1&&destino==3){//opcões para origem e destino
if(p3.size()==0){
p3.add(p1.get(p1.size()-1));
p1.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else if(p1.get(p1.size()-1).getTamanho()<p3.get(p3.size()-1).getTamanho()){
p3.add(p1.get(p1.size()-1));
p1.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else {
JOptionPane.showMessageDialog(null, "Jogada inválida.");
}
}
if(origem==2&&destino==1){//opcões para origem e destino
if(p1.size()==0){
p1.add(p2.get(p2.size()-1));
p2.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else if(p2.get(p2.size()-1).getTamanho()<p1.get(p1.size()-1).getTamanho()){
p1.add(p2.get(p2.size()-1));
p2.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else {
JOptionPane.showMessageDialog(null, "Jogada inválida.");
}
}
if(origem==2&&destino==3){//opcões para origem e destino
if(p3.size()==0){
p3.add(p2.get(p2.size()-1));
p2.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else if(p2.get(p2.size()-1).getTamanho()<p3.get(p3.size()-1).getTamanho()){
p3.add(p2.get(p2.size()-1));
p2.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else {
JOptionPane.showMessageDialog(null, "Jogada inválida.");
}
}
if(origem==3&&destino==2){//opcões para origem e destino
if(p2.size()==0){
p2.add(p3.get(p3.size()-1));
p3.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else if(p3.get(p3.size()-1).getTamanho()<p2.get(p2.size()-1).getTamanho()){
p2.add(p3.get(p3.size()-1));
p1.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else {
JOptionPane.showMessageDialog(null, "Jogada inválida.");
}
}
if(origem ==3&&destino==1){//opcões para origem e destino
if(p1.size()==0){
p1.add(p3.get(p3.size()-1));
p3.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else if(p3.get(p1.size()-1).getTamanho()<p1.get(p2.size()-1).getTamanho()){
p1.add(p3.get(p3.size()-1));
p3.pop();
JOptionPane.showMessageDialog(null, "Jogada OK");
}else {
JOptionPane.showMessageDialog(null, "Jogada inválida.");
}
}
}while(valido(p1, p2, p3));//opcões para origem e destino
JOptionPane.showMessageDialog(null, "Parabéns Objetivo Concluido, com muito esforço!");
}
public static boolean valido(Stack<Disco> p1, Stack<Disco> p2,Stack<Disco> p3){ //metodo para validar o jogo completo
if(p2.size()==0&&p3.size()==3){
return false;
}else if(p3.size()==0&&p2.size()==3){
return false;
}else{
return true;
}
}
}[/code]
classe Disco:
[code]package a1_Aula4_30082012_Stack;
public class Disco {
private int tamanho;
public Disco(int tamanho) {
this.tamanho = tamanho;
}
public int getTamanho() {
return tamanho;
}
public void setTamanho(int tamanho) {
this.tamanho = tamanho;
}
@Override
public String toString() {
return "Disco [tamanho=" + tamanho + "]";
}
}[/code]
passos para terminar o jogo:
origem destino
1 2
1 3
2 3
1 2
3 1
3 2
1 2
Espero ajuda Obrigado.