在我的代码中查看问题并识别其他问题

时间:2017-04-04 05:38:47

标签: javascript

CMD窗口正在发布 C:\ Users \ Dell \ Desktop \ PROGRA~1> node revers~2.js
events.js:160

  throw er; // Unhandled 'error' event
  ^

Error: ENOENT: no such file or directory, open  
'C:\Users\Dell\Desktop\PROGRA~1\Input_File.txt'
at Error (native)

我不知道它可能引用了什么,但我相信它可能是我用来运行我的代码的Node.js软件的一部分。

感谢您提供的任何帮助。对不起,如果这个问题看起来很基本或有点自我解释,我就无法看到这个问题。

也可能是我没有适当的代码来执行此任务。

Input_File.txt

15 12 2 + -4 * + 3 - 

中的数据。我不知道这是否会有任何帮助。这是我试图让程序解决的反向波兰语功能。

'use strict' ;

var ArrayStack = require ( './ArrayStack' ) ;
const fs = require ( 'fs' ) ;
const readline = require ( 'readline' ) ;

var ArrayStack2 = new ArrayStack () ;
var readStream = fs.createReadStream ( 'Input_File.txt', 'utf8' ) ;
var rl = readline.createInterface ( {input:readStream} ) ;
rl.on ('line', function (inputLine)
            {
            console.log(inputLine) ;
            var tokens =  inputline.split( ' ' ) ;
            for ( var i = 0 ; i < tokens.length ; i ++ )
                {
                const token = tokens[i] ;
                var tokenCategory = 'operand' ;
                if ( token === '+' || token === '-' || token === '/' || token === '*' ) 
                {
                    tokenCategory = 'operator' ;
                    var B = ArrayStack2.pop() ;
                    var A = ArrayStack2.pop() ;
                    if ( token === '+' )
                    {
                        var answer = A + B ;
                        ArrayStack2.push(answer) ;
                                            }
                    elseif ( token === '-' )
                    {
                        var answer = A - B ;
                        ArrayStack2.push(answer) ;
                    }
                    elseif ( token === '/' )
                    {
                        var answer = A / B ;
                        ArrayStack2.push(answer) ;
                    }
                    elseif ( token === '*' )
                    {
                        var answer = A * B ;
                        ArrayStack2.push(answer) ;
                    }//end of sub conditional statement

                }//end of if statement
                else 
                {
                    ArrayStack2.push(token) ;
                    console.log (ArrayStack) ;
                }
              }//end of for loop

            });//end of function  

            rl.on ( 'close', function () {
            console.log('File now closed.');
            }) ; // end function   

这是用于存储数据然后解决问题的ArrayStack类。

'use strict' ;

var EmptyError = require( './EmptyError' ) ;

class ArrayStack
    {

    constructor ( )
        {
        // An empty array added as a "private" property of the stack.
        // Objects pushed onto the stack will be stored in this array.
        this._data = new Array() ;
        } // end constructor

    isEmpty ( )
        {
        return ( this._data.length === 0 ) ;
        } // end isEmpty

    push ( toPush )
        {
        this._data.push( toPush ) ;
        return this ;
        } // end push

    pop ( )
        {
        if ( this.isEmpty() )
            throw new EmptyError("Can't pop from an empty stack!") ;
        return this._data.pop( ) ;
        } // end pop

    top ( )
        {
        if ( this.isEmpty() )
            throw new EmptyError('An empty stack has no top!') ;
        return this._data [ this._data.length - 1 ] ;
        } // end top

    len ( )
        {
        return this._data.length ;
        } // end len

    } // end ArrayStack class

module.exports = ArrayStack ;

这是用于引用ArrayStack类的Empty Error类。

'use strict' ;

class EmptyError extends Error
    {
    constructor ( message )
        {
        // Ask superclass' constructor to initialize this object,
        // including creating its "message" property ...
        super ( message ) ;
        } // end constructor
    } // end EmptyError class

module.exports = EmptyError ;

3 个答案:

答案 0 :(得分:0)

