» »

[Java][Naloga] Seznam študentov, majčken problem

[Java][Naloga] Seznam študentov, majčken problem

Myth ::

Ker nekako sam ne najdem rešitve. In ko sem poskusil na bolj splošen način priti do rešitve, katera bi mi pomagala pri vseh naslednjih nalogah, mi nekako niso znali pomagati. Zato bom problem kar na dolgo in široko povedal.

Pa prosim ne prehitevajte, ker bi rad sam se naučil programirat! :))

Naloga: Zgradite hierahijo dedovanja razredov Oseba, Študent, RedniŠtudent, IzredniŠtudent po zgledu rešene naloge z liki. Hierarhija naj omogoca kreiranje posameznih primerkov. Za vse beležimo ime, priimek, naslov in elektronsko pošto. Vsi študenti imajo vpisno številko in vpisan letnik. Vsak razred naj dopusca le konstruiranje primerka, ko so podane vse vrednosti za razpoložljive atribute. Zgradite razred Seznam, ki bo omogočal hranjenje primerkov razredov Študent, RedniŠtudent in IzredniŠtudent.
Razred naj vsebuje metode, ki omogocajo:
- dodajanje novih študentov,
- izpis vseh študentov,
- izpis stevila vseh studentov,
- povecanje vrednosti atributa vpisan letnik za vrednost 1,
- odstranjevanje studentov iz seznama (studenta podamo preko vpisne stevilke)
/konec naloge.

No, takole. Naredil sem že Osebo, Študenta, Izrednega ter Rednega. Recimo da tega ne bom kopiral, kajti tisti kateri znate programirat, imate to sami v minuti napisano. Da ne pozabim omenit, da sem uporabil Osebo kot nadrazred Študenta, Študent pa je nadrazred Rednemu in Izrednemu. Zdaj pa se mi zatakne pri Seznamu, ki ga moram kreirati. Kako naj začnem? Marsikdo bo pomislil da ne znam niti osnov programiranja, ampak ni res. Prosim za pomoč. Kako zdaj začnem v tem Seznam.java:

class Seznam{
...

en LP in BZ
¤ Space is Mystery. And Myth is on Earth. ¤

OwcA ::

Posiliš kakšen Vektor ali podobno podatkovno strukturo in narediš navzven vidne le željene metode. Notri tlačiš kar Osebe in izkorisitiš polimorfizem.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Myth ::

Ne razumem tvojega strokovnega jezika. Mogoče bolj kmečko povedano? :D
Kapiram le to, da naj naredim navzven vidne metode in polimorfizem.
¤ Space is Mystery. And Myth is on Earth. ¤

OwcA ::

Kot private (ali protected) deduješ eno že napisano podatkovno strukturo, recimo Vector, ali morda še boljše nekaj kamor lahko shranjuješ pare ključ-vrednost in za ključ uporabiš vpisno številko. Potem dodaš kot public potrebne metode:
- dodajanje novih študentov,
- izpis vseh študentov,
- izpis stevila vseh studentov, [tole je kar velikost seznama]
- povecanje vrednosti atributa vpisan letnik za vrednost 1,
- odstranjevanje studentov iz seznama (studenta podamo preko vpisne stevilke)

Da bo zadevščina delovala za poljubno kombinacijo tvojih razredov, jih moraš vanj shranjevati kot Oseba.
Otroška radovednost - gonilo napredka.

zagy ::

element seznama bi izgledal nekako tako:

class Element
{
Oseba item;
Element naslednjiElementSeznama;
}

in potem imaš razred Seznam:

class Seznam
{
Element vrhSeznama = null; // to je spr. ki bo kazala na prvi element v seznamu

// dodaj novo osebo na konec seznama...
public void dodajElement(Oseba novElement)
{
if ( vrhSeznama == null )
{ vrhSeznama = novElement; }
else
{
Element iskalec = vrhSeznama;
while ( iskalec.naslednjiElementSeznama != null )
{ iskalec = iskalec.naslednjiElementSeznama; }

iskalec.naslednjiElementSeznama = novElement;
}
}
}

Tole bo potem tvoj seznam:
O-> O-> O-> O-> ....
(O je Oseba; -> pa je kazalec na naslednji element)

če si nov pri programiranju ti bo tole mogoče malo čudno izgledalo... najboljše: svinčnik v roke, pa si malo riši :)

