Índice fuera de los límites (CSE permutaciones problema) java

0

Pregunta

import java.util.*;
import java.io.*;
public class cses6 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        String m = "";

        ArrayList<Integer> even = new ArrayList<Integer>();
        ArrayList<Integer> odd = new ArrayList<Integer>();
        ArrayList<String> stringjoin = new ArrayList<String>();
        if (n == 1) {
            System.out.println(n);
        }
        if (1 < n && n< 4) {
            System.out.println("NO SOLUTION");
        }

        even.set(0, 4);
        even.set(1, 2);
        odd.add(0, 1);
        
        for (int i = 1; i < n+1 && i > 4; i++) {
            if (i % 2 == 0) {
                even.add(i);
            } else {
                odd.add(i);
            }


        }
        odd.addAll(even);

        for (int i = 1; i < odd.size(); i++) {
            m = Integer.toString(odd.get(i));
            stringjoin.set(i,m);
        }

        System.out.println(stringjoin.toString().replace(", ", " ").replace("[", "").replace("]",""));

        
    }
}

Mi problema es: De entrada

La única línea de entrada contiene un entero n.

Salida

Impresión de una hermosa permutación de los enteros de 1, 2,...,n. Si existen varias soluciones, usted puede imprimir cualquiera de ellos. Si no hay soluciones, print "NO hay SOLUCIÓN".

Sin embargo, puedo obtener el índice fuera de los límites de error. Que parte de mi código está mal y cómo puedo solucionar el error? Error tiene lugar en la línea 19

java permutation
2021-11-24 00:40:31
1

Mejor respuesta

-1

El código incorrecto está aquí

even.set(0, 4);

y la razón es aquí

    public E set(int index, E element) {
        rangeCheck(index);

        E oldValue = elementData(index);
        elementData[index] = element;
        return oldValue;
    }

    private void rangeCheck(int index) {
        if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }

Usted puede utilizar el set(int index, E element) método de vacío de un ArrayList

2021-11-24 00:52:28

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................