2015-10-15 152 views
2

好的,所以我正在研究一种方法,将数字字符串拆分为字符并将每个字符作为整数顺序地推入两个不同的堆栈,直到它看到操作员跳过它,然后继续推动其余的字符作为整数放入堆栈中。我的堆栈不断显示未被读取的数字。正在读取的文本文件看起来像这样:28302830-293817302堆栈没有正确处理数据

public void pushToStack(String line) { 

    boolean pushToFirstStack = true; 

    for (int i = 0; i < line.length(); i++) { 

     if (Character.isDigit(line.charAt(i))) { 

      if(pushToFirstStack){ 
       System.out.print(Character.getNumericValue(line.charAt(i))); 
       Stack1.push(Character.getNumericValue(line.charAt(i))); 
      }else{ 
       System.out.print(Character.getNumericValue(line.charAt(i))); 
       Stack2.push(Character.getNumericValue(line.charAt(i))); 
      } 

      pushToFirstStack = !pushToFirstStack; 
     } else { 
      //sets operator 
      if(line.charAt(i) == add){ 
       return; 
      } 
      else{ 
       setAdd = false; 
      } 
     } 
    } 
    //displaying stacks debug 
    Stack1.display(); 
    Stack2.display(); 
} 
+1

你能打印你得到的输出吗? –

+0

注意:为什么不把字符串分成字符数组然后迭代它呢?它会避免每次都使用'line.charAt(i)'。 –

回答

0

,你没有提供的输出实例的事实使得它有点难以回答,但我怀疑该行pushToFirstStack = !pushToFirstStack;应该在的else分支如果。

现在,您正在构建第一个具有奇数索引数字的堆栈,第二个数字具有偶数索引,从而导致交织输出。

+0

这是目前的目标,它应该读取第一个字符,将其解析为一个int,将其推送到第一个堆栈,然后读取下一个字符,将其修改为int并将其推送到第二个堆栈并保留去 – CLR45