Postfix Calculatrice Java
Ok, donc je dois lire dans un postfix expression à partir d'un fichier. Le suffixe d'expression doit avoir des espaces pour séparer chaque opérateur ou de l'opérande. Ce que j'ai pour l'instant fonctionne uniquement si il n'y a pas d'espaces entre les opérateurs ou les opérandes dans le fichier d'entrée. (c'est à dire si le fichier a 12+ le résultat que j'obtiens est 3.) Pour ce faire, je pense que j'ai besoin pour marquer l'entrée, mais je ne suis pas sûr de savoir comment. C'est ce que j'ai jusqu'à présent. Merci pour toutes les réponses.
import java.util.*;
import java.io.*;
public class PostfixCalc{
public static void main (String [] args) throws Exception {
File file = new File("in.txt");
Scanner sc = new Scanner(file);
String input = sc.next();
Stack<Integer> calc = new Stack<Integer>();
while(sc.hasNext()){
for(int i = 0; i < input.length(); i++){
char c = input.charAt(i);
int x = 0;
int y = 0;
int r = 0;
if(Character.isDigit(c)){
int t = Character.getNumericValue(c);
calc.push(t);
}
else if(c == '+'){
x = calc.pop();
y = calc.pop();
r = x+y;
calc.push(r);
}
else if(c == '-'){
x = calc.pop();
y = calc.pop();
r = x-y;
calc.push(r);
}
else if(c == '*'){
x = calc.pop();
y = calc.pop();
r = x*y;
calc.push(r);
}
else if(c == '/'){
x = calc.pop();
y = calc.pop();
r = x/y;
calc.push(r);
}
}
}
int a = calc.pop();
System.out.println(a);
}
}
Jetez un oeil à
StringTokenizer
. Il tokenizes sur les espaces blancs (espaces, tabulations, retours à la ligne, etc.) par défaut.
OriginalL'auteur Jmamz06 | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs choses que vous devez changer, vous pouvez faire étape par étape.
Stack
pour contenirInteger
s plutôt que deCharacter
s.String
s au lieu deCharacter
s.Integer.parseInt()
. Cela vous permettra de transformerString
s àInteger
s. (En fait, il les convertit enint
s, mais dans votre cas, cette différence n'a pas d'importance.)Scanner.useDelimiter()
à\s+
, cela va correspondre à une séquence de caractères espace.Il y a bien sûr d'innombrables autres façons de traiter votre entrée, mais j'ai essayé de vous donner une idée de la façon de modifier votre code pour faire ce qu'il doit faire.
OriginalL'auteur biziclop
Afin de marquer vous pouvez utiliser le
String.split()
avec un espace unique dans un séparateur;Voici une solution que je viens d'écrire qu'qui utilise un Pile mise en œuvre, basé sur un seule liste liée afin de faire un postfix calculatrice;
A - PostFixCalculator
B - SinglyLinkedListStack
C - Démo
D - Exemple de Fichier d'Entrée: "postfix.txt"
E - Démo De Sortie
OriginalL'auteur Levent Divilioglu
vous n'avez pas besoin d'un scanner
simplement utiliser BufferedReader de lire le fichier, puis utiliser la méthode readLine pour obtenir la ligne
Ensuite utiliser
et vous obtiendrez le tableau de "jetons", qui peuvent être traités au sein de votre code.
d'identifier le nombre, vous pouvez utiliser la regex suivante:
next()
par défaut serait de récupérer la prochaine espaces séparés jeton. Les modèles peuvent être utilisés par la suite, bien sûr.OriginalL'auteur jdevelop