Deus ex machina pon 3.10.2011 20:13

Pa, klase jesu tipovi. Nemam pojma sto bi ja godinu dana radio bez klasa, uostalom bez prve klase ne mozes ni napisati aplikaciju, da ni ne spominjem da su sve najbazicnije funkcionalnosti ispoljene kroz klase... string je klasa, array je klasa, kolekcije su cijela hijerarhija klasa, stdin i stdout su spremljeni u klasu a oboje su instance ostream klasa...

 

Smatram da za ucenje OO jezika, klase treba izgrindati cim prije. Bez sposobnosti da ispravno kreiras svoj tip podatka, neces bas daleko dogurati u programiranju :-\

 

Sto si radio cijelu godinu dana, covjece? :-D

OriginalEXE pon 3.10.2011 20:53

Kako to misliš da ne znam tipove varijabli? Pogledaj malo kod koji sam zalijepio gore, sve sam napisao sa razumijevanjem, dakle ono što vidiš gore je otprilike moje znanje.

 

Uz dodatak da sam jučer počeo učiti array, dodavanje i izvlačenje iz istog itd. 

 

E sad, zašto nije spomenut taj famozni string[] args, to ne znam, vjerojatno zato što ga bluej ne zahtjeva da bih pokrenuo aplikaciju koju napišem.

 

 

Nastaviti ću raditi po ovoj knjizi, a kada naučim sve šta mogu iz nje, krenuti ću dalje. Ionako ovo radim uz fakultet pa koliko stignem, stignem.

Floki pon 3.10.2011 21:04

Deus - ja pričam iz svog kuta

radio sam C i zadatke u konzolnim aplikacijama u C-u

ako se baš može odmah na neku detaljnu knjigu koja za svaki primjer daje po jedan jednostavan primjer - ok

ali ja smatram da od takvog pristupa nema kruha

Deus ex machina pon 3.10.2011 22:11
Floki kaže...

Deus - ja pričam iz svog kuta

radio sam C i zadatke u konzolnim aplikacijama u C-u

ako se baš može odmah na neku detaljnu knjigu koja za svaki primjer daje po jedan jednostavan primjer - ok

ali ja smatram da od takvog pristupa nema kruha

Ahaaaa, ma dobro to je druga stvar... ja sam mislio da jos uvijek pricamo o Javi.

 

Nisam skuzio boldano...?

Floki pon 3.10.2011 23:06

Koliko vidim sve ove knjige počevši od našeg Demistificiranog pa nadalje, ako hoćeš i Programming C#, Pro C# 2010 imaju isti način pisanja.

Detaljno i dobro opisuju sintaksu jezika, i uz svaku naredbu ili dio koji opisuju daju po jedan jednostavan primjer, te knjige podrazumjevaju da je

čovjek već drilan programerskim zadacima. Problem je ako nije - može naučiti dobro sintaksu jezika, može npr. pomoću svojstva length (kad smo već koristili string klasu kao primjer)

napisati duljinu stringa, međutim sam će teže napisati metod za duljinu stringa ili za reverse ili sličnu manipulaciju, da ne spominjem nešto složenije.

Nije teško brzo prepoznati one koji su riješili dosta zadataka, na to sam mislio.

Deus ex machina uto 4.10.2011 14:40

U pravu si, ali to vec ni ne spada u programiranje vec u algoritme. Algoritmi su vecinom language-agnostic, i uce se ili posebno ili iskustvom. Zbog toga obicno ne savjetujem knjige, nego tutorijale.

 

Prodjes jedan tutorijal o tome kako napraviti linked listu ili array listu, i vec si pokrio oho-ho nuznog gradiva.

OriginalEXE sri 2.11.2011 07:54

Skida se IntelliJ, ali sam što se tiče knjige pribjegao krađi (pdf) jer nemam novaca trenutno. Nije mi toliki bed krasti znanje :)

 

EDIT: IntelliJ mi stvara isti problem kao i NetBeans, prekompliciran je za mene. Neda se u ovome učiti.

Pisati ću ja u Notepad++

dado2202 sri 2.11.2011 08:54
OriginalEXE kaže...

