当我从标准输入中读取内容时,只有ArrayList
中的备用位置占用数据。输入数据为:
1
2
3
4
5
6
7
8
9
0
我已经在多个地方尝试过,但是我仍然得到相同的输出。
public class Solution {
public static void main(String[] args) throws Exception {
ArrayList<String> strings= new ArrayList<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 10; i++) {
strings.add(null);
}
for (int i = 0; i < 10; i++) {
strings.add(9-i, br.readLine());
}
for (int i = 0; i < 10; i++) {
System.out.println(strings.get(i));
}
}
}
我期望的结果:
0
9
8
7
6
5
4
3
2
1
实际结果:
0
null
9
null
8
null
7
null
6
null
答案 0 :(得分:5)
add
中的strings.add(9-i, br.readLine())
执行插入操作,而不是替换操作。上一个循环为您看到的nulls
。
要获得理想的结果,只需在摆脱第一个循环后将其插入第一个位置即可。
for(int i = 0; i < 10; i++){
strings.add(0, br.readLine());
}
如果您要预先分配列表以避免移位,请使用set
而不是add
来替换值:
for(int i = strings.size() - 1; i >= 0; i--){
strings.set(i, br.readLine());
}
没有理由在每次迭代中计算9 - i
。
答案 1 :(得分:3)
您应该更改
strings.add(9-i, br.readLine());
到
strings.set(9-i, br.readLine());
这将用输入替换null
值,而不是在null
的{{1}}元素之间插入输入。
答案 2 :(得分:0)
首先删除然后添加,就像这样:
public static void main( String args[] ) throws IOException {
ArrayList<String> strings= new ArrayList<String>();
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<10;i++){
strings.add(br.toString());
}
for(int i=0;i<10;i++){
strings.remove(9-i);
strings.add(9-i, br.readLine());
}
for(int i=0;i<10;i++)
System.out.println(strings.get(i));
}