ME ajudem com esse código

4 respostas Resolvido
Alysson_Alves1

`import java.util.Scanner;

public class AvaliadorDeExpressõesDemo {

public static void main (String[]args) {
//	PilhaDeDoubles pdd=new PilhaDeDoubles();
	Scanner ler=new Scanner(System.in);
	AvaliadorDeExpressoes exp=new AvaliadorDeExpressoes();
	String E=ler.next();
	
		System.out.println( exp.avaliaExpressao(E));
	
}

}
`

import java.util.*;

class AvaliadorDeExpressoes {

public static Double avaliaExpressao(String exp) {
	 
	 PilhaDeDoubles pilha= new PilhaDeDoubles();
	 
	 StringTokenizer st=new StringTokenizer(exp);
	 
	 while(st.hasMoreTokens()) {
		 
	String nextOp=st.nextToken();
	System.out.println(nextOp);
	if("+-*/".indexOf(nextOp.charAt(0))>0) {
		
	double op1=pilha.pop();
	double op2=pilha.pop();
	double resultado=0;
	switch(nextOp.charAt(0)) {
	case '+':resultado = op1+op2;break;
	case '-':resultado = op1-op2;break;
	case '*':resultado = op1*op2;break;
	case '/':resultado = op1/op2;break;
	}
	pilha.push(resultado);
		
	}else{
		double op= Double.parseDouble(nextOp);
		pilha.push(op);
	}
	
		
	}
		 
	 
 return pilha.pop();
	 
 }

}

import java.util.*;

public class PilhaDeDoubles {

LinkedList pilha;

PilhaDeDoubles() {
	pilha= new LinkedList();
	
}

public void push(double valor) {
	Double envelope= new Double(valor);
	
	pilha.addFirst(envelope);
	
}
public Double pop() {
Double envelope=(double)pilha.getFirst();
pilha.removeFirst();
	
	return envelope.doubleValue();
	

}
public boolean EstaVazia() {
	return (pilha.size()==0);
}
public String toString() {
	return pilha.toString();
	
}

}

tentem rodar nas suas máquinas esse programa, o objetivo é resolver operações como "1 2 * "( resposta =2) , tentem mudar a forma de declarar a expressão(`
String E=ler.next();

System.out.println( exp.avaliaExpressao(E));`)

tentem tbm

System.out.println( exp.avaliaExpressao("9 5 + "));//14`

ou ´
double P = exp.avaliaExpressao(“9 5 +”);
System.out.println( P));//14`´

vendo isso, notem que pra cada forma de declarar a expressão, ocorre um erro diferente.

4 Respostas

D
Solucao aceita
// String E=ler.next();
String E=ler.nextLine();
System.out.println("Expressao: " + E);

Acredito que seja nextLine.

if("+-*/".indexOf(nextOp.charAt(0))>0) {

E se o índice for zero?

Alysson_Alves1

era >=0

Alysson_Alves1

qual a diferença entre nextLine e next? Uma coisa que notei com next, é que ele n vira token com o StringTokenizer, como o nextLine influencia nisso?

staroski

Já leu a documentação da classe Scanner?
O único método do Scanner que consome as quebras de linha é o nextLine()

Se você está lendo entrada de dados pelo teclado, utilize somente o método nextLine().

Os outros nextAlgumaCoisa você só vai usar ao ler um stream de bytes oriundo de um arquivo ou socket.

Criado 29 de maio de 2020
Ultima resposta 30 de mai. de 2020
Respostas 4
Participantes 3