Skida se IntelliJ, ali sam što se tiče knjige pribjegao krađi (pdf) jer nemam novaca trenutno. Nije mi toliki bed krasti znanje :)

 

EDIT: IntelliJ mi stvara isti problem kao i NetBeans, prekompliciran je za mene. Neda se u ovome učiti.

Pisati ću ja u Notepad++

Ako ti je prekomplicirano, pogledaj na youtube-u imaš nekoliko videa kako "napraviti novi projekt" u intellij. Nakon što "uspiješ" napraviti novi projekt, kodiranje je isto (čitaj bolje) kao i u notepad++

OriginalEXE sri 2.11.2011 08:59
dado2202 kaže...
OriginalEXE kaže...

Skida se IntelliJ, ali sam što se tiče knjige pribjegao krađi (pdf) jer nemam novaca trenutno. Nije mi toliki bed krasti znanje :)

 

EDIT: IntelliJ mi stvara isti problem kao i NetBeans, prekompliciran je za mene. Neda se u ovome učiti.

Pisati ću ja u Notepad++

Ako ti je prekomplicirano, pogledaj na youtube-u imaš nekoliko videa kako "napraviti novi projekt" u intellij. Nakon što "uspiješ" napraviti novi projekt, kodiranje je isto (čitaj bolje) kao i u notepad++

Hvala na savjetu. Btw. u ovoj knjizi se odmah počelo sa public static void main(String[] args) :) (Introduction_to_Java_Programming_Comprehensive_8th_Edition)

dado2202 sri 2.11.2011 09:37
OriginalEXE kaže...

Hvala na savjetu. Btw. u ovoj knjizi se odmah počelo sa public static void main(String[] args) :) (Introduction_to_Java_Programming_Comprehensive_8th_Edition)

Po meni je takav princip puno bolji. Gdje te prvo uči o specifičnostima programskog jezika, nego o OOP načinu razmišljanja (što je naravno isto pokriveno u ovoj knjizi).

 

Po meni bolj izbor nego ono prije. Kada prođeš ovu knjigu biti će ti lakše raditi aplikacije primjenjive u stvarnom svijetu.

 

Naravno ova knjiga će te naučiti osnove, onda si odabereš u kojem smjeru misliš dalje ići i ideš na nešto napredniju literaturu.

Deus ex machina sri 2.11.2011 12:39
OriginalEXE kaže...

Skida se IntelliJ, ali sam što se tiče knjige pribjegao krađi (pdf) jer nemam novaca trenutno. Nije mi toliki bed krasti znanje :)

 

EDIT: IntelliJ mi stvara isti problem kao i NetBeans, prekompliciran je za mene. Neda se u ovome učiti.

Pisati ću ja u Notepad++

U biti, ja bi na tvojem mjestu otisao jos jedan korak dalje... znam da kompliciram, ali uz pomoc Mavena, napravio bi projekt dok kazes keks.

SKines i instaliras Maven, i otkucas:

 

mvn archetype:generate

 

Odgovoris na par pitanja koja te pita, i onda importiras projekt u IntelliJ. Cijeli projekt je definiran unutar project.xml filea i citljivo je odmah sto radi sto... da ni ne spominjem da project.xml mozes koristiti u svakom IDE-u.

Ja se u biti ne sjecam kad sam zadnji put napravio projekt direktno u Idei :-D

 

Eh da, s obzirom da si se uhvatio Idee, zapamti tri najvaznije skracenice:

  • Ctrl+Shift+Space - inteligentan autocomplete
  • Alt+Enter - fix & refactor (primarno od koristi na stvarima podcrtanim crveno i zuto, ali i drugdje)
  • Alt+Insert - code generator, da ne moras pisati accessore, mutatore, equals, hashcode i tostring na ruke

 

Takodjer, negdje u Help meniju mozes otvoriti dijalog sa tabelom svih skracenica, objasnjenjem sto rade, i statistikom koliko ih cesto koristis.

Pranja pet 4.11.2011 23:36
Deus ex machina kaže...

Ma sve ti je to ista pasta, jedine velike sintakticke promjene donijela je 5ica sa genericima. Uzmi koju god knjigu od petice nadalje, i ostatak sintaktickog secera procitaj na webu.

 A što je sa npr. catch/multicatch i try blokovima u 7?

