[Podstawy Java] Uporządkowanie tablicy jednowymiarowej.

0

Cześć. Na początku dodam, że zaczynam dopiero swoją przygodę z programowaniem i chciałbym prosić was o pomoc.
Generalnie to utworzyłem tablice która wypełnia się losowymi cyframi. Następnie chce tą tablice uporządkować rosnąco w ten sposób, by element [i] porównywał się z kolejnym elementem tablicy tzn [i+1]. Problem pojawia się przy ostatnim elemencie, ponieważ komputer chce go porównać z kolejnym elementem który nie istnieje przez co ostatni element nie jest wyświetlany po skompilowaniu...(Przynajmniej to moje założenie, jeśli się mylę to również proszę o korektę) Nie chce korzystać z gotowych metod póki co, chce ogarnąć jak to działa bez gotowców. Kod wygląda następująco:

package sorcik;
import java.util.Random;

public class Sorcik {

    public static void main(String[] args) {
        Random los = new Random();
        int temp;
        int [] tab = new int [5];
        
       for(int i=0; i<tab.length;i++)
       {
           tab[i]=los.nextInt(9)+1;
           System.out.println(tab[i]);
       }
   System.out.println();
       
    for(int i=0;i<tab.length;i++)
    {
        System.out.print(+i+": ");
        for(int k=0;k<4;k++)
        {
            
          if(tab[k+1]<tab[k])
          {
              temp=tab[k];
              tab[k]=tab[k+1];
              tab[k+1]=temp;
              temp=0;
          }
         
          System.out.print(tab[k]);
        }
        System.out.println();
        
    }
   } 
}

Przy kompilowaniu wygląda to następująco:

5
3
7
6
4

0: 3564
1: 3546
2: 3456
3: 3456
4: 3456

Tak jak widać ucina mi cyfre 7. Prosze o pomoc w odnalezieniu błędu.

0

to iteruj do przedostatniego elementu

0

bubble sort

0

Jeżeli rozmiar Twojej tablicy to n i chcesz zrobić n-1 porównań to musisz dostosować swoją pętle żeby miała tyle przebiegów.

Problem jest na tyle trywialny że zostawię Cię z tym :)

0

Twój główny problem jest tutaj:

for(int i=0;i<tab.length;i++)   // patrz odpowiedź Kubańczyka

i tutaj:

// Opcjonalnie zastanów się, czy musisz zawsze startować od 0 ;)
for(int k=0;k<4;k++)  // ta cyfra 4 przysporzy Ci problemów, zastanów się dlaczego
0
BeYourself20 napisał(a):

Twój główny problem jest tutaj:

for(int i=0;i<tab.length;i++)   // patrz odpowiedź Kubańczyka

i tutaj:

// Opcjonalnie zastanów się, czy musisz zawsze startować od 0 ;)
for(int k=0;k<4;k++)  // ta cyfra 4 przysporzy Ci problemów, zastanów się dlaczego

rozumiem juz, że warunkiem wykonania petli powinno byc tab.length-1

4 robi problem dlatego ze wykonuje tylko do elementu tab[3] i tab[4] jest juz nie wykonywalny przez co nie wyswietla mi tego po skompilowaniu, lecz dalej nie wiem jak zapisac ten warunek by petla wykonała sie 5 razy.

doszedlem do takiej opcji, że jak wyswietlam tablice juz poza tymi pętlami to pokazuje mi sie w całosci posortowana, lecz nie daje mi spokoju ten warunek...

for(int i=0;i<tab.length-1;i++)
    {
       
        for(int k=0;k<tab.length-1;k++)
        {
            
          if(tab[k]>tab[k+1])
          {
              int temp=tab[k];
              tab[k]=tab[k+1];
              tab[k+1]=temp;
              
              
          }
         
         System.out.print(" "+tab[k]);
          
        }
        System.out.print(" "+tab[4]);
        System.out.println();

zapisałem tak, żeby wyswietlalo też 5 element tablicy, lecz znów zrobi sie problem gdy tablica by miała wiecej elementow niz 5...

0

Zastanawiam sie nad tym czy petla wewnetrzna zawsze musi startowac od 0, i wydaje mi sie ze musi skoro musi porownac 1 element tablicy z drugim. Ewentualnie mozna by było kolejna instrukcje warunkowa wrzucic sprawdzajaca czy emelent 1 jest mniejszy od elementu drugiego i wtedy zaczac od 1.

0

Nauka korzystania odpowiednio z debuggera w porządnym IDE pozwoli Ci zobaczyć krok po kroku jak zachowuje się Twój program. I mówię kompletnie serio - zobacz jak w Twoim środowisku zaznacza się punkty przestankowe, jak podgląda się wartość zmiennych w danym momencie i jak przechodzi do następnego kroku. Potrafi pomóc bardziej niż myślisz, zwłaszcza w tym wypadku! Za pierwszym razem analizuj od samego początku do samego końca. Potem usuń punkty z miejsc, które Cię nie interesują i przyjrzyj się jaki bigos się tam kręci. Zobaczysz w którym miejscu coś się nie zgadza, gdzie pętla zagląda, a gdzie światło iteratora nie dociera. Powodzenia ;)

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