为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

回首忆惘然 2021-08-04 17:02:37
我正在尝试制作一个程序,该程序将第一个参数作为列表的(大小 + 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));}
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你的for条件是问题。你陷入了无限循环。这与读取输入数据无关。

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

将首先做i = x,然后如果p.size()>2 i将等于(1+1)%p.size(),即2。而且 for 循环的条件永远为真:在某些时候,您的列表p将包含[0, 1, 2]并且不能2+1从列表中删除大于或等于的元素。


查看完整回答
反对 回复 2021-08-04
  • 2 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信