Java 如何使for循环从任意位置开始并在同一位置结束?
我有一个整数类型的数组列表,比如1,2,3,4,5,6,7,8,9。我需要用动态索引值对列表进行重新排序。假设如果我将索引值传递为4,数组应该重新排序为5,6,7,8,9,1,2,3,4…我不懂Java,但我会这样做:Java 如何使for循环从任意位置开始并在同一位置结束?,java,android,Java,Android,我有一个整数类型的数组列表,比如1,2,3,4,5,6,7,8,9。我需要用动态索引值对列表进行重新排序。假设如果我将索引值传递为4,数组应该重新排序为5,6,7,8,9,1,2,3,4…我不懂Java,但我会这样做: public void foo(int index, array arr) { int len = arr.length; int pos = 0; string hs = ""; for(int i = index+1;i != index;i+
public void foo(int index, array arr) {
int len = arr.length;
int pos = 0;
string hs = "";
for(int i = index+1;i != index;i++) {
if(i = len-1) {
i=0
}
hs = arr[pos];
arr[pos] = arr[i];
arr[i] = arr[pos];
pos++;
}
}
我希望这能帮助你,或者至少能激励你 我不赞成这个。。改用
Collections.subList()
fun reorder(list: ArrayList<Int>, breakIndex: Int): ArrayList<Int> {
return (list.subList(breakIndex, list.size) + list.subList(0, breakIndex)) as ArrayList<Int>
}
fun重新排序(列表:ArrayList,breakIndex:Int):ArrayList{
返回(list.subList(breakIndex,list.size)+list.subList(0,breakIndex))作为ArrayList
}
这是在科特林,但我想你明白了。否则请告诉我
编辑:我可以为您添加Java版本。虽然我已经有一段时间没有使用Java了,所以这可能比必要的更难看,但是
public static ArrayList<Integer> reorder(ArrayList<Integer> list, Integer breakIndex) {
ArrayList<Integer> reorderedList = new ArrayList<>();
reorderedList.addAll(list.subList(breakIndex, list.size()));
reorderedList.addAll(list.subList(0, breakIndex));
return reorderedList;
}
公共静态ArrayList重新排序(ArrayList列表,整数breakIndex){
ArrayList reorderedList=新的ArrayList();
redordedList.addAll(list.subList(breakIndex,list.size());
redordedList.addAll(list.subList(0,breakIndex));
返回重新排序列表;
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList原创作家;
整数指数;
//初始值样本
originalList=新的ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9));
//初始值索引
指数=4;
//重新排列数组列表
ArrayList resultList=reorderListArray(原始列表,索引);
Log.v(“resultList”,“重新排序后的索引:”+resultList.toString());
}
公共ArrayList reorderListArray(ArrayList listArr,int indexValue){
ArrayList resultList=新建ArrayList();
int indexOrder=0;
//案例1
if(indexValue==listArr.get(0))返回listArr;
//案例2
if(indexValue==listArr.get(listArr.size()-1)){
收款。反向(listArr);
返回listArr;
}
//案例3
对于(int i=0;i
您需要检查参数输入:[数组列表]和[动态索引值]的条件。您尝试过什么吗?让我们看看你的效率:使用%operator.aww它是如此简单,工作如此出色。。多谢各位@Algar@Sri不用担心,我很乐意帮忙!:)如果您认为答案正确,请将其标记为正确,我将不胜感激:)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<Integer> originalList;
int index;
// init value sample
originalList = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9));
// init value index
index = 4;
// reorder array list
ArrayList<Integer> resultList = reorderListArray(originalList, index);
Log.v("resultList", "index after reorder: " + resultList.toString());
}
public ArrayList<Integer> reorderListArray(ArrayList<Integer> listArr, int indexValue) {
ArrayList<Integer> resultList = new ArrayList<Integer>();
int indexOrder = 0;
// case 1
if (indexValue == listArr.get(0)) return listArr;
// case 2
if (indexValue == listArr.get(listArr.size() - 1)) {
Collections.reverse(listArr);
return listArr;
}
// case 3
for(int i=0; i < listArr.size(); i++) {
if(listArr.get(i) == indexValue) {
indexOrder = i;
break;
}
}
for(int i=indexOrder; i < listArr.size(); i++) {
resultList.add(listArr.get(i));
}
for(int i=0; i < indexOrder; i++) {
resultList.add(listArr.get(i));
}
return resultList;
}