problem z sortowaniem

0

Hej,

w sumie dopiero zaczynam swoją przygodę z programowaniem i po przerobieniu kilkunastu zadań utknąłem na jednym związanym z sortowaniem liczb z tablicy. Program powinien pobierać 5 liczb całkowitych wpisanych przez użytkownika i wyświetlić je posortowane. Próbowałem już kilka razy i na razie nie udało mi się skleić tego tak żeby wyszło bez błędu w konsoli Jakaś szansa na drobną pomoc? Z góry dzięki <3

import java.util.Scanner;


public class zadanie4 {
	
	public static void main(String[] args) {
		int l1, l2, l3, l4, l5;
		int[] liczby = new int[5];
		
		System.out.println("Wpisz 5 kolejnych liczb: ");
		
		l1 = getInt();
		l2 = getInt();
		l3 = getInt();
		l4 = getInt();
		l5 = getInt();
		
		l1 = liczby[0];
		l2 = liczby[1];
		l3 = liczby[2];
		l4 = liczby[3];
		l5 = liczby[4];

		sortowanko(liczby);
		
		System.out.println("Posortowane liczby: ");
		
		for (int liczba:liczby) {
			
			
			System.out.println(liczba+" ");
			
		}
		
		
	}
	
	public static void sortowanko (int[] liczby) {
		
		for (int i=0; i<liczby.length; i++) {
			
			for (int j=0; j < liczby.length; j++) {
				
				if(liczby[j]>liczby[j + 1]) {
					
					int temp = liczby[j+1];
					liczby[j+1] = liczby[j];
					liczby[j] = temp;
					
				}
				
			}
			
		}
		
	}
	
	public static int getInt() {
		
		return new Scanner(System.in).nextInt();
		
	}

}

0

Jak Wczytasz poprawnie te liczby do tablicy (zapisać integery do elementów tablicy, a nie na odwrót :), a czemu nie wczytywać bezpośrednio tablicy w pętli?), to tak wyglada, poprawny Insertion Sort, w tamtym Wychodziłes poza zakres:

    public static void sortowanko (int[] liczby) {
      int i, j, min;
      int sz = liczby.length;
      for (i = 0; i < sz - 1; ++i) {
        min = i;
        for (j = i + 1; j < sz; ++j) {
          if (liczby[j] <= liczby[min])
            min = j;
        }
        int tmp = liczby[min];
        liczby[min] = liczby[i];
        liczby[i] = tmp;
      }  
    }
0

Co do błędu to wyświetla się coś takiego:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at zadanie4.sortowanko(zadanie4.java:45)
at zadanie4.main(zadanie4.java:25)

0

Niepotrzebnie tworzysz osobne zmienne dla wczytywania, gdzie i tak masz w następnej linijce już przygotowaną do tego tablicę. Użyj tutaj pętli, dzięki temu nie będziesz musiał pisać właściwie tego samego wiele razy:

Scanner reader = new Scanner(System.in);
int[] liczby = new int[5];
for (int i = 0; i < liczby.length; i++) {
    System.out.print("Wprowadź " + Integer.toString(i + 1) + " liczbę: ");
    liczby[i] = reader.nextInt();
}
Arrays.sort(liczby);
System.out.print(Arrays.toString(liczby));

Zwróć uwagę także na wyszukiwanie wbudowanych funkcjonalności. W tym przypadku wystarczy, że użyjesz metody Arrays.sort, zamiast pisać dedykowaną temu funkcję sortowanko.

0

W sumie fakt z Arrays, jakoś mi wyleciało z głowy, że istnieje coś takiego. Dzięki wielkie wszystkim za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1