我正在尝试制作一个程序,该程序将第一个参数作为列表的(大小 + 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
从列表中删除大于或等于的元素。
添加回答
举报
0/150
提交
取消