Myth ::

Nov sem v Javi, da. To maš ti sklad oz. kazalce, ne? Obstaja pa tudi možnost z polji. Mogoče poveš zakaj je tako bolje/slabše?
¤ Space is Mystery. And Myth is on Earth. ¤

zagy ::

tu je nekdo lepo opisal dinamične podatkovne strukture:
dinamicne podatkovne strukture

Myth ::

To vem. Hvala.
¤ Space is Mystery. And Myth is on Earth. ¤

alum ::

enostavno ustvaris eno polje Oseb, ki bo hranilo reference na objekte razreda oseba oz. njegovih podrazredov (tako bos lahko na seznam dodajal tako studente, kot osebe...)...poanta te naloge ni ustvarjenje dinamcnega seznama, ampak razumeti hierarhijo dedovanja, tako da je dovolj, ce naredis seznam z npr. 20 elementi...pri brisanju elementov iz seznama poskrbi le se za to, da bos seznam kompresiral (da bos iz polja odstranil reference, ki kazejo na null) in to je to...ce ti se kaj ni jasno povej...

Zgodovina sprememb…

  • spremenilo: alum ()

jogurtTM ::

HM. No tudi jaz sem precej smrkav kar se tiče programiranja. Približno 6 mesecev je za mano. Vem pa eno stvar. Programiranja se je treba lotit od začetka. Če ne lahko človek hitro obupa. Verjetno ni pametno začeti s težjimi programi, ker se ti slej ko prej ustavi če ne poznaš osnov. Priporočam ti, da se pretolčeš čez kakšno knjigo. Saj vem da je zoprno in da so primeri banalni. Ampak drugače skorajda ne gre. Sam recimo prebiram knjigo od Mesojedca - Java2.... Pomoje je kr primerna za začetek.....

lep pozdrav

zerox ::

C style Kazalci & java ? WTF ? Ne se hecat...

Z implementacijo česa podobnega kot je seznam se ne ukvarjaj ampak,
kot je Owca rekel...uporabi Vector(to je polje elementov, ki lahko dinamično raste, se manjša..) ali kaj podobnega. (v bistvu ti je povedal rešitev naloge, zdaj napiši le še kodo). Dokumentacija o razredu Vector.

Hmh ti želiš da te step by step kdo tu nauči programirati v javi? Jaz ti predlagam, da si najprej prebereš kakšno knjigo ali tutorial na internetu, ti bo bolj koristilo pa hitreje bo šlo, kot pa da čakaš na poste tukaj :\

lp

Zgodovina sprememb…

  • spremenil: zerox ()

Myth ::

Če bi malo bolje spremljali sam forum Programiranje, bi zvedeli hitro 3 stvari. Da se učim Javo in to na faxu. Ne blešči mi ravno, slab pa tudi nisem. Samo zdaj me logika zabava, kajti moje osnovno znanje je TP, v prvem semestru smo na hitro obdelali C++ kot za šalo in lahko rečem, da sem od tam bore malo odnesel. jaz ne vem kam se totim tak mudi? Ja, študij pa traja 5 let? 8-O Sicer pa je že to off-topic.

Torej, hvala. Si bom pogledal tale Vector, dovolj o programiranju zaenkrat.
¤ Space is Mystery. And Myth is on Earth. ¤

zagy ::

tukaj se pa z vami ne strinjam... mislim, da bi student 1. letnika fakultete moral znati sam realizirat seznam v Javi, brez da bi uporabljal razne Vectorje, ArrayListe, ...

OwcA ::

@zagy: verjetno bi res moral znati, ampak predvsem se mora naučiti praktično programirati in tam se po nepotrebnem ne trduiš s pisanjem svojega. Nič ne rečem, če spiše nekaj prilagojenega za problem in zato ustrezno hitrega, ampak en takšen preprost seznam to ni.
Otroška radovednost - gonilo napredka.

Myth ::

