Wyświetlanie zawartości tablicy w kolejności odwrotnej

0

Witam ponownie Panowie i Panie ;)

W trakcie pisania kolejnych "wprawek" natrafiłem na taki problem:

Zapełniam sobie tablice losowymi 10 liczbami z przedziału [-10 do 10]. Robię sobie z nimi różne rzeczy i obliczenia i na koniec chciałbym wypisać zawartość tablicy, ale w kolejności odwrotnej (od ostatniego do pierwszego). Jak widzicie w poniższym listingu, próbuję to robić 2 metodami:
1 - stringBuilderem i reversem, ale wtedy wyświetla mi też zamiast [-10] to [01-] ponieważ jest to String, więc jak najbardziej logicznie, ale może macie na to jakiś sposób
2 - przypisaniem do innej tablicy z zagnieżdżonym for, ale chyba się "zapętliłem" i nie mogę znaleźć błędu.

Będę wdzięczny za pomoc i za wszelkie sugestie, lub też może podpowiedź jeszcze innego rozwiązania:

import java.util.*;

public class Tablice01 {
	public static void main(String[] arg){
		int liczby[] = new int[10];
		Random los = new Random ();
		/// Losowanie 10 liczb z przedziału [-10,10]
		
		for ( int i = 0; i < 10; i++){
			int liczba1=los.nextInt(21)-10;
			liczby[i] = liczba1;
		}
		/// Drukowanie tablicy nieposegregowanej na ekran
		
		System.out.println(Arrays.toString(liczby));
		
		/// Wyznaczanie najmniejszego i największego elementu tablicy
		
		int max = Integer.MIN_VALUE;
		int min = Integer.MAX_VALUE;
		
		for ( int i = 0; i < liczby.length; i++){
			if (liczby[i] <= min) min = liczby[i];
			if (liczby[i] >= max) max = liczby[i]; 
		}
		System.out.println("Wartość maksymalna w tablicy to: " + max);
		System.out.println("Wartość minimalna w tablicy to: " + min);
		
		/// Wyznaczanie średniej arytmetycznej tablicy
		
		int suma = 0;
		for ( int i = 0; i < liczby.length; i++) {
			suma = suma + liczby[i];
		}
		int a = suma / liczby.length;
		System.out.println("Suma elementów tablicy: " + suma);
		System.out.println("Średnia arytmetyczna elementów tablicy to: " + a);
		
		/// Sprawdzanie ile elementów jest większych a ile mniejszych od średniej artymetycznej
		
		int mniejszych = 0;
		int wiekszych = 0;
		for (int i = 0; i < liczby.length; i++){
			if (liczby[i] < a) mniejszych++;
			else if (liczby[i] > a ) wiekszych++;			
		}
		System.out.println("Elementów mniejszych od średniej arytmetycznej jest: " + mniejszych);
		System.out.println("Elementów większych od średniej arytmetycznej jest: " + wiekszych);
		
		/// Wyświetlanie zawartości tablicy w kolejności odwrotnej - sposób I - nie do końca dobry
		String ybzcil = Arrays.toString(liczby);
		StringBuilder sb = new StringBuilder(ybzcil).reverse();
		System.out.println(sb);
		
		/// Wyświetlanie zawartości tablicy w koljeności odwrotnej
		int odwrotne[] = new int[liczby.length];
		for (int j = 0; j < liczby.length; j++){
			for (int i = liczby.length; i > 0; i--){
				odwrotne[j] = liczby[i];
			}		
		}
		System.out.println(Arrays.toString(odwrotne));
	}

}
0

Po chwili odpoczynku znalazłem oczywisty błąd dla rozwiązania numer 2:

Powinno to wyglądac tak:

/// Wyświetlanie zawartości tablicy w koljeności odwrotnej
		int odwrotne[] = new int[liczby.length];
		for (int i = liczby.length-1; i > 0;){
			for (int j = 0; j < liczby.length;j++){
				odwrotne[j] = liczby[i];
				i--;
			}		
		}
		System.out.println(Arrays.toString(odwrotne));

Natomiast nadal nie wiem, czy pierwszym sposobem, można wykonać to zadanie poprawnie...

1

Wystarczy jedna pętla do odwrócenia tablicy:

/// Wyświetlanie zawartości tablicy w kolejności odwrotnej
        int odwrotne[] = new int[liczby.length];
        int n = liczby.length-1;
        int j = n;
        for (int i = 0; i <= n; i++){
            
               odwrotne[i] = liczby[j];
               j--;
        }
        System.out.println(Arrays.toString(odwrotne));
1

A jeśli chcesz użyć metody reverse, to:

        List<Integer> list = new ArrayList<Integer>();
        Collections.addAll(list, Arrays.stream(liczby).boxed().toArray(Integer[]::new));
        Collections.reverse(list);
        System.out.println(list);
0

Wszystko jasne!
Dzięki :)

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