'operator' === '-'等是字符串比较,绝不是operator-/*

相同

虽然没有经过测试,但我认为您已与token进行比较,但未与运营商进行比较

if (token === '+' || token === '-' || token === '/' || token === '*'); {
  //Rest of code
  if (token === '+') {
} else if (token === '-') {
    // rest of code
  }
// rest of code
}

答案 1 :(得分:0)

你错过了基本的if-else括号。正如@brk所说,你正在比较两个字符串 &#39;操作&#39;和&#39; +&#39;,&#39; - &#39;等等 这是更新的代码。检查这是否适合您。

'use strict' ; 

var ArrayStack = require ( './ArrayStack' ) ;
const fs = require ( 'fs' ) ;
const readline = require ( 'readline' ) ;

new ArrayStack () ;
var readStream = fs.createReadStream ( 'Input_File.txt', 'utf8' ) ;
var rl = readline.createInterface ( {input:readStream} ) ;
rl.on ('line', function (inputLine)
            {
            console.log(inputLine) ;
            var tokens =  inputline.split( ' ' ) ;
            for ( var i = 0 ; i < tokens.length ; i ++ )
                {
                const token = tokens[i] ;
                var tokenCategory = 'operand' ;
                if ( token === '+' || token === '-' || token === '/' || token === '*' ) 
                {
                    tokenCategory = 'operator' ;
                    var B = ArrayStack.pop() ;
                    var A = ArrayStack.pop() ;
                    if ( token === '+' )
                    {
                        var answer = A + B ;
                        ArrayStack.push(answer) ;
//the error shows here where CMD recognizes the else as an 'unexpected token' 
//have I missed something in setting up my nesting properly? 
                                            }
                    elseif ( token === '-' )
                    {
                        var answer = A - B ;
                        ArrayStack.push(answer) ;
                    }
                    elseif ( token === '/' )
                    {
                        var answer = A / B ;
                        ArrayStack.push(answer) ;
                    }
                    elseif ( token === '*' )
                    {
                        var answer = A * B ;
                        ArrayStack.push(answer) ;
                    }//end of sub conditional statement

                }//end of if statement
                else 
                {
                    ArrayStack.push(token) ;
                    console.log (ArrayStack) ;
                }
              }//end of for loop

            });//end of function  


            rl.on ( 'close', function () {
            console.log('File now closed.');
            }) ; // end function

我不知道你的文本文件是如何工作的。但是我已经更新了你的代码,几乎没有变化。你可以尝试这个。

var ArrayStack = require ( './ArrayStack' ) ;
const fs = require ( 'fs' ) ;
const readline = require ( 'readline' ) ;

var myStack
var readStream = fs.createReadStream ( 'Input_File.txt', 'utf8' ) ;
var rl = readline.createInterface ( {input:readStream} ) ;
rl.on ('line', function (inputLine)
            {
            console.log(inputLine) ;
            var tokens =  inputLine.split( ' ' ) ;
            ArrayStack.init(tokens, function (err, data) {
    if (err) {
        console.error('Error received');
    }
    else {
         myStack = data;
        console.log('pushed data '+data.first());

    }
});                 
            for ( var i = 0 ; i < tokens.length ; i ++ )
                {
                const token = tokens[i] ;
                var tokenCategory = 'operand' ;
                if ( token === '+' || token === '-' || token === '/' || token === '*' ) 
                {
                    tokenCategory = 'operator' ;
                    var B = myStack.pop();
                    var A = myStack.pop();
                    if ( token === '+' )
                    {
                        var answer = A + B ;
                        myStack.push(answer) ;
                                            }
                    elseif ( token === '-' )
                    {
                        var answer = A - B ;
                        myStack.push(answer) ;
                    }
                    elseif ( token === '/' )
                    {
                        var answer = A / B ;
                        myStack.push(answer) ;
                    }
                    elseif ( token === '*' )
                    {
                        var answer = A * B ;
                        myStack.push(answer) ;
                    }//end of sub conditional statement

                }//end of if statement
                else 
                {
                    myStack.push(token) ;
                    console.log (myStack) ;
                }
              }//end of for loop
            });//end of function  

            rl.on ( 'close', function () {
            console.log('File now closed.');
            }) ; // end function

答案 2 :(得分:0)

else是“意外令牌”的原因是因为您未{ / } /正确使用ifelse if else结构。

正确的语法是:

if (condition) {
  statement1
} else if (condition) {
  statement2
} else {
  statement3
}

...如果要使用单个语句,则大括号{}是可选的,但如果您使用 希望块包含多个语句。

在您的代码中,ifelse if块中的每一个都包含两行,因此您必须使用{}包围它们。

另外,在以下一行:

if ( token === '+' || token === '-' || token === '/' || token === '*' ) ;

...末尾的分号表示如果if条件为真,则执行 no 语句,即使您使用{开始下一行。

如果你修复了所有的大括号,你最终会得到这样的结果:

function (inputLine) {
  console.log(inputLine);
  var tokens = inputline.split(' ');
  for (var i = 0; i < tokens.length; i++) {
    const token = tokens[i];
    var tokenCategory = 'operand';
    if (token === '+' || token === '-' || token === '/' || token === '*') {
      tokenCategory = 'operator';
      var B = ArrayStack.pop();
      var A = ArrayStack.pop();
      if (token === '+') {
        var answer = A + B;
        ArrayStack.push(answer);
      } else if (token === '-') {
        var answer = A - B;
        ArrayStack.push(answer);
      } else if (token === '/') {
        var answer = A / B;
        ArrayStack.push(answer);
      } else if (token === '*') {
        var answer = A * B;
        ArrayStack.push(answer);
      } //end of sub conditional statement
    } //end of if statement
    else {
      ArrayStack.push(token);
      console.log(ArrayStack);
    }
  } //end of for loop    
} //end of function

(注意如果您愿意,可以将花括号放在自己的行上。)

同样在比较字符串'operator'的位置,你可能想要变量token