semestralka z programovania v jave - CVUT

Programovacie jazyky, rady, poradňa...
azicko
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 mar 2010, 19:44

semestralka z programovania v jave - CVUT

Príspevok od používateľa azicko »

uloha : vytvorit jednoduchu databazu s nacitanim do suboru, vypis suboru, hladanie

mam zatim toto a hladanie si neviem vobec poradit ..niekto help pls ?

(pomaham s tym spoluziakovy, zatim sme vymysleli toto, musim mu to niako vyriesit ..on mi pomaha s matikou :) )

Kód: Vybrať všetko

package semestralka;

import java.util.Scanner;
import java.io.*;

/**
 *
 * @author Petr Beneš
 */
public class Main {

    static void vypis(String s) {
        System.out.println(s);
    }

    static int nacitej() {
        int a;
        Scanner klv = new Scanner(System.in);
        a = klv.nextInt();
        return (a);
    }

    static void zapis_do_souboru(String[] pole) {


        try {
            int i,j,medzera;
            PrintWriter vystup = new PrintWriter(new FileOutputStream("evidence.txt", true));

            vystup.println("");
            for (i = 0; i < pole.length; i++) {
                medzera = 11 - pole[i].length();
                vystup.print(pole[i]);
                for(j=1;j<=medzera;j++){
                    vystup.print(" ");
                }

            }
            vystup.close();

        } catch (IOException ex) {
            System.err.println("Chyba pri zapisu do souboru.");
        }
    }


    static void vypis_zo_suboru() {
        String radek;
        try {
            BufferedReader vstup = new BufferedReader(new FileReader("evidence.txt"));
            System.out.println("Meno   Typ   Znacka   Spotreba   Objem   Cena");
            while ((radek = vstup.readLine()) != null) {

                System.out.println(radek);

            }
            vstup.close();

        } catch (IOException v) {
            System.out.println(v);

        }

        System.out.println();

    }
    
  
    public static String[] pole = new String[6];

    public static void main(String[] args) {

        boolean opakovani = true;
        int a;
        vypis("...:Vítejte v databázi o autech:...");
        System.out.print("\n");
        do {
            vypis("Vyber co chce udělat");
            vypis("1. Zadaní informací do databáze");
            vypis("2. Uložit do souboru");
            vypis("3. Vypiš ze souboru");
            vypis("4. Hledat");
            vypis("5. Konec programu");

            a = nacitej();
            vypis("--------------------------------------");

            switch (a) {
                case 1: {
                    boolean opakovani2 = true;
                    int b;
                    do {
                        vypis("Zadaní informací do databáze");
                        vypis("1. Zadej majitele: ");
                        vypis("2. Zadej typ (např. sedan): ");
                        vypis("3. Zadej značku: ");
                        vypis("4. Zadej spotřebu: ");
                        vypis("5. Zadej objem motoru: ");
                        vypis("6. Zadej cenu: ");
                        vypis("7. Zpět do menu");

                        b = nacitej();
                        vypis("--------------------------------------");

                        switch (b) {
                            case 1: {
                                Scanner klv = new Scanner(System.in);
                                pole[0] = klv.next();
                            }
                            break;

                            case 2: {
                                Scanner klv = new Scanner(System.in);
                                pole[1] = klv.next();
                            }
                            break;

                            case 3: {
                                Scanner klv = new Scanner(System.in);
                                pole[2] = klv.next();
                            }
                            break;

                            case 4: {
                                Scanner klv = new Scanner(System.in);
                                pole[3] = klv.next();
                            }
                            break;

                            case 5: {
                                Scanner klv = new Scanner(System.in);
                                pole[4] = klv.next();
                            }
                            break;

                            case 6: {
                                Scanner klv = new Scanner(System.in);
                                pole[5] = klv.next();
                            }
                            break;

                            case 7: {
                                opakovani2 = false;
                                break;
                            }
                        }
                    } while (opakovani2);

                }
                break;

                case 2: {
                    zapis_do_souboru(pole);
                }
                break;

                case 3: {vypis_zo_suboru();
                }
                break;

                case 4: {
                    boolean opakovani3 = true;
                    int c;
                    do {
                        vypis("Hledat ");
                        vypis("1. Podle značky: ");
                        vypis("2. Podle ceny: ");
                        vypis("3. Podle typu: ");
                        vypis("4. Zpět do menu");

                        c = nacitej();
                        vypis("--------------------------------------");

                        switch (c) {
                            case 1: {
                                hledat_znacka();
                            }
                            break;

                            case 2: {
                                hledat_cena();
                            }
                            break;

                            case 3: {
                                hledat_typ();
                            }
                            break;

                            case 4: {
                                opakovani3 = false;
                                break;
                            }
                        }
                    } while (opakovani3);
                }
                break;

                case 5: {
                    opakovani = false;
                    break;
                }

                case 6: {String text;
                        System.out.println("zadaj text");
                        Scanner klv = new Scanner(System.in);
                        text = klv.next();
                        hladanie(text);
                        break;
                }
            }
        } while (opakovani);
    }
}
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa javatar »

