2014-05-12 1 views
0

Ce programme est censé lire les valeurs de l'entrée de chaîne et retourner un résultat.pop() ing stacks ne semble pas effacer les valeurs

Cependant, quand j'utilise

System.out.println(Arrays.toString(stack.toArray())); 

pour vérifier ce qui semble la pile ressemble à la fin, ou même au cours du programme, je remarquai que la méthode pop() ennemi de la pile ne pas être enlever les éléments, il revient. Je fais probablement quelque chose d'horriblement mal, mais je n'ai pas réussi à le comprendre.

J'apprécierais vraiment tout aperçu!

// Test example : (((1+1)+1)+1) 

import java.util.*; 

public class Task2 
{ 
public static void main(String[] args) //run Start() method 
{ 
    System.out.print("Enter an expression, or press Enter to quit: "); 

    Stack<String> stack = new Stack<String>(); 

    Scanner scanner = new Scanner(System.in); 

    String n = scanner.nextLine(); 

    if(!n.isEmpty()) 
    { 
     for(int i = 0 ; i < n.length() ; i++) 
     { 
      if(!(n.charAt(i) == ')')) 
      { 
       stack.push(n.charAt(i) + ""); 
      } 
      else 
      { 
       int two = Integer.parseInt(stack.pop()); 
       char op = (stack.pop()).charAt(0); 
       int one = Integer.parseInt(stack.pop()); 

       switch(op) 
       { 
        case '+':{stack.push((one + two) + "");} 
        case '-':{stack.push((one - two) + "");} 
        case '*':{stack.push((one * two) + "");} 
        case '/':{stack.push((one/two) + "");} 
       } 
      } 
     } 
    } 
    else 
    { 
     System.out.print("\ngoodbye"); 

     System.exit(0); 
    } 
    } 
} 

Désolé pour le manque de commentaires, et merci!

Répondre

3

Ceci est ma première solution ici, alors soyez gentil: D. Le problème n'était pas avec pop(), car pop faisait ce qu'il était censé faire. Vous avez oublié d'ajouter des points de rupture dans votre instruction switch. Il a fait toutes les opérations et l'a ajouté à la pile en lui donnant l'illusion que la pop ne fonctionnait pas. Je vais laisser la partie impression à vous. À votre santé.

   switch(op) 
       { 
       case '+': 
        stack.push((one + two) + ""); 
        break; 
       case '-': 
        stack.push((one - two) + ""); 
        break; 
       case '*': 
        stack.push((one * two) + ""); 
        break; 
       case '/': 
        stack.push((one/two) + ""); 
        break; 
       } 
+0

bonne solution !! – Kyte