我正在尝试实现分流算法,但在读入一个字符后,我需要确定它是操作数还是操作符。输入文件有多行中缀表达式,我将转换为后缀表达式并进行求值。所以我需要读取每一行的每个字符,进行评估,然后继续下一行。我得到的错误是:
"错误:不兼容的类型:从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 == ')')
{........
感谢任何帮助。
答案 0 :(得分:1)
您的代码存在一些问题:
BufferedReader.read()
会返回-1
。你没有处理这件事。line
,因此当您致电input.read()
时,它会读取下一行的第一个字符!您可以使用line.charAt(0)
,也可以只使用input.read()
。这可能会解决您的问题:
// 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();