No, pa smo spet na začetku. :( Zdajle ravno hocem narediti ta Vector...

class Seznam{
public Vector();
public boolean isEmpty();
if (isEmpty() == true) {
addElement(Object Student);


verjetno sem sfalil ne? Any help, maybe? Mene ravno koda je*e, logika mi lepo špila sn ugotovil zdajle. :\
¤ Space is Mystery. And Myth is on Earth. ¤

Myth ::

¤ Space is Mystery. And Myth is on Earth. ¤

Zgodovina sprememb…

  • spremenilo: OwcA ()

OwcA ::

Daj si malo sintakso poglej. ;)
---
if (isEmpty() == true) {

Kaj si hotel s tem narediti?
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Myth ::

Kje jo najdem? Ker nimam več živcov za to programiranje, bom vse zdaj zdaj pusto pa domov šel knjigo brat o tej Javi pa C++ -su, ker očitno nimam pojma o pojmu več. >:D :(

Kaj sem hotel? Če je seznam od Študentov prazen, naj doda novega študenta.

Logika očitno deluje brezhibno, koda pa...
¤ Space is Mystery. And Myth is on Earth. ¤

kopernik ::

Uporaba ObjectOutputStream-a zahteva to, da tvoji objekti implementirajo vmesnik Serializable. In končna datoteka definitivno ni tekstovna.

Naredi kar običajen FileOutputStream in piši Stringe v datoteko. Potrebno je malo telovadbe, saj moraš sam poskrbeti za format seznama v txt obliki. Najlažje je, če je en objekt na vrstico(torej ena datoteka, en seznam), saj bo potem tudi branje razmeroma enostavno.
npr.

redniStudent[ime,priimek,naslov,email,vpisnast,letnik]
oseba[ime,priimek,naslov,email]
izredniStudent[ime,priimek,naslov,email,vpisnast,letnik]
redniStudent[ime,priimek,naslov,email,vpisnastevilka,letnik]
oseba[ime,priimek,naslov,email]


Prva vrstica pomeni prvi element v seznamu, itd.

Zgodovina sprememb…

  • spremenil: kopernik ()

Myth ::

Aha... saj to je vse lepo in prav. Ampak jaz pomoč potrebujem pri deklaraciji podatkov v Seznam.java , torej začetek nekako mi ne gre. Vse nadaljno si znam predstavlat in naredit. :\
¤ Space is Mystery. And Myth is on Earth. ¤

kopernik ::

Ne vem, če znaš vse ostalo naredit, če bi rad txt datoteko delal z ObjectOutputStream-om. Sicer pa, do it yourself. Zakaj sprašuješ, če veš ?

Myth ::

Sem rekel, da si znam predstavljati. Zraven je Literatura pri roki, ki bi mi pomagala. Očitno pa ni ljudi ki bi mi pomagali. Res je da so nekateri pripomogli k bolšemu razumevanju problema in da se lahko lotim naloge na več načinov. Hvala , več pa ne bom spraševal, ker vidim da ...
¤ Space is Mystery. And Myth is on Earth. ¤

kopernik ::

Nikar ne špilaj užaljenosti, ker si sam začel. Zaradi mene lahko sprašuješ kolikor hočeš še naprej. Jasno pa je, da ti bo redkokdo povedal kar celotno rešitev.

borchi ::

Jasno pa je, da ti bo redkokdo povedal kar celotno rešitev.

sploh, ker si rekel, da tega ne želiš.

dej, prlimej kodo, ki jo maš do sedaj spisano in pokaži kje imaš problem. sigurno ti bo kdo pomagal. pa še vsi mi drugi ubogi kekci se bomo lahko kj naučili. zato pa je forum.
l'jga

OwcA ::

Kaj sem hotel? Če je seznam od Študentov prazen, naj doda novega študenta.

Logika očitno deluje brezhibno, koda pa...

Žal niti o logiki nisem tako prepričan, kajti:
- v seznamu lahko hraniš hkrati več elementov (to je sploh poanta seznama)
- seznam je lahko prazen in mora ravno tako vse funkcionirati

Premalo kode je (oziroma je ni dovolj sintaksično pravilna), da bi se lahko odločil katerega od teh pogojev s tistim if-om ne izpolnjuješ.
Otroška radovednost - gonilo napredka.

alum ::

evo ti primer seznama...ce gre za vajo, za katero mislim da gre, potem ti je tukaj vector nepotreben...kot sem ze rekel...ustvari si polje, v katerega bos shranjeval osebe...to je vsa carovanija tega seznama...spodaj imas primer dodajanja oseb in izpisa oseb...ostalo pa mislim, da bi sedaj moglo it...ce ti kaj ni jasno pa kar vprasaj;)

class Seznam{

private Oseba [] tabela = new Oseba[20];
private int stevec=0;

public void dodajOsebo(Oseba o) {

this.tabela[stevec] = o;
stevec++;

}

public void izpisiOsebe(){

for(int i=0; i < stevec; i++){
if(tabela[i] != null){
System.out.println(tabela[i]);
}
}


}

}

Myth ::

Jojoojojj... saj ne vem , če me vi ne razumete ali jaz vas ali samega sebe. :D
No, zdajle sem eno uro študiral po knjigah kak bi to sprogramiral, pa še kar ne vem.
Mene jebe to da sem navajen strukturiranega programiranja in ne objektno, jasno zdaj?
V bistvu sem zdaj spogruntal, da sem jaz želel že v tem seznamu nek main naredit, kar pa ne smem. Koda do sedaj je takšna.

Oseba.java:

class Oseba{

private String Ime;
private String Priimek;
private String Naslov;
private String Email;

public String getIme() { return this.Ime; }
public String getPriimek() { return this.Priimek; }
public String getNaslov() { return this.Naslov; }
public String Email() { return this.Email; }

public void setIme(String Ime) { this.Ime = Ime; }
public void setPriimek(String Priimek) { this.Priimek = Priimek; }
public void setNaslov(String Naslov) { this.Naslov = Naslov; }
public void setEmail(String Email) { this.Email = Email; }

public Oseba(String Ime, String Priimek, String Naslov, String Email)
{
this.Ime= Ime;
this.Priimek = Priimek;
this.Naslov = Naslov;
this.Email = Email;
}

public String toString() {
return Ime+ "," +Priimek+ "," +Naslov+","+Email; }
}

Student.java vsebuje še dve metodi:

class Student extends Oseba{

private int Vpisna;
private int Letnik;

public int getVpisna() { return this.Vpisna; }
public int getLetnik() { return this.Letnik; }

public void setVpisna(int Vpisna) { this.Vpisna = Vpisna; }
public void setLetnik(int Letnik) { this.Letnik = Letnik; }

public Student(String Ime, String Priimek, String Naslov, String Email, int Vpisna, int Letnik)
{
super(Ime, Priimek, Naslov, Email);
this.Vpisna = Vpisna;
this.Letnik = Letnik;
}

public String toString() {
return Vpisna+","+Ime+","+Priimek+","+Naslov+","+Email+", letnik="+Letnik;
}
}

Nakar Redni in Izredni se sklicujeta z super na svoj nadrazred Student takole:

lass RedniStudent extends Student{


public RedniStudent(String Ime, String Priimek, String Naslov, String Email, int Vpisna, int Letnik)
{
super(Ime, Priimek, Naslov, Email, Vpisna, Letnik);
}

public String toString() {
return super.toString();
}
}

____________________________________________________________________________

Evo, zdaj pa delam Seznam.java, kjer se mi ustavi takoj na začetku, ker mi ravno strukturirano programiranje nagaja. Jaz bi naj zdajle te vse Studente, kakor pravi naloga shranil nekam. Naj omenim, da v Javi še nikoli prej nisem delal in da iščem po dokumentaciji in knjigi kako Seznam recimo 5 študentov nekam izpisat.

Spogruntal sem da moram naredit metodo...
Recimo da je to zdaj koda:

class Seznam{
public Izpis(string[] arg) {
Student student1 = null;
private int stStudentov;
for (i=0; i < stStudentov ; i++) {
System.out.println(student1); //tu bi zdaj moglo prit neke da bi mi tega studenta v .txt file dalo, kar pa se v Javi nisem jemal... jaz ne vem ce oni mislijo da bomo znali za naprej :\
}

to mam zaenkrat... upam, da kočno kapirate kaj me muči. še en lep dan naprej, namreč jaz se grem zdaj nekaj drugega učit, kr ne mislim ves dan pred monitorom bit. ;)
¤ Space is Mystery. And Myth is on Earth. ¤

alum ::

nevem ce si res tak trmast, al se samo delas trmastega:)

en post vise imas primer seznama, ki ga samo vkljucis v svoj program...to pomeni, da v kodo dodas vse od class Seznam naprej:)...in vse kar moras narediti je se, da napises metode, katere bos potreboval...nobenega pisanja v datoteko!!! seznam mora bit le zacasen, torej dokler ne zapustis programa, torej naj bo le v pomnilniku!

zdaj pa preden se spet pozenes v pisanje odgovorov v stilu, da te ne razumemo, poglej zgornjo kodo in si reci "aaaaa, tako!":)

napisat metode, ki jih potrebujes pa ti menda nebo problem, saj zato potrebujes le znanje iz strukturiranega programiranja:)

