从int到char可能有损;从文本文件读入时发生

时间:2015-03-31 20:05:05

标签: java algorithm char int

我正在尝试实现分流算法,但在读入一个字符后,我需要确定它是操作数还是操作符。输入文件有多行中缀表达式,我将转换为后缀表达式并进行求值。所以我需要读取每一行的每个字符,进行评估,然后继续下一行。我得到的错误是:

  

"错误:不兼容的类型:从int到char的可能有损转换"

所以这是我目前所拥有的一部分:

 BufferedReader input = new BufferedReader(new FileReader("input.txt"));

        char token;
        char popOp;
        int popInt1;
        int popInt2;
        int result;
        String line;
        char temp = 'a';

        // While the input file still has a line with characters
        while ((line = input.readLine()) != null)
        {
            // Create an operator and operand stack                         
            operatorStack opStack = new operatorStack();
            opStack.push(';');
            operandStack intStack = new operandStack();

            token = input.read(); // Get the first token

            if(Character.isDigit(token))
            {
                System.out.print(token);
                intStack.push(token);
            }
            else if(token == ')')
            {........

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

    如果您已到达流的末尾,则
  1. BufferedReader.read()会返回-1。你没有处理这件事。
  2. 您已将文本行读入line,因此当您致电input.read()时,它会读取下一行的第一个字符!您可以使用line.charAt(0),也可以只使用input.read()
  3. 这可能会解决您的问题:

       // While there are characters to consume.
        for(int ch; (ch = input.read()) != -1;)
        {
            // Create an operator and operand stack                         
            operatorStack opStack = new operatorStack();
            opStack.push(';');
            operandStack intStack = new operandStack();
    
            token = (char)ch; // Get the token
    
            if(token == '\r' || token == '\n')  // handling line ends.
                 continue;
    
            if(Character.isDigit(token))
            {
                System.out.print(token);
                intStack.push(token);
            }
            else if(token == ')')
            {........
    

答案 1 :(得分:0)

BufferedReader会返回int。上面的程序试图将结果存储到char变量。将其类型化为char应修复它:

token = (char)input.read();