在Java中使用队列读取一行

时间:2017-09-05 15:42:36

标签: java queue

我正在尝试使用Queue并从用户输入中读取字符串。不幸的是,它没有用。下面显示的代码有什么问题?

public static void main(String[] args) {

                // TODO Auto-generated method stub
        java.util.Queue  q=new LinkedList<String>(); 

        Scanner scan= new Scanner(System.in);
        System.out.println("Enter a data");
        String line=scan.nextLine();
        Iterator<String> it=q.iterator();
        while (it.hasNext()){
            System.out.println("dongudeyim");
            if (it.next().equals("(")){
                q.add(line);
                System.out.println(q.isEmpty());
            }
            if(q.iterator().equals(")")){
                q.poll();
            }

            System.out.println(q.isEmpty());
        }
    }

2 个答案:

答案 0 :(得分:0)

@javalearner

在您的代码中,

  String line=scan.nextLine();
  Iterator<String> it=q.iterator();
  while (it.hasNext()){

此队列中没有添加任何值(q)。所以Iterator(它)每次都会返回 false 而while循环不会被执行。

在调用q上的迭代器方法之前,需要在队列中添加一些值。

  if (it.next().equals("(")){
       q.add(line);
       System.out.println(q.isEmpty());
  }
  if(q.iterator().equals(")")){
       q.poll();
  }

在上面的部分中,不需要再次调用迭代器方法。您只需将it.next()的值存储在变量中,然后在if块中使用它。

String value = it.next();
if(value.equals(")")) {

https://beginnersbook.com/2014/06/java-iterator-with-examples/
这将有助于您更好地理解:)。

答案 1 :(得分:0)

感谢您的帮助。我这样解决了。

import java.util.*;


    public class Queue {

        public static void main(String[] args) {

                    // TODO Auto-generated method stub
            java.util.Queue<String>  q=new LinkedList<String>(); 

            Scanner scan= new Scanner(System.in);
            System.out.println("Enter a data");
            String line=scan.nextLine();

                System.out.println(line);

                for (int i=0;i<line.length();i++){

                    if(line.charAt(i)==('(')){
                    q.add("(");

                    } else if(line.charAt(i)==(')')){
                        q.poll();

                    }
                }System.out.println(q.isEmpty());


        }
    }