Myth ::

No ja, tak tudi gre. Samo jaz sn bolj napredn človek, pa stremim k bolšemu ... :8)
Khm... nov problem mam :>

Ko spremenim atribut Letnik, kličem super ali spremenim vrednost takole: Letnik.o[i]= Letnik+1; ??:\
¤ Space is Mystery. And Myth is on Earth. ¤

alum ::

in kako bi ti spremenil atribut, ki ima dolocilo private?!?;)

v studentu si naredi metodo, za povecavo letnika, ki jo potem samo poklices v for zanki...

kaj si pa mislil s tem, da klices super, pa nevem:)

Myth ::

Super te zanima... Gor poglej mojo kodo. ;)
Točno, to sem čisto pozabil da je privat.
Nekaj me zanima. Ker moraš po vpisni iskat.
Mi lahko razložiš v čem je razlika med get pa setVpisna? set samo priredi tisto vrednost ki si jo vpisal k this.Vpisna, ne? Če pa bi rad vtipkal Vpisna, moraš uporabiti get... right?? :D

No ja... tota Java je res čudna... :8)
¤ Space is Mystery. And Myth is on Earth. ¤

drejc ::

Pomoje si prespau predavanja pa vaje, pa še angleščina ti dela probleme (get&set).

Glej ZS!
"Rise above oneself and grasp the world"
- Archimedes of Syracuse

