ME ajudem com esse código

`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.

// 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?

1 curtida

era >=0

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?

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.

1 curtida