我一直在努力修改传递给方法的数组列表。我只能修改该数组列表而不在该方法中创建任何新的数组列表。
问题在于:
编写方法stutter
,其中ArrayList
Strings
和integer
k
作为参数,并用字符串的k个副本替换每个字符串。例如,如果列表在调用方法之前存储值["how", "are", "you?"]
且k为4,则应在方法执行完毕后存储值["how", "how", "how", "how", "are", "are", "are", "are", "you?", "you?", "you?", "you?"]
。如果k为0或负数,则呼叫后列表应为空。
创建新数组列表的一种方法是:
public static void stutter(ArrayList<String> list, int k) {
ArrayList<String> a = new ArrayList<String>();
String s = "";
if(k > 0) {
for(int i = 0; i < list.size(); i++) {
s = list.get(i);
for(int j = 0; j < k; j++) {
a.add(s);
}
}
}
}
仅在不创建新数组列表的情况下修改ArrayList<String> list
的一种方法是什么?感谢
答案 0 :(得分:1)
public static void addItem(List<String> list, int k){
int size = list.size() * k;
for (int i=0; i<size; i=i+k){
String s = list.get(i);
for (int j=0; j<k-1; j++){
list.add(i+j, s);
}
}
}
答案 1 :(得分:0)
在进行迭代之前,可以将ArrayList
的大小保存到变量中。
int size = list.size();
for(int i=0; i<k; i++){
for(int j=0; j<size; j++){
list.add(list.get(j));
}
}
但是,对于您的示例,列表将变为["how","are","your","how","are","your","how","are","your","how","are","your"]
。
如果你想要相同的值在一起:
int size = list.size();
for(int i=0;i<size;i++){
String s = list.get(i*k);
for(int j=0;j<k-1;j++){
list.add(i*k+j, s);
}
}
答案 2 :(得分:0)
public static void addItem(List<String> list, int k) {
int size = list.size();
for (int i = 0; i < size * (k - 1); i++) {
list.add("");
}
for (int i = size - 1; i >= 0; i--) {
for (int m = k - 1; m >= 0; m--) {
list.set(k * i + m, list.get(i));
}
}
}
这种方法将保持两个指针,向后填充列表,不涉及任何移位。
答案 3 :(得分:0)
public static void stutter(ArrayList<String> arrayList, int k) {
if (k > 0) {
int index = 0;
k = k - 1;
for (int i = 0; i < arrayList.size(); i = i + (k + 1)) {
for (int j = 0; j < k; j++) {
arrayList.add(index, arrayList.get(i));
}
index = index + (k + 1);
}
}
else
arrayList.clear();
}
输入:[how, are, you?], k=4
输出:[how, how, how, how, are, are, are, are, you?, you?, you?, you?]
答案 4 :(得分:-1)
public static void stutter(ArrayList<String> list, int k) {
if (k <= 0) {
list.clear();
}
for (int i = list.size() - 1; i >= 0; i--) {
for (int r = 1; r < k; r++) {
list.add(i + 1, list.get(i));
}
}
}