【发布时间】:2015-04-09 20:37:05
【问题描述】:
public static <T> ArrayList<T> rotate(ArrayList<T> aL, int shift) 方法接受 String 的 Arraylist(至少在这个例子中)和一个 shift,它指示数组列表应该移动多少。如果我有,让我们说一个 arayList 的
[ A, B, C, D, E, F, G]
而移位是2,所以方法返回
[ F, G, A, B, C, D, E]
或者另一个例子,
[ A, B, C, D, E, F, G]
而shift是4,则方法返回
[ D, E, F, G, A, B, C]
我的方法完全错误,不知道如何解决这个问题。 smb 可以帮我吗?
import java.util.ArrayList;
public class Rotation{
// Demonstrate rotat(a,shift) method
public static void main(String arg[]){
ArrayList<Character> charsL;
charsL = new ArrayList<Character>();
char [] chars = { 'A', 'B', 'C',
'D', 'E', 'F'};
for(char c : chars){
charsL.add(c);
}
// charsL = [ A, B, C, D, E, F]
ArrayList<Character> result1;
result1 = rotate(charsL, 2);
// result1== [ E, F, A, B, C, D]
System.out.println(result1);
result1 = rotate(charsL, 7);
// result1== [ F, A, B, C, D, E]
System.out.println(result1);
// WORKS WITH SRTINGS TOO
ArrayList<String> stringL;
stringL = new ArrayList<String>();
String [] strs = { "A", "B", "C",
"D", "E", "F", "G" };
for(String s : strs){
stringL.add(s);
}
// stringL = [ A, B, C, D, E, F, G]
ArrayList<String> result2;
result2 = rotate(stringL, 7);
// result2== [ A, B, C, D, E, F, G]
System.out.println(result2);
result2 = rotate(stringL, 4);
// result2== [ D, E, F, G, A, B, C]
System.out.println(result2);
}
public static <T>
ArrayList<T> rotate(ArrayList<T> aL, int shift){
// YOUR DEFINITION HERE
ArrayList <T> newValues = new ArrayList<>();
ArrayList <T> temp = new ArrayList<>();
for(int i = 0; i < aL.size(); i++)
{
newValues.remove(aL.get(shift));
newValues.add(aL.get(i));
//newValues.add(shift, aL.get(i));
}
return newValues;
}
}
【问题讨论】:
-
你能解释(或更正)你的第一个例子吗?为什么列表的大小发生了变化?你在
F和A之间错过了G吗? -
我对轮班规则有点不清楚。您是否打算让 4 的移位旋转数据,但 2 的移位既旋转又截断它?
-
在不考虑旋转算法的情况下,我可以告诉你这一行:
newValues.remove(aL.get(shift));正在尝试从空的List中删除值,并且会失败。