Оптимизация постфикса в инфикс - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь построить синтаксис из постфиксного ввода. Это мой текущий код, и он недостаточно быстр. 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));
    }
        }

1 Ответ

0 голосов
/ 09 сентября 2018
  • Не использовать .available(). Это странный метод. Он делает то, что говорится в его спецификации, но если вы внимательно прочитаете эту спецификацию, вы поймете, что то, что она делает, фактически бесполезно. В частности, available() может возвращать 0, даже если поток еще не закрыт. (Это тривиально показать, читая из стандартного и не набирая некоторое время). Правильный способ определения конца ввода - проверить число, которое возвращает read(): оно вернет -1, когда поток закончится.

  • Что касается вашего вопроса: ничто в этом коде не является медленным. Итак, либо он уже идет как можно быстрее, либо поток входных данных, из которого вы читаете, имеет присущие ему недостатки, о которых я не могу вам рассказать, потому что вы не показали эту часть кода, или этот метод readNext() источник медлительности.

...