后缀到中缀优化
Postfix to infix optimization
我正在尝试从后缀输入构建语法。这是我当前的代码,速度还不够快。 t 是一个 BufferedInputStream 对象,readNext() 读取输入中的下一个数字。
有什么想法可以优化这段代码的性能,或者其他更快的方法吗?
for(int j = t.read();t.available()>0;j=t.read()) {
if(j==32) continue;
if(j==43||j==45||j==42||j==47) {
Node i = stack.pop();
Node k = stack.pop();
stack.push(new Node(k,i,j));
}else {
int number = readNext(j);
stack.push(new Node(number));
}
}
不要使用.available()
。这是一个奇怪的方法。它按照其规范中的说明进行操作,但如果您仔细阅读该规范,您就会意识到它所做的实际上是无用的。具体来说,即使流尚未关闭,available()
也可以 return 0。 (通过从标准输入中读取而不是暂时输入来显示这是微不足道的)。检测输入结束的正确方法是检查 read()
returns 的数字:当流结束时它会 return -1
。
关于您的问题:此代码中的任何内容都不慢。因此,要么它已经尽可能快地运行,要么您正在读取的输入流具有固有的低效率,我无法告诉您,因为您没有显示那部分代码,或者 readNext()
方法是缓慢的根源。
我正在尝试从后缀输入构建语法。这是我当前的代码,速度还不够快。 t 是一个 BufferedInputStream 对象,readNext() 读取输入中的下一个数字。
有什么想法可以优化这段代码的性能,或者其他更快的方法吗?
for(int j = t.read();t.available()>0;j=t.read()) {
if(j==32) continue;
if(j==43||j==45||j==42||j==47) {
Node i = stack.pop();
Node k = stack.pop();
stack.push(new Node(k,i,j));
}else {
int number = readNext(j);
stack.push(new Node(number));
}
}
不要使用
.available()
。这是一个奇怪的方法。它按照其规范中的说明进行操作,但如果您仔细阅读该规范,您就会意识到它所做的实际上是无用的。具体来说,即使流尚未关闭,available()
也可以 return 0。 (通过从标准输入中读取而不是暂时输入来显示这是微不足道的)。检测输入结束的正确方法是检查read()
returns 的数字:当流结束时它会 return-1
。关于您的问题:此代码中的任何内容都不慢。因此,要么它已经尽可能快地运行,要么您正在读取的输入流具有固有的低效率,我无法告诉您,因为您没有显示那部分代码,或者
readNext()
方法是缓慢的根源。