Preciso de ajuda para resolver o seguinte problema.
Preciso coletar 10 números desordenados no Vetor A, depois organiza-los e passar eles para o Vetor C com a logica da torre de Hanoi.
Fiz 1 subrotina pra cada movimento.
Porém está dando erro quando a Pilha B possui 0 números. O certo seria passar para a proxima subrotina de jogar quem está no topo de C para A, porem o programa morre ali. Podem me auxiliar por gentileza?
Segue o codigo.
import javax.swing.JOptionPane;
public class Trabalho1 {
static int a[] = new int[10]; // Números desordenados/origem static int b[] = new int[10]; //pilar de trabalho static int c[] = new int[10]; //pilar destino static int qtda; //Contador de quantos numeros tem em A. static int qtdb; //Contador de quantos numeros tem em B. static int qtdc; //Contador de quantos numeros tem em C. public static void main(String[] args) { // recebe os números digitados pelo usuário for (int i = 0; i < a.length; i++) { a[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite os números: ")); qtda++; }//Chama as rotinas de organizar o Vetor A, distribuir o topo de A para B e C, depois resolve o problema de Hanoi. organizaA(); DistribuiBeC(); resolvehanoi();} public static void organizaA() {//organiza o pilar origem
int aux; for (int i = 0; i < a.length; i++) { for (int j = 1; j < a.length; j++) { if (a[j - 1] < a[j]) { aux = a[j]; a[j] = a[j - 1]; a[j - 1] = aux; } } } } public static void DistribuiBeC() { //O pilar B e C recebem quem está no topo do Pilar A b[qtdb] = a[qtda - 1]; qtdb++; qtda--; c[qtdc] = a[qtda - 1]; qtdc++; qtda--; } public static void AtoB() { //Topo de A vai para B b[qtdb] = a[qtda - 1]; qtdb++; qtda--; } public static void AtoC() { //Topo de A vai para C c[qtdc] = a[qtda - 1]; qtdc++; qtda--; } public static void BtoC() { //Topo de B vai para C c[qtdc] = b[qtdb - 1]; qtdc++; qtdb--; } public static void BtoA() { //Topo de B vai para A b[qtdb] = a[qtda - 1]; qtdb++; qtda--; } public static void CtoA() { //Topo de C vai para A a[qtda] = c[qtdc - 1]; qtda++; qtdc--; } public static void CtoB() { //Topo de C vai para B b[qtdb] = c[qtdc - 1]; qtdb++; qtdc--; } public static void resolvehanoi() {//executa a logica da torre de hanoi. Se um numero da Pilha “X” for maior que o numero da pilha “Y” ele envia quem está no topo para pilha “Z” e vice versa.
//Se a Pilha A e a Pilha B chegarem a 0, ele chama o metodo para exibir os dados que se encontram em C.if ((qtda == 0) && (qtdb == 0)) { exibir(); } if (a[qtda - 1] < b[qtdb - 1]) { AtoB(); } if ((a[qtda - 1] > b[qtdb - 1]) && (a[qtda - 1] < c[qtdc - 1])) { AtoC(); } if ((b[qtdb - 1] > 0) && (b[qtdb - 1] < c[qtdc - 1])) { BtoC(); } if ((b[qtdb - 1] > 0) && (b[qtdb - 1] > c[qtdc - 1]) && (b[qtdb - 1] < a[qtda - 1])) { BtoA(); } if ((c[qtdc - 1] > 0) && (c[qtdc - 1] < a[qtda - 1])) { CtoA(); } else { CtoB(); } } public static void exibir() { //Exibi os dados na pilha C. for (int i = 0; i < c.length; i++) { System.out.println("Os números em C São: " + c[i] + " A " + a[i] + " B " + c[i]); } }}