Pranja ned 6.11.2011 00:22

Molim pomoć svih znalaca-trebao bih napraviti ovo:

 

Napisati Java program koji će simulirati jednostavan rad dizala za prijevoz osoba u
zgradi. Zgrada se sastoji od četiri kata i prizemlja. Korisnik prije pokretanja algoritma za
kretanje dizala unese kat na kojoj se osoba nalazi, a cilj je da osoba stigne u prizemlje
zgrade. Dizalo kreće od nasumične pozicije te u nasumičnom smjeru. Dizalo staje na
zadanom katu samo ukoliko se kreće prema dolje. Znači, ukoliko se dizalo kreće prema
gore i na katu je na kojem se osoba nalazi, ne smije stati, već dolazi do zadnjeg kata
zgrade te ponovno nazad. Smjer kretanja dizala mijenja se u prizemlju i na zadnjem katu.
Za svaki kat potrebno je pomoću bacanja iznimaka provjeriti nalazi li se dizalo na pravom
katu, te ide li u pravom smjeru. Unutar bloka za hvatanje iznimki potrebno je u konzoli
ispisati odgovarajuću poruku da se dizalo ne nalazi na pravom katu ili se ne kreće u
pravom smjeru te je logirati u „Dizalo.log“ datoteku. Implementaciju je potrebno napraviti
na sljedeći način:

 

1. Kreirati Java projekt s nazivom Vašeg prezimena.

 

2. Unutar "src" mape potrebno je kreirati dva paketa: "iznimke" i "main".

 

3. Unutar paketa iznimke potrebno je kreirati dvije klase iznimki:


„KriviKatException“ koja mora biti označena iznimka, te „KriviSmjerException“ koja mora
biti iznimka kod izvođenja. Svaka od klasa mora imati po tri konstruktora.

 

4. U paketu main potrebno je kreirati klasu „Glavna“ koja sadrži „main“ metodu.

 

5. Kako bi početni kat dizala i smjer bili nasumični, potrebno je koristiti klasu Random koja
se nalazi u java.util paketu na sljedeći način:

 

Random rnd = new Random();
boolean smjer = rnd.nextBoolean();
int kat = rnd.nextInt(5);

 

6. Unutar klase „Glavna“ potrebno je implementirati metodu sa sljedećim prototipom:
private static void provjeriPozicijuISmjer(
final int kat, final int katOsobe, boolean smjer) throws KriviKatException
Za svaku promjenu kata potrebno je tri sekunde čekanja kako bi se što bolje dočaralo
funkcioniranje dizala. Za čekanje je potrebno koristiti metodu koja je objašnjena u
sljedećem koraku.

 

7. U klasu „Glavna“ potrebno je dodati metodu koja simulira čekanje u vremenskom
periodu od tri sekunde (elemente i naredbe koje su korištene unutar metode potrebno je
proučiti u javadoc dokumentaciji). Metoda „convertStanjeToString“ opisana je u osmom
koraku. Logger objekt objašnjen je u 10. koraku.
private static void waiting(final int kat, final boolean smjer) {
System.out.println(convertStanjeToString(kat, smjer));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
logger.debug("Prekid čekanja!", e);
}
}

 

8. U klasu „Glavna“ potrebno je dodati metodu „convertStanjeToString“ koja pretvara broj
kata i smjer kretanja dizala u opis stanja dizala. Npr. ukoliko varijabla „kat“ ima vrijednost
1, a varijabla „smjer“ ima vrijednost „true“, metoda „convertStanjeToString“ mora vratiti
vrijednost „Dizalo se nalazi na 1. katu i kreće se prema gore.“.

 

9. U „main“ metodi potrebno je implementirati beskonačnu petlju koja izmjenjuje kat i smjer
dizala kao što je opisano u uvodu zadatka dok god ne pronađe osobu koja čeka dizalo.
Kako se obje greške mogu obraditi unutar jednog „catch“ bloka, potrebno je koristiti
mogućnost Jave 7, odnosno „multicatch“ blok. Primjer „multicatch“ bloka slijedi u nastavku:
} catch (KriviKatException | KriviSmjerException e) {
//Programski kod za obradu iznimaka
}

 