1. kod si strc do code
2. co vam na tom nejde?
azicko
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 mar 2010, 19:44

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa azicko »

ide nam vsetko ...ale ako som povedal ...neviem ako spravit metodu na vyhladavanie ..povedzme chcem v subore vyhladat MICHAL ..a vypisat jeho auto cenu ..atd ..vsetko zo suboru ...
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa javatar »

no hned je ten kod prehladnejsi

staci ked si kazdy riadok predtym nez ho vypises tak skontrolujes ci obsahuje slovo ktore hladas metodu ti z hlavy nepoviem, myslim ze to bolo nieco ak najde -> vrati poziciu prveho znaku slova, ak nie -> vrati -1

idem otvorit netbeansy a hned ti to ceknem,....

// je to metoda indexOf(String);
azicko
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 mar 2010, 19:44

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa azicko »

dakujem ti, ale ja chcem vypisat cely riadok ..a nie len prvy znak toho hladaneho slova ..a ked sa tam objavuju napr 3 michalovia ..chcem vypisat udaje o vsetkych troch ..akosi neviem ako to pouzit ..nemohol by si mi trochu viacej pomoct :( ?

fakt nam moc stringy nejdu ..teda aspon ja si to neviem moc prestavit ..
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa javatar »

no vsak tak ti to radim - tento kod je len jednoduchou upravou metody vypis zo suboru

Kód: Vybrať všetko

while ((radek = vstup.readLine()) != null) {

              if(radek.indexOf("MICHAL")>-1)
                    System.out.println(radek);

            }
metoda indexOf ti vrati poziciu prveho znaku slova ak sa tam nachadza a -1 ak sa tam nenachadza (co som pisal uz vyssie) ale ziadnym sposobom string neupravuje - ja sa len pri tom riadku pozriem ci ma to slovo poziciu vacsiu ako -1 => cize ci sa tam nachadza
lamacke riesenie ale tu staci, nic jednoduchsie mi nenapadlo
chapeme sa?

//a pozor - je to case sensitive
azicko
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 mar 2010, 19:44

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa azicko »

jj jasne ..uz chapem ...velmi pekne ti dakujem ..ak nezabudnem ..dam vediet ako mu semestralka dopadla ...a pridam vysledny zdrojak :) ...mozno sem upnem aj moju ..ja mam praca s maticami ...
nahodou by si mi nevedel poradit aj v tom..? mam spravene sucin sucet determinant hodnost nasobenie koeficientom ....ale trapim sa s inverznou maticou ..vies mi pomoct aj v tom ? ...zatim mi funguje toto

Kód: Vybrať všetko

static double[][] inverzia(double[][] mat){

         int i,j,k,x;
         double[][] pomocna = new double[mat.length][2*mat[0].length];
         double[][] jednotkova = new double[mat.length][mat[0].length];



         for (i=0;i<mat.length;i++){                //vytvori jednotkovu maticu

             for (j=0;j<mat[0].length;j++){

                 if (i==j) jednotkova[i][j] = 1;
                 else jednotkova[i][j]= 0;
             }
         }
         for (i=0;i<mat.length;i++){              //vsunie do pomocnej matice, maticu
             for (j=0;j<mat[0].length;j++){       //ktoru invertujeme a jednotk. maticu
                pomocna[i][j] = mat[i][j];
                pomocna[i][j+(mat.length/2)+2] = jednotkova[i][j];
             }

         }
metoda zatial neni ukoncena takze tam chyba return ..potrebujem nalavo upravit maticu na jednotkovu a napravo mi vznikne inverzna ktoru potom cyklom nacitam do niakej matice ktoru vratim ako return ..ibaze nevim ako to upravit ...

avsak neviem sa pohnut dalej ..skusal som us moc veci ..ale vzdy sa mi to bud zacykli alebo to hadze chyby ... dakujem
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa mirak2 »

existuje boolean metoda contains na stringu...myslim ze logickejsie ako indexof...to je ako skrabat sa pravou rukou za lavym uchom
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa c-ice »

mirak2 napísal:existuje boolean metoda contains na stringu...myslim ze logickejsie ako indexof...to je ako skrabat sa pravou rukou za lavym uchom
on nepotrebuje povedat ci existuje alebo neexistuje on to potrebuje vypisat ak existuje a všetky najdene :)
zaujmavejšie by bolo možno mat regular expresion dynamicky vyskladanu (ze sa doplni meno) a vypluje ti to napr. všetky riadky pre ktore vyhovuje regExp (nie cislo riadku ale riadok alebo aky format to bude mat osetri regexpom)
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa mirak2 »

ja som predpokladal ze z toho suboru to chce niekam nacitat a v nom to vyhladat...potom by stacilo prejst tou strukturou a ak to contains tak to vypisat...roger?
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa c-ice »