BigFoot ::

Zgleda da se nisi slisal za Getters in Setters. Getters (ala getIme) ti samo vrnejo variablo iz objekta. Setters (ala setIme) ti pa spremenijo variablo v objektu. Jasno?

alum ::

vem kaj je super...kako si ga ti hotel uporabit pri azuriranju letnika, pa se mi zdaj ni jasno - ne poskusaj mi razlozit:) ...

razliko med set in get pa ti pove ze ime...metoda setVpisna nastavi vpisno steviko na doloceno vrednost, metoda getVpisna pa vrne vpisno stevilko...:)

drejc ::

BF: JavaBean specifikacije semizdi da se ne ucijo na faksu (delajo fse public al pa private), tko da tileh getterjev pa setterjev mu še ni dobr tumac omenjat.
"Rise above oneself and grasp the world"
- Archimedes of Syracuse

Myth ::

Žal vas moram razočarat. Do zdaj sem prespal samo ena predavanja pri tem programiranju. Pa še to se je zgodilo ravno tale petek. :P Samo čistih osnov pa nas tudi niso učili. :\ Sicer pa sem opustil zdaj tole. Mam drug problem , namreč elektrotehniko izpit v sredo, pa se učim. To pa je že off-topic. :D Se bom spet kaj oglasil kasneje. Hvala. ;)

en LP in BZ
¤ Space is Mystery. And Myth is on Earth. ¤

VASkO ::

get in set je samo ime metode v tvojem primeru, naj te to ne zmede


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Deserializacija

Oddelek: Programiranje
181866 (1469) Cvenemir
»

[c#] Ustvarjanje objekta v drugem razredu

Oddelek: Programiranje
81665 (1610) Cvenemir
»

[C#] Kopiranje osebe iz seznama v drug seznam

Oddelek: Programiranje
51503 (1364) Presidente
»

Povezani seznam

Oddelek: Programiranje
132115 (1712) pohano
»

[c#] Napačen izpis -- prazni stringi

Oddelek: Programiranje
51536 (1478) Spura

Več podobnih tem