10. Ugraditi „Logback“ biblioteku u program, te detaljno logirati svaki dio programa.
„Logback“ biblioteka je opisana u poglavlju 3.3. pripreme za laboratorijske vježbe.
Primjer izvođenja programa:
Unesite kat na kojem se nalazi osoba:
2
Dizalo se nalazi na 1. katu i kreće se prema gore.
Dizalo se kreće u krivom smjeru
Dizalo se nalazi na 2. katu i kreće se prema gore.
Dizalo se kreće u krivom smjeru
Dizalo se nalazi na 3. katu i kreće se prema gore.

Dizalo se kreće u krivom smjeru
Dizalo se nalazi na 4. katu i kreće se prema gore.
Dizalo se kreće u krivom smjeru
Dizalo se nalazi na 3. katu i kreće se prema dolje.
Dizalo je na krivom katu!
Dizalo se nalazi na 2. katu i kreće se prema dolje.
Dizalo je stiglo

 

 

Evo i tog prokletog logbacka:

http://www.mediafire.com/?epo3j4k6kvya3lc

Pranja ned 6.11.2011 19:43
OriginalEXE kaže...

Ja bih ti drage volje pomogao, vjeruj mi, ali nažalost nemam dovoljno znanja za sada. Žao mi je stvarno, ako išta, volim pomagati.

 Nemam ni ja toliko znanja, no ovo mi je zadano kao prokleta priprema za labos. U stvari, samo 5 kolega (od 100+) zna tako nešto napisati.

 

I sad sam još skužio da ima još gluposti u toj pripremi. Ubit ću se.

dado2202 pon 7.11.2011 09:08
Pranja kaže...

Molim pomoć svih znalaca-trebao bih napraviti ovo:

 

Ima tu dosta toga, sumnjam da se nekome da potrošiti sat-dva vremena za pisanje toga. Izrada aplikacije ne izgleda uopće teško, samo se treba slijediti korake. Pretpostavljam da si napravio C/P zadaće.

 

Pa kreni prvo od prvog koraka, kreiraj projekt, ubaci libove koji ti trebaju, napravi properties datoteku (mislim da logback isto koristi properties kao i log4j, iskreno, jednom sam ga probao koristiti,ali brzo odustao) napravi main loop i ispiši nešto pomoću logback-a u log. Pretpostavljam da je konzolna aplikacija, pa znači čitaš input sa konzole (možeš si postaviti u properties da ono što ispišeš u log se prikaže i na konzoli) za naredbe.

 

Onda treba napraviti klasu s kojom ćeš se dalje baviti (dizalo), pa ako bude treba pomoć na kojem koraku, slobodno se javi tu.

Pranja pon 7.11.2011 12:03
dado2202 kaže...

Ima tu dosta toga, sumnjam da se nekome da potrošiti sat-dva vremena za pisanje toga. Izrada aplikacije ne izgleda uopće teško, samo se treba slijediti korake. Pretpostavljam da si napravio C/P zadaće.

 

Pa kreni prvo od prvog koraka, kreiraj projekt, ubaci libove koji ti trebaju, napravi properties datoteku (mislim da logback isto koristi properties kao i log4j, iskreno, jednom sam ga probao koristiti,ali brzo odustao) napravi main loop i ispiši nešto pomoću logback-a u log. Pretpostavljam da je konzolna aplikacija, pa znači čitaš input sa konzole (možeš si postaviti u properties da ono što ispišeš u log se prikaže i na konzoli) za naredbe.

 

Onda treba napraviti klasu s kojom ćeš se dalje baviti (dizalo), pa ako bude treba pomoć na kojem koraku, slobodno se javi tu.

 Ja sam kreirao projek i ubacio dadoteke i kreirao klase i exceptione. Dalje ništa ne znam.

dado2202 pon 7.11.2011 14:10
Pranja kaže...

 Ja sam kreirao projek i ubacio dadoteke i kreirao klase i exceptione. Dalje ništa ne znam.

Evo kreni dalje s ovim

 

http://logback.qos.ch/manual/index.html

 

