Olá pessoal!
Fiz este algoritmo usando a Classe Stack, tudo que está aí fiz pesquisando no Google, mas agora empaquei nisso, como fazer uma Stack de 10 elementos?
Obs: esse código aí não está rodando como queria, que seria empilhar 10 elementos e desempilhar logo após selecionar a opção 2.
Olá Mark, o que eu quero é empilhar 10 numeros no case 1 e desempilhar os 10 no case 2.
Só que ainda não descobri como fazer uma Stack de 10 elementos, pq ai eu removia aquele For.
Grato pela atenção mas esse código não serviu, pois queria determinar o tamanho (10 posições) da Stack nesta linha se possível:
Stack<Integer>pilha=newStack<Integer>();
Criando um vetor de 10 posições:
intpilha[]=newint[10];
Recebendo valores até completar a décima posição:
for(i=0;i<10;i++) {
valor = Integer.parseInt(JOptionPane.showInputDialog("Informe valores para empilhar"));
}
Não é dessa forma que eu quero fazer, mas empilhar e desempilhar usando apenas a Classe Stack, ai não vou precisar usar o vetor e nem o “For” para determinar 10 posições e receber os valores digitados, ous seja, quanto menos código melhor.
Se alguém souber como estipular o tamanho da pilha logo no começo do algoritmo usando a Classe Stack eu agradeço.
[]s
T
thingol
Você está misturando abobrinhas e quiabos.
A classe Stack é uma pilha de tamanho indeterminado. (Dentro dela existe um Vector, mas isso é um detalhe de implementação. )
O tamanho de uma pilha é dado pela quantidade de elementos empilhados.
Ou seja, você só terá uma pilha de tamanho 10 se tiver 10 elementos empilhados dentro dela.
Agora você tirou da cartola um array. Para que você quer o tal array? Ou você usa um array, ou você usa a classe Stack. Se quiser criar uma pilha usando um array, então você é que tem de controlar isso; você vai precisar de uma variável auxiliar do tipo int, contendo um índice para o topo da pilha.
celso.martins
Analisei seu problema na correria, pois estou de saída para o Maracanã.
Veja se é disso que precisa. Se for, custa nada dizer: a API do Java é sua amiga.
Stack<Integer>pilha=newStack<Integer>();for(inti=0; i < 20; i++) {pilha.push(i);}
pilha.setSize(10);pilha.trimToSize();System.out.println(pilha.capacity());
celso.martins
Tem essa outra forma:
packagebr.com.celsomartins.stack;importjava.util.Stack;@SuppressWarnings("serial")publicclassMinhaPilha<Type>extendsStack<Type>{privateLongmaxSize=0L;publicMinhaPilha(LongmaxSize){this.maxSize=maxSize;}@OverridepublicTypepush(Typeitem)throwsStackOverflowError{if(this.size()>maxSize){thrownewStackOverflowError("O tamanho máximo da pilha foi atingido");}else{super.push(item);}returnitem;}}
Testei assim:
MinhaPilha<Integer>pilha=newMinhaPilha<Integer>(10L);for(inti=0; i < 20; i++){pilha.push(i);}
Qualquer erro deve ser perdoado, pois essa classe foi feita após um jogão no Maracanã que terminou em 0 a 0.
celso.martins
Tem que trocar o > do método sobrescrito por ==. A "pilha limitada" está ficando com maxSize + 1 de tamanho.
Eu fiquei com a pulga atrás da orelha… para que diabos será que serve isso? Um pilha limitada.
Guevara
Consegui fazer o que eu queria! Uma pilha usando Stack, definindo 10 elementos para empilhar.
packageexercicio3;importjava.util.Stack;importjavax.swing.JOptionPane;/** * * @author Guevara */publicclassEmpDesemp{publicvoidexecutar(){Stack<Integer>valor=newStack<Integer>();Integeropcao;Stringincluir;Stringexcluir;incluir="S";excluir="S";do{opcao=Integer.parseInt(JOptionPane.showInputDialog(null,"1 - Empilha"+"\n2- Desempilha"+"\n3 - Sair"));switch(opcao){case1:{do{if(valor.size()>9){JOptionPane.showMessageDialog(null,"Pilha já está cheia","Saída",1);incluir="N";}else{valor.push(Integer.parseInt(JOptionPane.showInputDialog(null,"Informe o valor para empilhar","Entrada",3)));incluir=JOptionPane.showInputDialog(null,"Deseja empilhar outro valor? S/N","Entrada",3);incluir=incluir.toUpperCase();}}while(incluir.equals("S"));}break;case2:{do{if(valor.isEmpty()){JOptionPane.showMessageDialog(null,"Pilha Vazia!","Aviso!",2);excluir=("N");}else{//criei um objeto para armazenar o que esta sendo retirado da pilhaObjectaux=valor.pop();excluir=JOptionPane.showInputDialog(null,"Deseja desempilhar outro? S/N:","Entrada",3);excluir=excluir.toUpperCase();JOptionPane.showMessageDialog(null,"O valor "+aux+" foi desempilhado","Saída",1);//O objeto aux mostra o que ele armazenou do pop()}}while(excluir.equals("S"));}}}while(opcao!=3);}}