猿问

无法阻止 BufferReader 在控制台中接受输入

我正在尝试制作一个程序,该程序将第一个参数作为列表的(大小 + 1),即元素的数量。为了保持元素和索引相同,我在列表的索引 0 添加了一个假值。当程序运行时,它需要来自用户的三个输入(这是我想要的)并终止。


但是当我取消对其余代码的注释(实际上是必需的)时,程序会继续接受输入并且不会终止我尝试执行的任何操作,除非我按下终止按钮。


请有人解释我为什么会这样?


import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.StringTokenizer;


public class FastReader {


    BufferedReader br;

    StringTokenizer st;


    public FastReader() {

        br = new BufferedReader(new InputStreamReader(System.in));

    }


    String next() {

        while (st == null || !st.hasMoreElements()) {

            try {

                st = new StringTokenizer(br.readLine());

            }

            catch (IOException e) {

                e.printStackTrace();

            }

        }

        return st.nextToken();

    }


    int nextInt() {

        return Integer.parseInt(next());

    }


    long nextLong() {

        return Long.parseLong(next());

    }


    double nextDouble() {

        return Double.parseDouble(next());

    }


    String nextLine() {

        String str = "";

        try {

            str = br.readLine();

        }

        catch (IOException e) {

            e.printStackTrace();

        }

        return str;

    }


    void close() {

        try {

            br.close();

        }

        catch (IOException e) {

            e.printStackTrace();

        }

    }

}

public static void main(String[] args) throws Exception {

    FastReader s = new FastReader();

    int n = s.nextInt();

    int k = s.nextInt();

    int x = s.nextInt();

    ArrayList<Integer> p = new ArrayList<>();

    p.add(0);

    for (int i = 1; i <= n; i++) {

        p.add(i, i);

    }

    //for(int i=x; p.size()>2; i=(1+1)%p.size()){

    //  int cp= i;

    //  int tk= cp%k;

    //  for(int j = cp+1; j<=cp+tk; j++){

    //      p.remove((Object)j);

    //  }

    //}

    //System.out.print(p.get(1));

}


回首忆惘然
浏览 159回答 2
2回答

慕虎7371278

你的for条件是问题。你陷入了无限循环。这与读取输入数据无关。for(int&nbsp;i=x;&nbsp;p.size()>2;&nbsp;i=(1+1)%p.size()){将首先做i = x,然后如果p.size()>2&nbsp;i将等于(1+1)%p.size(),即2。而且 for 循环的条件永远为真:在某些时候,您的列表p将包含[0, 1, 2]并且不能2+1从列表中删除大于或等于的元素。
随时随地看视频慕课网APP

相关分类

Java
我要回答