Dosta su ti prva tri chaptera (malo i četvrti, ali recimo da su ti prva tri dosta). Vidim da je autor logback-a isti koji je napisao i log4j. Kako vidim logback se nastavlja na log4j. Mislim da budem pogledao taj logback na kraju kao zamjenu za log4j.{#}

Vidim da je jedina razlika na log4j da se koristi xml za konfiguraciju appendera (valjda se dade i properties, ali sad na prvu ruku mi se nije dalo kopati)

 

Napravi klasu kako zahtjeva u zadatku (mislim da je "Glavna") i dodaj u nju public static void main (String args[]) (ako koristiš eclipse, dok kreiraš klasu možeš odabrati da ti on generira main metodu), prema manual-u koji imaš na linku iznad probaj napraviti ispisivanje preko logback-a (da ti appenda u fileappender(kojim logiraš u log) i consoleappender(kojim logiraš na konzolu)). Kad to napraviš, onda možeš dalje.

Deus ex machina pon 7.11.2011 21:30
Pranja kaže...
Deus ex machina kaže...

Ma sve ti je to ista pasta, jedine velike sintakticke promjene donijela je 5ica sa genericima. Uzmi koju god knjigu od petice nadalje, i ostatak sintaktickog secera procitaj na webu.

 A što je sa npr. catch/multicatch i try blokovima u 7?

Koji dio od podebljanog u mojem postu ti nije jasan?

Nije potrebna knjiga da bi se shvatio novi sintakticki konstrukt koji je iovako ionako beskoristan ako pises kvalitetan kod.

 

try {

...

} catch(ExceptionType1 e) {

..

 

} catch(ExceptionType2 e) {

...

} catch(ExceptionType3 e) {

...
}
naspram

 

try {

...

} catch(ExceptionType1 e | ExceptionType2 e | ExceptionType3 e) {

..

}

 

stvarno je potrebna knjiga za to, nema sto!!! Mislim da si na pogresnom faxu, decko...

 

Pranja pon 7.11.2011 23:29

Ovo imam zasad:

 

Glavna:

 

package main;

import iznimke.KriviSmjerException;
import iznimke.KriviKatException;

import java.util.Random;
import java.util.logging.Logger;

public class Glavna {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Random rnd = new Random();
  boolean smjer = rnd.nextBoolean();
  int kat = rnd.nextInt(5);
  int katOsobe = 0;

  
  
  private static void waiting(final int kat, final boolean smjer){
   System.out.println(convertStanjeToString(kat, smjer));
   try{
    Thread.sleep(3000);
   } catch (InterruptedException e){
    Logger.debug("Prekid čekanja!", e);
   }
  }
  
  public @ convertStanjeToString(){
   for(i=0;i>6;i++)
   {
    if(kat==i)
    {
     if(smjer==true)
     {
      System.out.println("Dizalo se nalazi na "+ i + ". katu i kreće se prema gore!");
     }
     else if(smjer==false)
     {
      System.out.println("Dizalo se nalazi na "+ i + ". katu i kreće se prema dolje!");
     
     }
    
    }
    private static @ provjeriPozicijuISmjer(final int kat, final int katOsobe, boolean smjer) throws KriviKatException{
     if (smjer == true) {
      throw KriviSmjerException;
     } else if (kat != i) {
      throw KriviKatException;
     }
    }
   }
  }

 }

 private static char[] convertStanjeToString(int kat, boolean smjer) {
  // TODO Auto-generated method stub
  return null;
 }

}

 

KriviKatException:

 

package iznimke;

public class KriviKatException extends Exception {

 

 /**
 *
 */
private static final long serialVersionUID = -7213779617740051725L;

 public KriviKatException(String message) {
  super(message);
 }


 public KriviKatException(Throwable cause) {
  super(cause);
 }

  public KriviKatException(String message, Throwable cause) {
  super(message, cause);
 }

}

 

KriviSmjerException:

 

package iznimke;

public class KriviSmjerException extends RuntimeException {

 /**
 *
 */
private static final long serialVersionUID = -5834636610592910104L;

 public KriviSmjerException(String message) {
  super(message);
 }


 public KriviSmjerException(Throwable cause) {
  super(cause);
 }

  public KriviSmjerException(String message, Throwable cause) {
  super(message, cause);
 }

}