Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Java i fudbal ubi me ovaj zadatak

[es] :: Java :: Java i fudbal ubi me ovaj zadatak

[ Pregleda: 3542 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mehom
student

Član broj: 254128
Poruke: 9
89.146.163.*



Profil

icon Java i fudbal ubi me ovaj zadatak09.03.2010. u 13:26 - pre 141 meseci
Pozdrav, nikako da rijesim slijedeci zadatak: Java aplikacija koja korisniku omogucava rad sa fudbalskim rezultatima. Na pocetku rada korisiku se nude opcije sistema koje moze da koristi. U sistemu postoje slijedece opcije : citanje tabele timova i unos novih rezultata. Opcija citanje tabele timova prikazuje korisniku trenutnu tabelu timova (svaka pobjeda donosi 3 boda, nerjesen 1, poraz 0). Opcija unos novih rezultata trazi od korisnika unos novih rezultata. Potrebno je unijeti dva tima i postignut rezultat. Za sve promjene izvrsiti sve potrebne validacije. Podaci se cuvaju u tekstualnom fajlu i sva citanja i upisi se rade iz tog fajla.

Iz nekih primjera koje sam pronasao uspio sam donekle rijesiti problem, ako nema timova upisat ce podatke, ali ako tim vec postoji nece upisati i tu puca :(. Neznam kako da ovo rijesim, ako ima neko ko zna bio bih mu zahvalan na pomoci. U nastavku slijedi sto sam do sada uspio, ako se to moze tako reci.


package fudbalskirezultati;
import java.io.*;
import java.util.*;


public class Main {


public static void main(String[] args) throws Exception
{
char izbor; //valijablazaunosizbora...
Scanner scanner = new Scanner(System.in);

do
{
System.out.println("\n\n\n********* F U D B A L **********");
System.out.println("");
System.out.println("1)Unos novog tima");
System.out.println("2)Unos novog rezultata");
System.out.println("x)Izlazizprograma");
System.out.println("");
System.out.println("***************************************");

String tString = scanner.next();
izbor = tString.charAt(0);

Main vd = new Main();

switch(izbor)
{
//unos novog tima
case '1':
{
vd.UnosNovogTima();
break;
}
//unos rezultata
case '2':
{
vd.UnosNovogRezultata();
break;
}
//izlaz
case 'x':
{
System.out.println("Izlazizprograma...");
break;
}
default:
{
System.out.print("Unijelistepogreڑan izbor, pokuڑajteponovo. \n");
break;
}
}
}while(izbor != 'x');
}

public boolean ProvjeraDaLiElementPostoji(String file, String element)
{
boolean element_postoji = false;

FileInputStream fin;
DataInputStream in;
BufferedReader br;

String postojeci_element;

try
{
fin = new FileInputStream(file);
in = new DataInputStream(fin);
br = new BufferedReader(new InputStreamReader(in));

//بitajdatotekulinijupoliniju...
while ((postojeci_element = br.readLine()) != null)
{
// Ako se element pronaًepostavivarijabluna true...
if(postojeci_element.equals(element))
element_postoji = true;
}
in.close();
}
//Ako se desigreڑkaprièitanjudatoteke...
catch (IOException e)
{
System.err.println("Greڑkaprièitanjudatoteke: " + file);
System.exit(-1);
}
//ako je element pronaًenvrati true, inaèevrati false...
return element_postoji;
}

public void UnosNovogTima()
{
Scanner scanner = new Scanner(System.in);

System.out.println("\nUnesite naziv Tima:");
String naziv_tima = scanner.nextLine();
System.out.println("Unesite pocetni broj bodova:");
String broj_bodova = scanner.nextLine();

//provjera da li artikalvecpostoji...
//akopostojisamopromijeniliniju i dodajkolicinu...
boolean artikal_postoji = false;

try
{
FileReader fr = new FileReader("Artikli.txt");
BufferedReader br = new BufferedReader(fr);

final String NEW_LINE = System.getProperty("line.separator");
StringBuffer sb = new StringBuffer();
String line;

Float nova_kolicina;
Float stara_kolicina;

//tajdatotekulinijupoliniju...
while ((line = br.readLine()) != null)
{
// Ako se artikalpronaًesamopovecajkolicinu...
if(line.contains(naziv_tima + " Kolicina: "))
{
stara_kolicina = Float.valueOf(line.replace("Artikal: " + naziv_tima + " Kolicina: ", ""));
nova_kolicina = stara_kolicina + Float.valueOf(broj_bodova);
sb.append("Artikal: " + naziv_tima + " Kolicina: " + Float.toString(nova_kolicina));
sb.append(NEW_LINE);

artikal_postoji = true;
}
else
{
sb.append(line);
sb.append(NEW_LINE);
}
}
//akonakonsto je procitanacijeladatoteka i nijepronadjenartikal, radi se o novomartiklu...
//upisinovuliniju u buffer i kasnije u datoteku...
if(artikal_postoji == false)
{
sb.append("Artikal: " + naziv_tima + " Kolicina: " + broj_bodova);
sb.append(NEW_LINE);
}

fr.close();

//Upisisadrzajbufferanazad u datoteku...
PrintWriter pw= new PrintWriter(new FileWriter("Artikli.txt"));
pw.print(sb.toString());
pw.close();
}
catch (FileNotFoundException ex) // akodatoteka ne postoji...
{
ex.printStackTrace();
}
catch (IOException ex) //ako je doڑlo do greڑkeprilikomupisa u datoteku...
{
ex.printStackTrace();
}
System.out.println("Artikal: " + naziv_tima.trim() + ", je uspjeڑno unesen.\n");
}

public void UnosNovogRezultata()
{
Scanner scanner = new Scanner(System.in);

System.out.println("\nUnesite naziv tima1:");
String tim1 = scanner.nextLine();
System.out.println("\nUnesite naziv tima2:");
String tim2 = scanner.nextLine();
System.out.println("Unesite broj golova tim1:");
String g1 = scanner.nextLine();
System.out.println("Unesite broj golova tim2:");
String g2 = scanner.nextLine();

//provjera da li artikalvecpostoji...
//akopostojisamopromijeniliniju i dodajkolicinu...
boolean artikal_postoji = false;
{

int r1 = Integer.parseInt(g1);
int r2 = Integer.parseInt(g2);
if(r1<r2)
{
r1=0;
r2=3;
}
else
{
if(r1>r2)
{
r1=3;
r2=0;
}
else
{
r1=1;
r2=1;
}
}



String bod1 ;
String bod2 ;
bod1=Float.toString(r1);
bod2=Float.toString(r2);
try
{
FileReader fr = new FileReader("Artikli.txt");
BufferedReader br = new BufferedReader(fr);

final String NEW_LINE = System.getProperty("line.separator");
StringBuffer sb = new StringBuffer();
String line;

Float nova_kolicina;
Float stara_kolicina;
Float BodPrije;
Float BodPoslije;

//بitajdatotekulinijupoliniju...
while ((line = br.readLine()) != null)
{
// Ako se artikalpronaًesamopovecajkolicinu...
if(line.contains(tim1 + " Kolicina: "))
{
stara_kolicina = Float.valueOf(line.replace("Artikal: " + tim1 + " Kolicina: ", ""));
nova_kolicina = stara_kolicina + Float.valueOf(bod1);
sb.append("Artikal: " + tim1 + " Kolicina: " + Float.toString(nova_kolicina));
sb.append(NEW_LINE);

// ovdje sam htio unijeti drugu liniju i upisati bodove ali nece :(

// BodPrije = Float.valueOf(line.replace("Artikal: " + tim2 + " Kolicina: ", ""));
// BodPoslije = BodPrije + Float.valueOf(bod2);
// sb.append("Artikal: " + tim2 + " Kolicina: " + Float.toString(BodPoslije));
// sb.append(NEW_LINE);

artikal_postoji = true;
}
else

{
sb.append(line);
sb.append(NEW_LINE);
}
}
//akonakonsto je procitanacijeladatoteka i nijepronadjen, radi se o novom...
//upisinovuliniju u buffer i kasnije u datoteku...
if(artikal_postoji == false)
{
sb.append("Artikal: " + tim1 + " Kolicina: " + bod1);
sb.append(NEW_LINE);
//

sb.append("Artikal: " + tim2 + " Kolicina: " + bod2);
sb.append(NEW_LINE);

}

fr.close();

//Upisisadrzajbufferanazad u datoteku...
PrintWriter pw= new PrintWriter(new FileWriter("Artikli.txt"));
pw.print(sb.toString());
pw.close();
}


catch (FileNotFoundException ex) // akodatoteka ne postoji...
{
ex.printStackTrace();
}
catch (IOException ex) //ako je doڑlo do greڑkeprilikomupisa u datoteku...
{
ex.printStackTrace();
}
System.out.println("tim: " + tim1.trim() + ", je uspjeڑno unesen.\n");


}
}
}
 
Odgovor na temu

mehom
student

Član broj: 254128
Poruke: 9
89.146.186.*



Profil

icon Java i fudbal ubi me ovaj zadatak10.03.2010. u 09:44 - pre 141 meseci
Uspio sam pronaci gdje je stekalo, umjesto else trebalo je else if i radi. Ostaje problem sortiranja. Sadrzaj fajla je ispod i trenutno ne znam kako ga sortirati?!!! Ako neko ima ideju olaksao bi mi dosta.
pozzz

Tim: Sarajevo Bodova: 7.0
Tim: �eljo Bodova: 2.0
Tim: Vele� Bodova: 3.0
Tim: �elik Bodova: 5.0
Tim: Travnik Bodova: 3.0
Tim: Zrinjski Bodova: 3.0

P.S.
Za ucitavanje bez sortiranja napisao sam slijedece:
// tabela sa bodovima...
public void Tabela() throws Exception
{
File f = new File("Tabela.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

StringBuffer sb = new StringBuffer();
String eachLine = br.readLine();

while (eachLine != null) {
sb.append(eachLine);
sb.append("\n");
eachLine = br.readLine();
}
//
// System.out.println(sb.toString());
}
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
82.117.202.*



+6 Profil

icon Re: Java i fudbal ubi me ovaj zadatak10.03.2010. u 12:13 - pre 141 meseci
Jednostavno, prvo napuni te linije u neku listu i onda sortiraj tu listu sa Arrays.sort()
evo ti primer: http://www.java2s.com/Code/Jav...rExampleForBuildInDataType.htm

Pozdrav
Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

mehom
student

Član broj: 254128
Poruke: 9
89.146.167.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak10.03.2010. u 12:21 - pre 141 meseci
Hvala za javljanje, gledao sam ovo i jos nekih drugih primjera ali nece, nesto ne znam.

probao sam na slijedeci nacin ali mi samo ispise redom liniju po liniju.

//
public void Tabela() throws Exception
{
File f = new File("Tabela.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

StringBuffer sb = new StringBuffer();
String eachLine = br.readLine();

while (eachLine != null) {
sb.append(eachLine);
sb.append("\n");
eachLine = br.readLine();
}
//
{

String [] testNiz = {sb.toString()};
Arrays.sort(testNiz);
System.out.println(Arrays.toString(testNiz));
// Arrays.sort(testNiz, Collections.reverseOrder());
// System.out.println(Arrays.toString(testNiz));
}
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
82.117.202.*



+6 Profil

icon Re: Java i fudbal ubi me ovaj zadatak10.03.2010. u 12:42 - pre 141 meseci
Citat:
String [] testNiz = {sb.toString()}; 


Ovako si napravio niz od 1 elementa.
Trebas da napravis listu stringova prilikom iscitavanja fajla.
Znaci umesto
Code:
sb.append(eachLine);
treba da punis tu listu stringova i onda da je posle punjenja sortiras.
Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

mehom
student

Član broj: 254128
Poruke: 9
89.146.174.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak10.03.2010. u 13:00 - pre 141 meseci
hebiga, to ne znam kako uraditi inace bih imao rjesen problem :).

Ako znas kako bih to mogao uraditi bio bih ti zahvalan za kod. Evo sad analiziram slijedeci primjer ali mi ni on nedaje ocekivani rezultat, tj ne sortira kako bi trebalo jer je broj bodova na kraju reda.

//
public void Tabela()
{
// create a String array
String[] fruits = {"1banana 2", "1orange 1", "1kiwi 5", "1apple 4"};

// sort the array, using the sort method of the Arrays class
Arrays.sort(fruits);

// print the sorted results
for (String fruit : fruits)
{
System.out.println(fruit);
}

}

Rezultat sortiranja.
1apple 4
1banana 2
1kiwi 5
1orange 1

pozzz
 
Odgovor na temu

IcemanX
System administrator/Test automation
engineer
Betware doo
Beograd

Član broj: 253997
Poruke: 155
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Java i fudbal ubi me ovaj zadatak16.03.2010. u 02:40 - pre 141 meseci
Gde li samo ucis ovako da pises sve u Main klasi??Koliko ja znam Java je OO programski jezik :S,ja ovo kad bi profi poslao mislim da bi me oborio citavu godinu :DDD
alea iacta est
 
Odgovor na temu

mehom
student

Član broj: 254128
Poruke: 9
89.146.185.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak16.03.2010. u 06:43 - pre 141 meseci
Kolega IcemanX, nepotrebno spamate temu. Vjerujem da je vasa oblast Java i da imate veliko znanje iz Java programiranja. Tacno je da su se metode mogle izdvojiti u posebne klase a samo pozivati u Main klasi. Ipak, smatram da ovdje dolazi dosta ljudi koji tek uce Javu i prakticni primjeri koje bi mogli analizirati pa iz njih nesto i nauciti su korisni, bar meni su bili. Moja oblast nije Java ali po programu je trebam poloziti. Ukoliko imas bolje rjesenje budi kolegijalan i postavi ga ovdje ili negdje drugdje gdje bi drugi mogli pogledati i od tebe nesto nauciti. Ja cu svoje rijesenje postaviti cim zavrsim sa ispitom.

LP
 
Odgovor na temu

IcemanX
System administrator/Test automation
engineer
Betware doo
Beograd

Član broj: 253997
Poruke: 155
109.92.232.*



+2 Profil

icon Re: Java i fudbal ubi me ovaj zadatak16.03.2010. u 16:38 - pre 141 meseci
Ne samo kazem,ako ih profesor ovako uci da programiraju onda bolje da ih ne baca u zabludu neka uzmu knjigu i sami uce...ovako nece nikad izaci na pravi put..a nema frke uradit cu kad uhvatim vremena..ako mu uopste i treba ovo jos
alea iacta est
 
Odgovor na temu

biske86
Ivan Biševac
Zubin Potok

Član broj: 62435
Poruke: 979
109.93.71.*

Sajt: biske.rs


+39 Profil

icon Re: Java i fudbal ubi me ovaj zadatak16.03.2010. u 21:57 - pre 141 meseci
Kolega je pokušao da ti skrene pažnju na lošu praksu pisanja objektno orijentisanog koda ali si se ti očigledno naljutio bez potrebe. Ja sam otprilike početnik u java programiranju i pravim iste greške kao i ti. Nemam praksu da metode izdvajam u posebne klase već ih nabacujem unutar main klase. Ta navika mi je ostala iz ranijih programerskih dana kada sam učio Paskal, C i Visual Basic.

Svakako ću pokušati u narednom periodu na učinim napor u smeru ispravljanja ove anomalije..
 
Odgovor na temu

IcemanX
System administrator/Test automation
engineer
Betware doo
Beograd

Član broj: 253997
Poruke: 155
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Java i fudbal ubi me ovaj zadatak16.03.2010. u 22:16 - pre 141 meseci
Upravo tako,glavna osobina OO programiranja je upravo izbjegavanje metoda koje zauzimaju 5 ekrana ,zatim delenje programa u klase ,hierarhija itd..svaka klasa ima jedan zadatak iskljucivo...svaka klasa bi trebala da ima odgovarajuce konstruktor,geter ,seter,zatim enkapsulacija,polimorfizam,apstrakcija itd bi se trebali postovati..
alea iacta est
 
Odgovor na temu

mehom
student

Član broj: 254128
Poruke: 9
89.146.161.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak17.03.2010. u 06:55 - pre 141 meseci
Pozdrav biske86 i IcemanX, nisam se naljutio ali vec su tu tri posta koji ne pridonose rjesenju postavljenog problema. Vec sam pomenuo da sam mogao izdvojiti metode u posebne klase i naravno profesor nas ne uci da radimo ovako. Razlog sto sam postavio sve u Main klasu je prakticne prirode. Ne razmisljam samo o sebi vec i o svim drugim koji ce imati pocetnicke probleme na ovaj nacin mogu vidjeti cjelokupan kod. Drugi razlog je sto iskusni Java programeri mogu ukazati na manjkavosti i moguca bolja rjesenja, sto bi drugima koji uce prakticno ukazalo kako treba raditi. Mozda ja i grijesim ali meni je puno pomoglo analiziranje rjesenja koja sam uspio pronaci i ukoliko neko bude nasao svoje rjesenje gledajuci ovaj kod ili kod nekog od vas ja cu biti sretan jer sam nekome pomogao kao sto su meni pomogli drugi.

LP
 
Odgovor na temu

Tulex
Danguba
Novi Sad

Član broj: 170959
Poruke: 121
*.prozone.rs.



Profil

icon Re: Java i fudbal ubi me ovaj zadatak17.03.2010. u 08:54 - pre 141 meseci
Ok, da ne bi razvlacili ovu temu u nedogled... ukratko objasnjenje u vezi onog sortiranja koje ti ne radi.

Problem kod tvog sortiranja je sto ti zelis sortirati po bodovima koji se nalaze na kraju stringa, a ne na pocetku.
Resenje nije elegantno ali jednostavno... zarotiraj malo string i stavi bodove na prvo mesto, bar za potrebe sortiranja, pa ih ponovo vrati nazad

Moglo bi se to verovatno uraditi i na drugi nacin sa mapama itd... ali to je tek komplikovanje.
I ako pretpostavimo da ti jedan red u fajlu izgleda ovako.. "neki-text razmak broj" onda taj broj mozes naci kao...

Code:
String broj = line.substring(line.lastIndexOf(" ")+1);


malo se poigras sa stringom i namestis da ti prvo idu bodovi pa onda ostatak texta.
Zatim taj string stavis u Vector
Code:

Vector array = new Vector();
array.add(line);


kad iscitas ceo fajl, mozes odraditi
Code:

String[] stringArray =  new String[array.size()];
array.toArray(stringArray );
Arrays.sort(stringArray);


Nakon ovoga bi trebao imati sortiran niz stringova po bodovima u promenljivoj stringArray, ako zelis da bodove opet vratis na kraj stringa
moraces opet da se malo poigras sa njima.


Pozz
 
Odgovor na temu

IgorMedo
Igor Madjeric
Doboj

Član broj: 101335
Poruke: 30
89.204.153.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak15.04.2010. u 00:18 - pre 140 meseci
Obicno ne voli teme sa zadacima za ispit, ali na tvoju srecu ovaj zadatak sam uradio(nisam uradio do kraja ali mislim da ga mozes lako zavrsiti i ti trebas nesto da uradis :) ) samo iz jednog razloga.
Poste si negdje u temi naveo da ti je lakse nauciti ako je sve nabacano u main metodi, i da je pocetnicima lakse tako da uce. Sa ovom tvojm konstatacijom se u opste ne slazem.
Ukoliko se bavis programiranje (ne mora biti Java) i taj programski jezik je OO onda treba da koristis OO koncepte programiranja jer ces na taj naci napraviti kod koji je razumljiv svima a i samom tebi.
Negdje si nave da si napravio pogresan if uslov. Pronalazak ove greske u jednoj metodi koja ima preko 20 linija je prilicno tesko i na to ces izgubiti dosta vremena. Kod koji pises mora biti razumljiv svima koji ga gledaj, bez obzira na njihov nivo poznavanja nekog programskog jezika (bili oni pocetnici ili profesinalci), uvijek treba da nastojis da napravis razumljiv kod. Iskreno tvoj kod koji si postavio na ovoj temi nisam ni pogleda ni ti sam nastojao da ga analizira. Jedan savjet prilikom programiranja ne moj da pises hakove da bi rjesio problem bolje sjedi i razmisli 10 minuta sta hoces a onda to uradi.

Primjer koji slijedi mislim da je razumljim svima i jednostavan za ispravke:

Code:

package com.fudbal;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Set;
import java.util.TreeSet;

/**
 * Sadrzi informacije vezane za jedan fudbalski klub.
 * 
 * Ova klas implementira Serializable interfejs samo iza jednog razloga:
 *    Ukoliko je klasa Serialzable to znaci da ja kao programer nemoram da relizujem kod za citanje i pisanje klase!!!!!
 *    Nije bitno da li je izvor Mreza, Baza podataka ili Datoteka citanje i pisanje se radi na isti nacin!!!
 * 
 * Klasa implementira Comparable intefejs (methoda comperTo) koja omogucava poredjenje dva objekta istog tipa.
 * Na ovaj naciun ukoliko koristis TreeSet sadrzaj seta ce biti sortiran!!!
 * 
 * @author igor
 * 
 */
class Klub implements Serializable, Comparable<Klub> {
    /**
     * Serial Version Id.
     */
    private static final long serialVersionUID = -5700018480672284604L;

    // Ime kluba.
    private String imeKluba;

    // Broj bodova.
    private Integer brBodova;

    public Klub(String imeKluba, int brBodova) {
        this.imeKluba = imeKluba;
        this.brBodova = brBodova;
    }

    public String getImeKluba() {
        return imeKluba;
    }

    public void setImeKluba(String imeKluba) {
        this.imeKluba = imeKluba;
    }

    public Integer getBrBodova() {
        return brBodova;
    }

    public void setBrBodova(Integer brBodova) {
        this.brBodova = brBodova;
    }

    /**
     * Metoda za poredjenje dva fudbalska kluba. Poredjenje se vrsi po broj
     * bodova ukoliko je broj bodova jednak onda po imenu.
     */
    @Override
    public int compareTo(Klub klub) {

        int cmp = klub.getBrBodova().compareTo(brBodova);

        if (cmp == 0) {
            return imeKluba.compareTo(klub.getImeKluba());
        }

        return cmp;
    }

    @Override
    public String toString() {
        return imeKluba + ":" + brBodova;
    }

}

public class Fudbal {

    private static final String FILE_NAME = "tabela.tab";
    
    // Tabela klubova.
    private Set<Klub> tabela = new TreeSet<Klub>();

    public Set<Klub> getTabela() {
        return tabela;
    }

    /**
     * Serial Version Id.
     */
    private static final long serialVersionUID = -1947890881104814447L;

    /**
     * Metoda za provjeru rezultata utakmice i upis bodova klubovima....
     * 
     * @param domacin
     * @param gost
     * @param domBrGolova
     * @param gostBrGolova
     */
    private void utakmica(Klub domacin, Klub gost, Integer domBrGolova,
            Integer gostBrGolova) {
        int cmp = domBrGolova.compareTo(gostBrGolova);
        if (cmp == 0) {
            domacin.setBrBodova(domacin.getBrBodova() + 1);
            gost.setBrBodova(gost.getBrBodova() + 1);
        } else if (cmp > 1) {
            domacin.setBrBodova(domacin.getBrBodova() + 3);
        } else {
            gost.setBrBodova(gost.getBrBodova() + 3);
        }
    }

    /**
     * Metoda za prikazivanje tabele.
     */
    private void prikaziTabelu() {
        System.out.println("Ime Kluba : Broj bodova");
        System.out.println("------------------------");
        for (Klub klub : tabela) {
            System.out.println(klub);
        }
        System.out.println("------------------------");
    }

    /**
     * Snima tabelu u datoteku.
     *    Obrati paznju jednosatvno snimis tabelu.
     * @throws IOException
     */
    private void snimi() throws IOException {
        FileOutputStream fs = new FileOutputStream(FILE_NAME);
        ObjectOutputStream os = new ObjectOutputStream(fs);
        os.writeObject(tabela);
        os.close();
    }
    
    /**
     * Cita tabelu iz datoteke.
     * @throws IOException
     * @throws ClassNotFoundException
     */
    private void ucitaj() throws IOException, ClassNotFoundException{
        FileInputStream fis = new FileInputStream(FILE_NAME);
        ObjectInputStream is = new ObjectInputStream(fis);
        tabela = (TreeSet<Klub>) is.readObject();
    }
    
    private Klub dodajKlub(String imeKluba, int brBodova){
        Klub klub = new Klub(imeKluba, brBodova);
        tabela.add(klub);
        return klub;
    }
    
    private void dodajKlub(Klub klub){
        tabela.add(klub);
    }
    
    /**
     * Vraca klub ukoliko postoji ukoliko ne izbacuje Izuzetak!
     * @param imeKluba
     * @return trazeni klub
     */
    private Klub pronadjiKlub(String imeKluba){
        for (Klub klub : tabela) {
            if (klub.getImeKluba().equalsIgnoreCase(imeKluba)){
                return klub;
            }
        }
        throw new IllegalArgumentException("Klub sa imenom:'" + imeKluba + "' ne postoji");
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        Fudbal fudbal = new Fudbal();

        //Pokusaj da ucitas klubove, ukoliko klubovi ne postoje kreiraj nove.
        try{
            fudbal.ucitaj();
        }catch (Exception e) {
            Klub c1 = fudbal.dodajKlub("Klub A", 4);
            Klub c2 = fudbal.dodajKlub("Klub B", 0);
            fudbal.getTabela().add(c1);
            fudbal.getTabela().add(c2);
            //Odigraj utakmicu
            fudbal.utakmica(c1, c2, 2, 3);
        }
        
        fudbal.dodajKlub(new Klub("Klub C", 5));
        
        // Prikazi tabelu.
        fudbal.prikaziTabelu();

        // Upisi tabelu u datoteku.
        try {
            fudbal.snimi();
        } catch (IOException e) {
            System.out.println("Greska prilikom snimanja:" + e.getMessage());
        }

    }

}



Sve sto treba ti da uradis je da izmjenis malo main metodu tako da mozes da dodajes ekipu, odigras utakmicu i sl.
Mislim da ti to nece biti tesko.

Ovaj post je dobronamjeran bez namjere da te uvrijedi ili naljuti na bilo koji naci ovo ti je cisto savjet kako to da uradis na malo lijepsi nacin bilo da koristis Javu, C, C#, Delphi, VB.NET ili bilo koji drugi OO.
Naravno da se i ovo moze jos dotjerati i ispraviti da bude jos bolje, ali prilicno je kasno i nema vremena da detaljusem.
Pozdrav
 
Odgovor na temu

mehom
student

Član broj: 254128
Poruke: 9
89.146.167.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak15.04.2010. u 07:28 - pre 140 meseci
Pozdrav Igore,
hvala ti na vremenu koje si odvojio da mi pomognes. Zadatak sam vec rijesio, ne bas kako si ti predlozio ali radi :). Ovaj zadatak je bio sa prvog kolokvija i moram priznati da mi je popio zivaca ali eto rijesi se. Ja nisam programer, moja orjentacija je sistemska analiza i projektovanje, ipak programiranje moram proci. Apsolutno je jasno da OO jezici su osmisljeni da olaksaju zivot programerima, jasno je da je kod citljiviji ako se razdvoji u klase, ja se dobro snalazim ako je sve u pocetku u main metodi naprosto sto mogu pratiti sto kuda ide i sto je s cim povezano, valjda sam naopak :). Najbolje bi bilo da se zakace projekti to bi bila druga prica. Neljutim se ja ninakoga, na kraju svako ima pravo da iznese svoje misljenje, ali ako komentarisemo da nesto nevalja ili nije dovoljno dobro posteno bi bilo da postavimo svoje rjesenje koje smatramo boljim i to bi bio kvalitet. U nastavku cu postaviti svoje rijesenje mozda kasnije nekom i pomogne. Uvijek smo u stisci s vremenom pa tvoj prijedlog nisam detaljno analizirao i usporedjivao ali cinimise da nema sortiranja tabele prilikom ispisa na ekran ili se varam? Ja sam napravio propust zato sto sam koristio float koji mi nije trebao ali u tom trenutku nisam znao vise. Slijedi kod.

Code:

/*
 * Ovo je Main klasa
 * 
 */

package rezultati;

import java.io.*;
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author Meho
 */

public class Main {



 public static void main(String[] args)  throws Exception
    {
        char izbor; //varijabla zaunos izbora...
        Scanner scanner = new Scanner(System.in);

    do
         {
            System.out.println("\n********* F U D B A L **********");
            System.out.println("");
            System.out.println("1)Unos novog tima\n");
            System.out.println("2)Unos novog rezultata\n");
            System.out.println("3)Prikaz tabele\n");
            System.out.println("x)Izlaz iz programa\n");
            System.out.println("");
            System.out.println("*********************************\n\n");

            String tString = scanner.next();
            izbor = tString.charAt(0);

            switch(izbor)
             {
//unos novog tima
                            case '1':
                 {
                    Unos.UnosNovogTima() ;
                    break;
                 }
//unos rezultata
            case '2':
                 {
                    NoviRezultat.UnosNovogRezultata();
                    break;
                 }
// prikaz tabele
                        case '3':
                 {
                    Poredak.Tabela();
                    break;
                 }
//dijaloska poruka
                        case '4':
                 {
                    String poruka = "UNESI BROJ 1 ILI 2 ILI 3!!!!";
                JOptionPane.showMessageDialog(new JFrame(), poruka, "PORUKA ZA TEBE",JOptionPane.ERROR_MESSAGE);

                System.exit(0);
                 }
//izlaz
            case 'x':
                 {
                    System.out.println("\n\n  Nadam se da ste pogodili na listicu :)\n");
                    System.out.println("\n  Bye Bye ...\n\n");
                    System.out.println("\n  Vidimo se ...\n");
                    System.out.println("\n  Ariverderci ...\n");
                    System.out.println("\n  Aufiderzen ...\n");
                    System.exit(izbor);
                 }
            default:
                 {
                    System.out.print("Unijeli ste pogrešan izbor, pokušajte ponovo.  \n");

                                        String poruka = "UNESI BROJ 1 ILI 2 ILI 3!!!!";
                JOptionPane.showMessageDialog(new JFrame(), poruka, "PORUKA ZA TEBE",JOptionPane.ERROR_MESSAGE);
                                        break;
                 }
             }
        }while(izbor != 'x');
    }
}

/*
 * Ovo je NoviRezultat.java
 * 
 */

package rezultati;


import java.io.*;
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author Meho
 */
public class NoviRezultat {

    public boolean ProvjeraDaLiElementPostoji(String file, String element)
    {
        boolean element_postoji = false;

        FileInputStream fin;
        DataInputStream in;
                BufferedReader br;

        String postojeci_element;

        try
        {
        fin = new FileInputStream(file);
        in = new DataInputStream(fin);
                br = new BufferedReader(new InputStreamReader(in));

// citaj fajl liniju po liniju
        while ((postojeci_element = br.readLine()) != null)
        {
// Ako se element pronaÄ‘e postavi varijablu na true...
            if(postojeci_element.equals(element))
                element_postoji = true;
        }
        in.close();
        }
//Ako se desi greška pri Ã„Ťitanju fajla...
        catch (IOException e)
        {
            System.err.println("Greška pri Ã„Ťitanju fajla: " + file);
            System.exit(-1);
        }
//ako je element pronaÄ‘en vrati true, inaÄŤe vrati false...
        return element_postoji;
    }

        public static void UnosNovogRezultata()
    {
        Scanner scanner = new Scanner(System.in);

        System.out.println("\nUnesite naziv tima1:");
        String tim1 = scanner.nextLine();
        System.out.println("\nUnesite naziv tima2:");
        String tim2 = scanner.nextLine();
        System.out.println("Unesite broj golova tim1:");
        String g1 = scanner.nextLine();
        System.out.println("Unesite broj golova tim2:");
        String g2 = scanner.nextLine();

        //provjera da li timovi vec postoje...
        //ako postoje samo promijeniti liniju i dodati bodove...
        boolean artikal_postoji = false;
                {
// potrebno je sting pretvoriti u integer radi > i < koje ne radi u stringu :))))
                    int r1 = Integer.parseInt(g1);
                    int r2 = Integer.parseInt(g2);
                    if(r1<r2)
                    {
                        r1=0;
                        r2=3;
                    }
                    else
                    {
                        if(r1>r2)
                        {
                            r1=3;
                            r2=0;
                        }
                        else
                        {
                            r1=1;
                            r2=1;
                        }
                    }


// vrati u string...
                String bod1 ;
                String bod2 ;
                bod1=Float.toString(r1);
                bod2=Float.toString(r2);
        try
        {
            FileReader fr = new FileReader("Tabela.txt");
                        BufferedReader br = new BufferedReader(fr);

    final String NEW_LINE = System.getProperty("line.separator");
        StringBuffer sb = new StringBuffer();
            String line;

            Float novi_bodovi;
                    Float stari_bodovi;
                    Float BodPrije;
                    Float BodPoslije;

                        // Ã„Ťitaj fajl liniju po liniju...
            while ((line = br.readLine()) != null)
            {
                // Ako se tim pronaÄ‘e samo povecaj broj bodova...
                if(line.contains(tim1 + " Bodova: "))
                {
                    stari_bodovi = Float.valueOf(line.replace("Tim: " + tim1 + " Bodova: ", ""));
                    novi_bodovi = stari_bodovi + Float.valueOf(bod1);
                    sb.append("Tim: " + tim1 + " Bodova: " + Float.toString(novi_bodovi));
            sb.append(NEW_LINE);
                                }
                        else if (line.contains(tim2 + " Bodova: "))
                        {
                                      BodPrije = Float.valueOf(line.replace("Tim: " + tim2 + " Bodova: ", ""));
                    BodPoslije = BodPrije + Float.valueOf(bod2);
                    sb.append("Tim: " + tim2 + " Bodova: " + Float.toString(BodPoslije));
            sb.append(NEW_LINE);

            artikal_postoji = true;
                }
                else

                {
                    sb.append(line);
                    sb.append(NEW_LINE);
                }
                        }
            //ako nakon sto je procitan cijeli fajl nije pronadjen tim, radi se o novom timu (imaće dupli unos tima)...
            //upisi novu liniju u buffer i kasnije u fajl...

            if(artikal_postoji == false)
            {
//                sb.append("Tim: " + tim1 + " Bodova: " + bod1);
//                sb.append(NEW_LINE);

                                String poruka = "\nJedan od timova ne postoji:\n   Prvo provjerite jeste li ispravno unijeli naziv tima.\n\nUkoliko je u pitanju novi tim:\n   Unesite tim koji nedostaje upotrebom opcije 1 !!!!\n ";
                                JOptionPane.showMessageDialog(new JFrame(), poruka, "PORUKA ZA TEBE",JOptionPane.ERROR_MESSAGE);
                                return;
                                
//                sb.append("Tim: " + tim2 + " Bodova: " + bod2);
//                sb.append(NEW_LINE);

            }

            fr.close();

            // Upiši buffer nazad u fajl...
    PrintWriter pw= new PrintWriter(new FileWriter("Tabela.txt"));
        pw.print(sb.toString());
        pw.close();
        }

// Izuzetci
                catch (FileNotFoundException ex) // ako fajl ne postoji...
        {
    ex.printStackTrace();
        }
    catch (IOException ex) //ako je došlo do greške prilikom upisa u fajl...
        {
    ex.printStackTrace();
        }
        System.out.println("Utakmica: " + tim1.trim() +":"+ tim2.trim()+ ", je uspješno aĹľurirana.\n");
                String poruka = "Novi rezultat je azuriran !!!!";
                JOptionPane.showMessageDialog(new JFrame(), poruka, "Poruka za tebe", JOptionPane.INFORMATION_MESSAGE);

        }
        }


}

/*
 * Poredak.java
 * Nebih ga rijesio da nije bilo Hristov-a i ovaj put mu se zahvaljujem na pomoci.
 */

package rezultati;

import java.io.*;
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


/**
 *
 * @author Meho
 */

public class Poredak {

        public static void Tabela() throws Exception {

        File file = new File("Tabela.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
        ArrayList<String> lines = new ArrayList<String>(10);

        String line;
        while((line = reader.readLine()) != null) {
           lines.add(line);
        }

        String[] sorted = lines.toArray(new String[lines.size()]);
        sortRawTeamData(sorted, false);
        System.out.println("\n\n*********TABELA TIMOVA**********");
        for(int i = 0; i < sorted.length; i++) {
           System.out.println("* "+sorted[i]+"   *");
        System.out.println("*********************************");
           Thread.sleep (1000); //pravi pauze izmedju ispisa linija od 1000 ms
        }
        {
            String poruka = "\nBodovna tabela je ispisana na konzoli!!!!\n";
            JOptionPane.showMessageDialog(new JFrame(), poruka, "Poruka za tebe", JOptionPane.INFORMATION_MESSAGE);
            return;
        }
   }

   private static void sortRawTeamData(String[] strings, final boolean ascending) {
        Arrays.sort(strings, new Comparator<String>() {
         public int compare(String line1, String line2) {
            String seg1 = line1.substring(line1.lastIndexOf(':') + 1).trim();
            String seg2 = line2.substring(line2.lastIndexOf(':') + 1).trim();
            double p1 = Double.parseDouble(seg1);
            double p2 = Double.parseDouble(seg2);
            return (int)((p1 - p2) * (ascending? 1:-1));
         }
        });
   }
}

/*
 * Ovo je Unos.java
 * 
 */

package rezultati;
import java.io.*;
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Unos {

public boolean ProvjeraDaLiElementPostoji(String file, String element)
    {
        boolean element_postoji = false;

        FileInputStream fin;
        DataInputStream in;
                BufferedReader br;

        String postojeci_element;

        try
        {
        fin = new FileInputStream(file);
        in = new DataInputStream(fin);
                br = new BufferedReader(new InputStreamReader(in));

// citaj fajl liniju po liniju
        while ((postojeci_element = br.readLine()) != null)
        {
// Ako se element pronaÄ‘e postavi varijablu na true...
            if(postojeci_element.equals(element))
                element_postoji = true;
        }
        in.close();
        }
//Ako se desi greška pri Ã„Ťitanju fajla...
        catch (IOException e)
        {
            System.err.println("Greška pri Ã„Ťitanju fajla: " + file);
            System.exit(-1);
        }
//ako je element pronaÄ‘en vrati true, inaÄŤe vrati false...
        return element_postoji;
    }




    public static void UnosNovogTima()
    {
        Scanner scanner = new Scanner(System.in);

        System.out.println("\nUnesite naziv Tima:");
        String naziv_tima = scanner.nextLine();
        System.out.println("Unesite pocetni broj bodova:"); // podrazumjevano je 0
        String broj_bodova = scanner.nextLine();

        //provjera da li tim već postoji...
        //ako postoji samo promijeni liniju i dodaj nove bodove..
        boolean artikal_postoji = false;

        try
        {
            FileReader fr = new FileReader("Tabela.txt");
        BufferedReader br = new BufferedReader(fr);

    final String NEW_LINE = System.getProperty("line.separator");
        StringBuffer sb = new StringBuffer();
            String line;

            Float nova_kolicina;
                    Float stara_kolicina;

                    // Ã„Ťitaj fajl liniju po liniju...
            while ((line = br.readLine()) != null)
            {
                // Ako pronaÄ‘e tim samo povećaj bodove...
                if(line.contains(naziv_tima + " Bodova: "))
                {
                    stara_kolicina = Float.valueOf(line.replace("Tim: " + naziv_tima + " Bodova: ", ""));
                    nova_kolicina = stara_kolicina + Float.valueOf(broj_bodova);
                    sb.append("Tim: " + naziv_tima + " Bodova: " + Float.toString(nova_kolicina));
            sb.append(NEW_LINE);

            artikal_postoji = true;
                }
                else
                {
                    sb.append(line);
                    sb.append(NEW_LINE);
                }
            }
            //nakon sto je procitan cijeli fajl i nije pronadjen tim, radi se o novom timu...
            //upisi novu liniju u buffer a kasnije u fajl Tabela.txt...
            if(artikal_postoji == false)
            {
                sb.append("Tim: " + naziv_tima + " Bodova: " + broj_bodova);
                sb.append(NEW_LINE);
            }

            fr.close();

            //Upisi sadrzaj buffera nazad u Tabela.txt...
    PrintWriter pw= new PrintWriter(new FileWriter("Tabela.txt"));
        pw.print(sb.toString());
        pw.close();
        }
        catch (FileNotFoundException ex) // ako fajl ne postoji...
        {
    ex.printStackTrace();
        }
    catch (IOException ex) //ako je došlo do greške prilikom upisa u fajl...
        {
    ex.printStackTrace();
        }
        System.out.println("Tim: " + naziv_tima.trim() + " i poÄŤetni bodovi, su uspješno unešeni.\n");
                String poruka = "\nNovi unos:\n"+"  Tim " + naziv_tima.trim()+" i početni bodovi su uspjeÅ¡no uneÅ¡eni.\n\nMožete nastaviti sa unosom novih timova:\n   Upotrebom opcije 1 !!!!\n ";
                JOptionPane.showMessageDialog(new JFrame(), poruka, "PORUKA ZA TEBE",JOptionPane.INFORMATION_MESSAGE);
    }
}


Slijedeci zadatak tj drugi kolokvij je da se ovo implementira kao JavaScript...
 
Odgovor na temu

IgorMedo
Igor Madjeric
Doboj

Član broj: 101335
Poruke: 30
62.153.240.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak15.04.2010. u 12:25 - pre 140 meseci
"cinimise da nema sortiranja tabele prilikom ispisa na ekran ili se varam?"

Ukoliko koristis TreeSet kao implementaciju set nema potrebe da sortiras set, on je vec sortiran prirodnim redoslijedom u slucaju omatackih klasa, a u slucaju kada kreiras svoju klas koju zelis da koristis u TreeSetu potrebno je da obezbjedis mehanizam za poredjenje dva objekta u ovom slucaju ja sam implementirao Comparable interfejs. Naravno ovakvo rjesenje sa koristenje TreeSet-a nije bas preporucljivo kada imas puno operacija sa radmo na setu, ali u tvom slucaj to ne igra ulogu.

Pozdrav
 
Odgovor na temu

mehom
student

Član broj: 254128
Poruke: 9
89.146.178.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak15.04.2010. u 14:26 - pre 140 meseci
Hvala na odgovoru, valjda ce neko imati koristi od ovog koda koji smo ostavili. Meni se sad valja boriti sa drugim zadatkom, sve ovo u JavaScript :).

pozzz
 
Odgovor na temu

Huemaj

Član broj: 115981
Poruke: 25
*.public.t-mobile.at.



+5 Profil

icon Re: Java i fudbal ubi me ovaj zadatak17.04.2010. u 19:25 - pre 140 meseci
Code:
/*
 * Nebih ga rijesio da nije bilo Hristov-a i ovaj put mu se zahvaljujem na pomoci.
 */


Bravo mehom, jako lijep gest od tebe.
 
Odgovor na temu

mehom
student

Član broj: 254128
Poruke: 9
89.146.169.*



Profil

icon Re: Java i fudbal ubi me ovaj zadatak29.04.2010. u 07:51 - pre 139 meseci
Ako ti ljudi pomognu najmanje sto mozes uciniti je da im se zahvalis.

Pozdrav svima.
 
Odgovor na temu

NeoDesign
Vladimir Ćetković
Software developer
Beograd

Član broj: 16257
Poruke: 138
*.dynamic.sbb.rs.

ICQ: 23348136
Sajt: www.codesessions.com


+2 Profil

icon Re: Java i fudbal ubi me ovaj zadatak29.04.2010. u 23:12 - pre 139 meseci
Citat:
Pozdrav Igore,
hvala ti na vremenu koje si odvojio da mi pomognes. Zadatak sam vec rijesio, ne bas kako si ti predlozio ali radi :).


Ovo je po mom misljenju ubedljivo najopasnija izjava nekog ko se bavi programiranjem (ili planira da se bavi u tvoj slucaju). Koliko sam kose iscupao gledajuci spaghetti code nekog kolege ciji je program takodje 'radio'. Jedna od najpametnijih citata koje sam cuo za programiranje je (parafraziram): "Nije poenta pisati kod koji racunar razume, nego koji covek razume". Kod koji radi 100% tacno ali je komplikovan za doradu/odrzavanje jednostavno nije dovoljno dobar.

Igoru svaka cast, stvarno si se potrudio, i jasno pokazao zasto je OO bolje od proceduralnog u ovom konkretnom slucaj.
Arthur C. Clarke - "Any sufficiently advanced technology is indistinguishable from magic."
 
Odgovor na temu

[es] :: Java :: Java i fudbal ubi me ovaj zadatak

[ Pregleda: 3542 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.