Метод isEmpty () не определен для ошибки типа InputStream - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь получить связанный список реализации алгоритма стека-поп. Вот полный код. Код на самом деле взят из курса Алгоритм, часть 1 в Coursera.

public class LinkedStackOfString {
    private Node first = null;
    private class Node {
        String item;
        Node next; 
    }

    public boolean isEmpty() {
        return first == null;
    }

    public void push(String item) {
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;
    }

    public String pop() {
        String item = first.item;
        first = first.next;
        return item;
    }


    public static void main(String[] args) {
        LinkedStackOfString stack = new LinkedStackOfString();
        while (!System.in.isEmpty())
        {
            String s = System.in.readString();
            if (s.equals("-")) System.out.println(stack.pop());
            else stack.push(s);
        }
    }
}

Я помещаю полный текст сообщения об ошибке. Я получаю сообщение об ошибке, подобное этому:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The method isEmpty() is undefined for the type InputStream
    The method readString() is undefined for the type InputStream

    at linkedList/linkedList.LinkedStackOfString.main(LinkedStackOfString.java:30)

Может кто-нибудь объяснить, что происходит? Я новичок в Java

Ответы [ 2 ]

5 голосов
/ 06 марта 2020

Изменить; Вы пытаетесь получить входные данные от объекта Scanner, поэтому вы ссылаетесь на System.in. Вам необходимо создать новый объект Scanner, используя System.in в качестве InputStream.

    public static void main(String[] args) {
        LinkedStackOfString stack = new LinkedStackOfString();

        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNext()) {
            String input = scanner.next();

            if (input.equals("-")) {
                String popped = stack.pop();

                System.out.println(String.format("Popped value is %s.", popped));
            } else {
                stack.push(input);
            }
        }
    }
2 голосов
/ 06 марта 2020

Полагаю, вам нужна программа, которая продолжает добавлять элементы в стек. Я бы предложил изменить метод main(), как показано ниже

public static void main(String[] args) {
    LinkedStackOfString stack = new LinkedStackOfString();

    String line ;
    Scanner in = new Scanner(System.in);
    while( (line=in.nextLine() )!= "N"){
      if (line.equals("-")){
        System.out.println(stack.pop());
      }
      else {
        stack.push(line);
      }
    }
  }

По сути это означает, что пользователь должен продолжать вводить все, что он хочет добавить в стек, и вводить -, когда он хочет pop и распечатать верхний элемент. Пользователь может ввести N, когда он хочет закончить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...