[ ser_nicky @ 22.07.2014. 12:59 ] @
Pozdrav svima,
vežbam zadatke iz jave, pa sam naleteo na jedan koji ne mogu da rešim kako treba:
Zadatak glasi: Osoba ima ime i prezime kao i godine starosti. Može se ispitati da li je osoba starija od druge osobe i da se ispiše u formatu ime i prezime(godina). Imenik sadrži niz osoba (podrazumevano 10). Stvara se prazan, osobe se dodaju na određeno mesto. Ako je mesto popunjeno, prikazuje se poruka. Mogu se sortirati osobe po starosti (kriterijum se ostavlja studentu). Potrebno je ispisati imenik sa osobama tako da se osoba ispisuje jedna ispod druge.
E, sad, ja sam napravio klasu Osoba sa sledećim kodom:
Code:
public class Osoba {
    private String ime_prezime;
    private int godine;
    
    public Osoba(String ip, int god){
        ime_prezime=ip;
        godine=god;
    }
    public String ime_prezime(){
        return ime_prezime;
    }
    
    public int godine(){
        return godine;
    }
    public static void sortiranjeGodine(Osoba[] niz) { 
        for(int i = 0; i < niz.length-1; i++) 
            for(int j = i+1; j < niz.length; j++) 
                if(niz[i] != null && niz[j]!=null && niz[i].godine < niz[j].godine) 
                { Osoba temp = niz[i]; 
                niz[i] = niz[j]; 
                niz[j] = temp; } 
        }
    public String toString(){
        return ime_prezime + "(" + godine + ")";
    }
}


Kao i klasu Imenik:
Code:
public class Imenik {
    private Osoba[] osobe;
    
    public Osoba[] osobe(){
        return osobe;
    }
    
    public void unesiOsobu(Osoba o) { 
        for(int i = 0; i < osobe.length; i++) { 
            if(osobe[i] == null) { 
                osobe[i] = o; return; } 
            } System.out.println("Nije moguce uneti osobu!"); }
    
    public String toString(){
        String s="Osobe u imeniku: " + "\n";
        for(int i=0;i<osobe.length;i++){
            if(osobe[i]!=null){
                s+=osobe[i] + "\n";
            }
        }
        return s;
    }
}


U main-u sam dodao sledeći kod:

Code:
public class Main {

    public static void main(String[] args) {
    
        Imenik[] im = new Imenik[10];
        im[0].unesiOsobu(new Osoba("Pera Peric", 22));
        im[1].unesiOsobu(new Osoba("Mile Milic", 25));
        im[2].unesiOsobu(new Osoba("Zika Zikic", 27));
        im[3].unesiOsobu(new Osoba("Jova Jovic", 35));
        im[4].unesiOsobu(new Osoba("Janko Jankovic", 29));
        im[5].unesiOsobu(new Osoba("Mica Micic", 19));
        im[6].unesiOsobu(new Osoba("Kosta Kostic", 18));
        
        System.out.println("Osobe u imeniku: "); 
        for(int i = 0; i < im.length; i++) {  
                System.out.println(im[i]); }
        
    }

}


Ali kao rezultat dobijam grešku: Exception in thread "main" java.lang.NullPointerException...
Kad uradim u main-u sa ArrayList-om, ispisuje mi se sve kako treba (doduše nesortirano), ali ja bih voleo da mi neko objasni kako da dobijem odgovarajući rezultat korišćenjem običnog niza.

Molim ako neko ima vremena da mi objasni gde grešim i kako bih mogao da rešim problem...Dakle, ne treba mi gotov kod, nego ako može objašnjenje.
Hvala svima unapred
[ dule_ns @ 22.07.2014. 14:59 ] @
Pa daj pun stacktrace od exceptiona (liniju koda u kojoj baca nullpointer) pa ćemo ti i reći šta nisi odradio.

A i šta će ti niz imenika, valjda imaš imenik i u njemu niz osoba?
[ FooLControL @ 22.07.2014. 15:23 ] @
Napravio si niz imenika, a u svakom imeniku imas niz osoba. Taj niz osoba nije inicijalizovan, a ti metodom unesiOsobu pristupas tom nizu i program ti puca, tacanije baca null izuzetak.

Napravi konsruktor u Imeniku kome ces proslediti broj osoba imenika, i izvrsiti inicijalizaciju niza osoba tim brojem. Onda ce ti raditi.

[ ser_nicky @ 23.07.2014. 14:19 ] @
Hvala najlepše na savetima...Nisam uspeo da rešim preko običnog niza, pa sam ipak uradio zadatak upotrebom ArrayList-a.
Pozdrav i hvala još jednom.
[ dule_ns @ 23.07.2014. 14:21 ] @
Pa daj nam barem rešenje sa nizom pa ćemo ti reći gde si grešio.
[ Rapaic Rajko @ 24.07.2014. 08:29 ] @
I izbegavaj da metodama i poljima dajes ISTA imena; barem koristi razlicite letter cases (ime_Prezime, Ime_prezime()).

Pozz
[ galaksija @ 25.07.2014. 14:54 ] @
Verovatno najgluplji kod koji sam napisao ali...eto !

Osoba.java
Code:


public class Osoba {
    private String ime_prezime;
    private int godine;

    
    public Osoba() {
    }
    
    public Osoba(String ime_prezime, int godine) {
        this.ime_prezime = ime_prezime;
        this.godine = godine;

    }

    public  String getIme_prezime() {
        return ime_prezime;
    }

    public void setIme_prezime(String ime_prezime) {
        this.ime_prezime = ime_prezime;
    }

    public int getGodine() {
        return godine;
    }

    public  void setGodine(int godine) {
        this.godine = godine;
    }

    public static void sortiranjeGodine(Osoba[] niz) {
        for (int i = 0; i < niz.length - 1; i++)
            for (int j = i + 1; j < niz.length; j++)
                if (niz[i] != null && niz[j] != null && niz[i].getGodine() < niz[j].getGodine()) {
                    Osoba temp = niz[i];
                    niz[i] = niz[j];
                    niz[j] = temp;
                }
    }

    public String toString() {
        return getIme_prezime() + "(" + getGodine() + ")";
    }

}


Imenik.java

Code:

public class Imenik {
    public static Osoba[] osobe;


    public Imenik(Osoba o) {
        for (int i = 0; i < osobe.length; i++) {
            if (osobe[i] == null) {
                osobe[i] = o;
                return;
            }
        }
        System.out.println("Nije moguce uneti osobu!");
    }

    public String toString() {
        String s = "Osobe u imeniku: " + "\n";
        for (int i = 0; i < osobe.length; i++) {
            if (osobe[i] != null) {
                s += osobe[i] + "\n";
            }
        }
        return s;
    }
}




Main.java

Code:


public class Main {

    public static void main(String[] args) {
        Osoba[] ee = new Osoba[6];

        ee[0] = new Osoba("Pera Peric", 22);
        ee[1] = new Osoba("Mile Milic", 25);
        ee[2] = new Osoba("Zika Zikic", 27);
        ee[3] = new Osoba("Jova Jovic", 35);
        ee[4] = new Osoba("Janko Jankovic", 29);
        ee[5] = new Osoba("Mica Micic", 19);

        Imenik.osobe = ee;
        for (int i = 0; i < Imenik.osobe.length; i++) {
            System.out.println(Imenik.osobe[i]);
        }

    }

}


Nije rešenje zadatka ali moje mišljenje u kom pravcu treba ici.

[Ovu poruku je menjao galaksija dana 25.07.2014. u 16:09 GMT+1]