簡體   English   中英

Java中的ArrayList; 同時交換和反轉

[英]ArrayList in Java; Swap and reverse at same time

是否有任何方法可以同時進行交換和反轉? 我來解釋一下:

如果我有,例如,十個整數:1 2 3 4 5 6 7 8 9 10,現在我想從6到10反轉,結果:1 2 3 4 5 10 9 8 7 6,現在從8到6,結果:1 2 3 4 5 10 9 6 7 8,並且一次又一次。

我試圖分成兩個數組,反向一個並加入它們:

List<Integer> listaFinal = new ArrayList<Integer>();
    for (int i = 0; i < vueltasDar; i++) {
    int b = 1;
    int resta = intTortitas.length - intVueltas[b];
    List<Integer> crawl_list1 = arrayTortitasList.subList(0, resta);
    List<Integer> crawl_list2 = arrayTortitasList.subList(
        resta + 1, intTortitas.length - 1);
    Collections.reverse(crawl_list2);
    listaFinal.addAll(crawl_list1);
    listaFinal.addAll(crawl_list2);

    b++;
    }

但它不起作用。

非常感謝你

更新:所以......最終的代碼。 謝謝。 此代碼允許輸入以-1結尾的數字,在下一個輸入中,您可以輸入多個輸入,然后是反轉數字。

輸入示例:

5 4 3 2 1 -1
0
5 4 3 2 1 -1
2 3 2
5 4 3 2 1 -1
1 5
-1
0

輸出示例:

1
2
5

碼:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;

public class pancake {
    public static void main(String[] args) throws NumberFormatException,
        IOException {

boolean corriendo = true;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (corriendo) {
    String tortitas = br.readLine();
    if (tortitas.equals("0")) {
    corriendo = false;
    break;
    }
    String vueltas = br.readLine();
    String[] tortitasArray = tortitas.split(" ");
    int[] intTortitas = new int[tortitasArray.length];
    for (int i = 0; i < tortitasArray.length; i++) {
    intTortitas[i] = Integer.parseInt(tortitasArray[i]);
    }

    String[] vueltasArray = vueltas.split(" ");
    int[] intVueltas = new int[vueltasArray.length];
    for (int i = 0; i < vueltasArray.length; i++) {
    intVueltas[i] = Integer.parseInt(vueltasArray[i]);
    }
    int[] arrayTortitas = Arrays.copyOf(intTortitas,
        intTortitas.length - 1);

    int vueltasDar = intVueltas[0];

    ArrayList<Integer> arrayTortitasList = new ArrayList<>();
    for (int i = 0; i < intTortitas.length - 1; i++) {

    arrayTortitasList.add(arrayTortitas[i]);
    }

    if (arrayTortitas.length > 0) {
    for (int i = 1; i <= vueltasDar; i++) {
        reverse(arrayTortitas,
            arrayTortitas.length - intVueltas[i],
            arrayTortitas.length - 1);
    }
    }
    if (arrayTortitas.length < 1) {
    break;
    } else {
    int resultado = arrayTortitas[arrayTortitas.length - 1];
    System.out.println(resultado);
    }

}

}

public static void reverse(int[] arrayTortitas, int a, int b) {

while (a < b) {
    int temp = arrayTortitas[a];
    arrayTortitas[a] = arrayTortitas[b];
    arrayTortitas[b] = temp;
    a++;
    b--;
}

}

}

很簡單:

public static void reverse(int[] array, int a, int b) { // both inclusive
    while(a<b) {
        int temp = array[a];
        array[a] = array[b];
        array[b] = temp;
        a++;
        b--;
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM