Olá, sou iniciante java e estou fazendo um programa para resolver expressoes usando a forma pósfixa com pilha.
expressao infixa 3+46 expressao pos fixa 643+
Estava usando este metodo para pegar somente os numeros inteiro da String, o problema é q com ele n estou conseguindo realizar operações com numeros de mais de um digito. Tentei algumas implementações e n consegui.
Achei aqui no forum algumas, tentei usar aquela funcao string.split(" ") mas ela não pega somente numeros , e pelo q vi o isDigit() só aceita char.
tem alguma forma de verificar e pegar os numeros de uma string separados por (espaço)?
// metodo pegar inteiros(de um digito)
public boolean pegarInteiros( String s ) {
// cria um array de char
char[] c = s.toCharArray();
boolean d = true;
for ( int i = 0; i < c.length; i++ )
// verifica se o char não é um dígito
if ( !Character.isDigit( c[ i ] ) ) {
d = false;
break;
} return d;
}
// classe main
public class Teste {
public static void main(String[] args) {
Pilha p = new Pilha();
Scanner sc = new Scanner(System.in);
String aa = null;
String bb = null;
System.out.println(" Digite a expressão pósfixa: ");
aa = sc.nextLine();
String[] arrayValores = aa.split(" ");
System.out.println(" numeros interiros a :"+ aa);
for (String s: arrayValores) {
System.out.println(s);
}
for (int i=0, j=0 , k=1 ; i<aa.length() ; i++,j++,k++ ){
bb = aa.substring(j,k);
if (p.pegarInteiros(bb)){
int numero = Integer.parseInt(bb);
p.push(numero);
}
switch( bb ) {
case " ":
System.out.println(" Espaço ");
break;
case "+":
int soma;
soma = ( p.pop() + p.pop() );
System.out.println("Soma igual a "+soma);
p.push(soma);
break;
case "-":
int diferenca;
diferenca = ( p.pop() - p.pop() );
System.out.println("Subtração igual a "+diferenca);
p.push(diferenca);
break;
case "/":
int quociente;
quociente = ( p.pop() / p.pop() );
System.out.println("divisaõ igual a "+quociente);
p.push(quociente);
break;
case "*":
int produto;
produto = ( p.pop() * p.pop() );
System.out.println("multiplicação igual a "+produto);
p.push(produto);
break;
}
}
}
}