Implemente um método dinamico em java que receba tres pilhas, duas já preenchidas em ordem crescente e preenche a última com valores das duas primeiras em ordem crescente. Alguém pode me ajudar? Obrigada
Você tentou fazer algum código, para que tenha duvida e nós possamos ajudar você?
public class Atividade1 {
2 public static boolean verificaParenteses(String entrada) {
3 Pilha pilha = new Pilha();
4 for (int i = 0; i < entrada.length(); i++) {
5 if (entrada.charAt(i) == '(') {
for ( pilha.inserir("(");
7 } else if (entrada.charAt(i) == ')') {
8 if (pilha.retirar() == null) {
9 return false;
10 }
11 }
12 }
13 if (!pilha.vazia()) {
14 return false;
15 }
16 return true;
17 }
18
19 public static void main(String [] args) {
20 boolean valida = verificaParenteses("(((()))(((((()))))((((()))))))");
21 if (valida) {
22 System.out.println("Parenteses válidos...");
23 } else {
24 System.out.println("Parenteses inválidos...");
25 }
26 }
Olha, montei e estrutura, mas, não sei como encaixar o exercício, estou no primeiro ano, e pra ser sincera bem perdida. Obrigada.
Essa lógica que está errada, tipo se vai adicionar tudo que é (
e remover tudo que é )
? basicamente isso, porque no final das contas parecer que se a pilha não tiver nenhum item, ele está correta, se não está com problemas, é isso? você está com dificuldade em fazer essa entrada e/ou saida?
Esse for
está “perdido” aqui, então basta retirá-lo:
public static boolean verificaParenteses(String entrada) {
Pilha pilha = new Pilha();
for (int i = 0; i < entrada.length(); i++) {
if (entrada.charAt(i) == '(') {
pilha.inserir("(");
} else if (entrada.charAt(i) == ')') {
if (pilha.retirar() == null) {
return false;
}
}
}
return pilha.vazia();
}
Só que este método verifica se uma expressão é bem formada (ou seja, se para cada (
, existe o )
correspondente). Não tem nada a ver com o enunciado que vc colocou inicialmente (“receba tres pilhas, duas já preenchidas em ordem crescente e preenche a última com valores das duas primeiras em ordem crescente”).
Não. Assumindo que seja de fato uma pilha, o método retirar()
remove o elemento que está no topo da pilha. E no caso, vai ser um (
que foi empilhado anteriormente (ou, se a pilha já estiver vazia, retorna null
).
Claro que sem ver a classe Pilha
não dá pra ter certeza, mas assumindo que seja uma pilha de fato, é assim mesmo (o clássico algoritmo para ver se todos os parênteses estão fechados corretamente).
Mas como eu já disse acima, esse código não tem nada a ver com o enunciado que foi colocado…
Hugo, é como te falei , terei prova no próximo dia 30, e peguei alguns exercícios para eu resolver, mas , este nem sei por onde começo, entendeu?
Gravação das minhas aulas dessa semana.
Material na descrição.
Os vídeos são orientados aos alunos, mas talvez lhe ajude.
[]'s
Comece criando o método. O enunciado diz que o método recebe 3 pilhas, então:
public void ordemCrescente(Pilha p1, Pilha p2, Pilha p3) {
}
Ele diz que as duas primeiras (no caso, p1
e p2
) já estão preenchidas em ordem crescente. Vc precisa preencher a pilha p3
com os elementos das duas outras, mas eles também devem estar em ordem.
Tente fazer primeiro sem computador, sei lá, use um baralho ou folhas de papel com números. Coloque as duas pilhas lado a lado. Por exemplo, se eu tiver essas pilhas:
p1 p2
2 5
3 8
6
10
Como você criaria um terceira pilha, contendo os números dessas duas pilhas, sendo que eles devem ficar em ordem crescente?
Lembrando que em uma pilha, você só pode adicionar ou remover no “topo” (ou seja, em uma das “pontas”).
p3
10
8
6
5
3
2?
A pergunta eu fiz para quem fez o enunciado, eu sei que pilha, eu sei o que fila eu sei, mas, eu quero ver aonde vai o conhecimento de quem fez a pergunta e porque fez essa pergunta, e o meu questionamento é porque o algoritmo faz uma coisa e a pergunta é outra!
Parabéns … muito legal