Bubble sort ArrayList<Integer>

Olá pessoal sou meio novo no Java e tenho que fazer uma método com a seguinte assinatura “public static void ordenar(List list)”, utilizando o bubble sort,
porem no segundo exercício eu tenho que passar para esse método uma ArrayList de 1000 elementos selecionados randomicamente (para testar estou fazendo com 10) mas ele esta dando os seguintes erros.

Exception in thread “main” java.lang.IndexOutOfBoundsException: Index: 10, Size: 10
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at EX28.EX28.ordenar(EX28.java:24)
at EX28.EX28.main(EX28.java:57)
Java Result: 1

segue meu código.

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package EX28;

import java.lang.Integer;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;

/**
*

  • @author Guilherme
    */
    public class EX28 {

    public static void ordenar(List list) {

     ArrayList<Integer> al = (ArrayList<Integer>) list;
     imprimir(al);
     for (int i = 0; i < al.size() - 1; i++) {
         for (int j = 0; j < al.size() - 1; j++) {
             if (al.get(i) > al.get(j + i)) {
                 swap(al, j, j + 1);
             }
         }
     }
     imprimir(al);
    

    }

    private static void swap(ArrayList a, int i, int j) {

     int temp = a.get(i);
     a.set(i, a.get(j));
     a.set(j, temp);
    

    }

    public static void imprimir(ArrayList list) {
    for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
    }
    System.out.println("<--------------------------------------------->");
    }

    public static ArrayList criarArrayList() {
    ArrayList list = new ArrayList();
    for (int i = 0; i <= 9; i++) {
    list.add((int) ((int) 1 + (Math.random() * 10)));
    }
    return list;
    }

    public static void main(String[] args) {
    ArrayList list = criarArrayList();
    imprimir(list);
    ordenar(list);
    }
    }

ArrayList<Integer> al = (ArrayList<Integer>) list; imprimir(al); for (int i = 0; i < al.size() - 1; i++) { for (int j = 0; j < al.size() - 1; j++) { if (al.get(i) > al.get(j + i)) { //Aqui você está tentando pegar um elemento fora do Index. Exemplo: A lista tem 10 elementos, vc estaria tentando pegar o 11º... swap(al, j, j + 1); } } }

Se possível tenta decorar isso: “java.lang.IndexOutOfBoundsException”
É uma excessão que sempre será lançada quando você tentar acessar um elemento de uma lista que não existe.

Ou seja, se eu fizer isso:

List<String> minhaLista = new ArrayList<String>(); minhaLista.add("ABC"); minhaLista.add("CDE");

Significa que tenho 2 elementos, um na posição zero e outro na posição um. (O primeiro index sempre é zero).
Se eu tentar fazer algo como “minhaLista.get(2)” irá dar “java.lang.IndexOutOfBoundsException”!!!
Porque somente tenho objetos na posição: minhaLista.get(0) e minhaLista.get(1).

Conseguiu entender?
Expliquei o erro e a linha que ele está acontecendo no seu código, não irei te dar a resposta para que você possa pensar e solucionar sozinho…assim nunca mais irá esquecer :wink:

Abraços!!!

Nos… :? nem percebi vlw.
to solucionando aqui!!! :smiley: