如何让for循环从任何地方开始并结束它的相同位置?

时间:2018-04-19 07:40:48

标签: java android

我有一个整数类型的数组列表,比如1,2,3,4,5,6,7,8,9.i需要用动态索引值重新排序列表,假如我传递了索引值作为4,阵列应重新排序为5,6,7,8,9,1,2,3,4 .....

4 个答案:

答案 0 :(得分:0)

我不认识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++) {
        if(i = len-1) {
            i=0
        }
        hs = arr[pos];
        arr[pos] = arr[i];
        arr[i] = arr[pos];
        pos++;
    }
}

我希望这可以帮助你或者至少激励你!

答案 1 :(得分:0)

我不会循环使用此功能。使用Collections.subList()代替

fun reorder(list: ArrayList<Int>, breakIndex: Int): ArrayList<Int> {
    return (list.subList(breakIndex, list.size) + list.subList(0, breakIndex)) as ArrayList<Int>
}

这是在科特林,但我想你明白了。别的我知道了。

编辑:我可以为您添加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;
}

答案 2 :(得分:0)

有很多方法可以解决这个问题。这只是其中之一。

private int[] reorder(int[] src, int index) {
        if (index < 0 || index >= src.length) {
            // TODO: Return original array or throw an IllegalArgurmentException if you want.
            // For simply I just return original array.
            return src;
        }

        int[] dest = new int[src.length];
        int length = src.length - index;
        System.arraycopy(src, index, dest, 0, length);
        System.arraycopy(src, 0, dest, length, index);

        return dest;
    }

答案 3 :(得分:0)

@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;
}

你需要检查params输入的条件:[array list]和[dynamic index values]。