that ... ale tiez som myslel ze to mysliš ako optimalizaciu len ma napadlo ako najlahšie implementovat contains proste pouzijem v tom indexOf a ak vrati nejaku poziciu vratim true inak false a naco tu metodu budem volat 2 krat ?
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa javatar »

mirak2 napísal:existuje boolean metoda contains na stringu...myslim ze logickejsie ako indexof...to je ako skrabat sa pravou rukou za lavym uchom
no to je pekne :) contains by bolo jednoduchsie ale tak v zasade je to jedno (vobec to nie je o nic zlozitejsie)

//autoeditácia príspevku (07 Dec 2010, 9:07)
teraz som si cekol ako vyzera metoda contains v triede String a co nevidim :D

Kód: Vybrať všetko

public boolean contains(CharSequence s) {
        return indexOf(s.toString()) > -1;
    }
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa mirak2 »

presne preto som to spomenul...zbytocne kodit nieco, co mas k dispozicii v knizniciach ;)

dobre, tak konecne som sa vlastne pozrel co za kod tam mas:
- metodu vypis ti netreba, na to je sysout
- v metode vypisZoSuboru (je nepisana konvencia pisat metody takto, teda bez podciarovnikov, to len cisto mimochodom) vo while mas podmienku, tak ta sa da elegantne skratit na radek.isNextLine(), robi to to iste co tvoje a nasledne vo vnutri while si daj to precitanie a priradenie riadku a pracuj s nim (vypis, pripadne to nacitanie do struktury...)

fakt toto treba urobit poriadne do tried, lebo vsetky metody static, fujtajbl
urob si triedu Auto a v nej instancne premenne meno, typ, znacka (tieto ako String), spotreba, objem, cena (tieto ako cisla, teda napr. double), daj si vygenerovat konstruktor (eclipse aj netbeans to maju), mozno aj gettery a settery sa zidu (aj tie sa daju vygenerovat programom), urob si prekrytu metodu toString aby si vedel vypisat auto do suboru (toto bude ako sa ma vypisat ked mas nejake auto - treba miskova skodovka za 10eur s takou a takou spotrebou atd, aby sa to vedelo vypisat)...v tej tvojej triede kde mas main metodu si urob tiez konstruktor, moze byt aj prazdny aby si nemusel mat static metody, to ti este vysvetlim ako to ma vyzerat...urobis si instancnu premennu ArrayList<Auto> zoznamAut a v nacitani zo suboru nacitas vsetko do tohto zoznamu, k tomu sa este dostanem...
nenechaj sa odradit a odporucam to prekopat, lebo ten projekt kamaratovi obiju o hlavu, u nas na UPJS na skuske kvoli takymto veciam (staticke metody) vyhadzovali...je totiz jedna vec ze to funguje a druha vec ze tomu nerozumies...lebo toto hovori ze nerozumies...
keby nieco pis na icq
azicko
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 mar 2010, 19:44

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa azicko »

ja viem ze to je neprehladne a neefektivne naprogramovane ..ale my sme sa ucili len static metody ..ani objekty ani nic sme sa zatim neucili ..je to predmet programovanie v prvom semestri ..moc ludi programuje v jave v tomto predmete po prvy krat...nemozu predsa ocakavat od nas taketo veci :)
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa mirak2 »

aj u nas sme sa srali prvy semester s kresliacou korytnackou, nikto nevedel programovat a na skuske pytali arraylisty a nestaticke metody...to je univerzita bejby
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa javatar »

kde vlastne chodis do skoly?
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa mirak2 »

upjs kosice...na skuske sme museli rozumne zvolit triedy, kto to nemal, tak aj keby mu to nahodou fungovalo tak nemal narok na lepsiu znamku ako Fx
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa javatar »

tak ja som sa ucil javu az ked som mal OOP zvladnute... tak to bolo asi lepsie :D
ropman
Medium Professional
Medium Professional
Príspevky: 1250
Registrovaný: 12 apr 2010, 21:07

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa ropman »

tak oni sa asi neucia objektove programovanie ale klasicke proceduralne. len nechapem preco sa ucia programovat proceduralne v objektovom jazyku.
azicko
Amateur
Amateur
Príspevky: 13
Registrovaný: 15 mar 2010, 19:44

Re: semestralka z programovania v jave - CVUT

Príspevok od používateľa azicko »

objektove programovanie sa budeme ucit poslednu prednasku a posledne cviko ..preto nevyzaduju objekty v praci semestralnej ... studujem na CVUT ..naviac som FEL a nie FIT ..preto to beru len ako zaklad ..viacmenej ...ale mna to strasne bavi ..a chcel by som sa naucit aj objekty ..len sa mi to zda kusok tazke a na nete som to dako nepochopil ..snazil som sa najst javu od herouta na webe v pdfku ale nenasiel som, dokonca dole na chodbe v skole ho dneska predavali akurat som pri sebe nemal peniaze .. :(
Napísať odpoveď