当我在其中插入2个数字时,为什么我的java代码会打印出[]

时间:2018-07-30 02:21:39

标签: java

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class forA1 {
     public static void main(String[] args) throws Exception{
            Scanner sc = new Scanner(System.in);
            String []num = sc.nextLine().split(" ");
            int n = Integer.parseInt(num[0]);
            int m = Integer.parseInt(num[1]);

            while(n != 0){
                // initialize the queue
                Queue<Integer> queue = new LinkedList<Integer>();
                queue.clear();
                for (int i = 1; i <= n; i++)
                    queue.add(i);

                //int res = 0;
                while (!queue.isEmpty()) {
                    for (int i = 0; i < m-1; i++)
                        queue.add(queue.remove());
                    queue.remove();
                }
                //System.out.println(res);
                //System.out.println(res);

                System.out.print(queue);

                String []num2 = sc.nextLine().split(" ");
                n = Integer.parseInt(num2[0]);
                m = Integer.parseInt(num2[1]);
            }
        }
}

当我输入2个数字时,它会打印出来[]。请问一下我为什么会这样,我是学生,所以如果我问的是对其他人来说很容易的问题,我表示歉意。

2 个答案:

答案 0 :(得分:1)

不确定您要对队列做什么,但是由于您有条件while (!queue.isEmpty()),无论您在循环内做什么(除非您有某种 break 逻辑,多亏@Andy的评论)您将永远不会离开它(即无限循环),或者在它之后得到一个空队列。

如果从

更改
            while (!queue.isEmpty()) { 
                for (int i = 0; i < m-1; i++)
                    queue.add(queue.remove());
                queue.remove();
            }

            for (int i = 0; i < m-1; i++)
                queue.add(queue.remove());
            queue.remove();

您将能够看到一些非空的输出(给定适当的mn值)。

答案 1 :(得分:0)

首先,由于您没有递减'n'的值,所以这是一个无限循环,到目前为止已提供了正确的输入。 “ n”和“ m”的值:-

    while(n != 0){
...
// lines of code
String []num2 = sc.nextLine().split(" ");
            n = Integer.parseInt(num2[0]);
            m = Integer.parseInt(num2[1]);
}

第二,对于您的问题-“ 当我插入2个数字时,它会打印出[]。请问一些可以向我解释为什么会发生这种情况?””实际上,您已经编写了一段代码在您的程序中如下所示:-

    while (!queue.isEmpty()) {
                for (int i = 0; i < m-1; i++)
                    queue.add(queue.remove());
                queue.remove();
            }

此代码块的最后2行(恰好在关闭大括号之前)对队列产生反作用。它将使您的队列为空(您可以通过在while循环之前和之后放置-“ System.out.println(queue);”来检查队列,通过这样做可以更清楚地理解)。结果,您将在控制台窗口中获得“ []”作为输出,该输出为空Queue!

PS:-在Java中,无论何时我们希望了解程序流程的地方,我们总是使用“ System.out.println();”进行调试。