Anonymní profil marek – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil marek – Programujte.comAnonymní profil marek – Programujte.com

 

Příspěvky odeslané z IP adresy 158.193.83.–

marek
Java › ukladanie do súboru + dedeni…
21. 4. 2013   #175308

skúsim to, ale ešte tam čosi prerobím. ale dosť si mi s tým pomohol. díky moc! :)

marek
Java › ukladanie do súboru + dedeni…
18. 4. 2013   #175191

Dobrý deň

Chcem spraviť program, ktorý bude obsahovať ArrayList, ktorý naplním dielami, a obsah tohto ArrayListu zapísať do súboru. Chcem tiež, aby bolo možné po spustení programu načítať údaje zo súboru.

Mám abstraktnú triedu Dielo, od ktorej je zdedených niekoľko tried.

Potom mám hlavnú triedu Kniznica s metódou main.

Ďalej mám triedu UlozenieDoArrayListu, v ktorej mám ArrayList typu Dielo, a do neho si ukladám inštancie jednotlivých diel - kniha, časopis atď. Toto sa deje už v konštruktore.

Mám tiež triedu Generator, ktorá má metódy na generovanie mien, názvov a obsahov kníh (a ďalších diel).

Problém je so zapisovaním a načítavaním zo súboru. Keď spustím hlavnú metódu v tr. Kniznica, a pozriem sa do súboru subor.txt, je tam vygenerovaný nejaký slovný reťazec a jeden zo žánrov, napr. slovo HOROR (žánre sú uložené v Enume, ale to nie je také podstatné).

Chcem to spraviť tak, aby mi obsah ArrayListu zapísalo do súboru, a potom, aby bolo možné ArrayList opäť naplniť položkami v súbore. A chcem aby mi do toho súboru generovalo toho toľko, koľko je uvedené v konštruktore triedy UlozenieDoArrayListu (je tam na to príkaz while).

PS - chyby sa pravdepodobne nachádzajú v metódach na zapisovanie a načítavanie.

Obrovská vďaka všetkým!

Zdrojáky:

Dielo

public abstract class Dielo {
    
    private String nazov;
    private Enum zaner;
    private String jazyk;
    private Date datumVydania;
    private String vydavatelstvo;
    private String popis;
        
    public abstract Object getObsah();
    public void Zapis(DataOutputStream os) throws IOException{
        os.writeUTF(nazov);
        os.writeUTF(zaner.toString());
        os.writeUTF(jazyk);
        os.writeUTF(datumVydania.toString());
        os.writeUTF(vydavatelstvo);
        os.writeUTF(popis);
    }
    
    public void Nacitaj(DataInputStream is) throws IOException{//public DataInputStream
        String s = is.readUTF();
    }
    
    
    public final String dajVseobecnyPopis(){
        return popis;
    }
    
    public String getNazov(){
        return nazov;
    }
    public Enum getZaner(){
        return zaner;
    }
    public String getJazyk(){
        return jazyk;
    }
    public Date getDatum(){
        return datumVydania;
    }
    public String getVydavatelstvo(){
        return vydavatelstvo;
    }
    
    public void setNazov(String n){
        nazov = n;
    }
    public void setZaner(Enum z){
        zaner = z;
    }
    public void setJazyk(String j){
        jazyk=j;
    }
    public void setDatum(Date d){
        datumVydania = d;
    }
    public void setVydavatelstvo(String v){
        vydavatelstvo = v;
    }

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

UlozenieDoArrayListu

public class UlozenieDoArrayListu implements Serializable{
        public Random rn = new Random();
        public ArrayList<Dielo>list;
        
        public UlozenieDoArrayListu(){
            this.list = new ArrayList<Dielo>();
            Generator g = new Generator();
            int i = 0;
            while(i<10){
            String st = g.generujSlovo(8);
            String nazov = st.substring(0,1).toUpperCase()+st.substring(1);
            String autor = g.generujMenoPriezvisko();
            String obsah = g.generujVetu();
            String ed = g.generujSlovo(10);
            String vyd = ed.substring(0,1).toUpperCase()+ed.substring(1);
            AudioVideo av = new AudioVideo();//inst triedy AudioVideo
            av.setNazov(nazov);
            av.setDatum(new Date());
            av.setVydavatelstvo(vyd);
            av.setZaner(Zaner.HOROR);
            Kniha kn = new Kniha();//inst triedy Kniha
            kn.setJazyk("tibetsky");
            kn.setAutor(autor);
            kn.setObsah(obsah);
            kn.setZaner(Zaner.SCIFI);
            kn.setISBN(st.toUpperCase());
            Publikacia pb = new Publikacia();//ins triedy Publikacia
            pb.setNazov(nazov);
            pb.setObsah(obsah);
            pb.setVydavatelstvo(st);
            pb.setDatum(new Date());
            Casopis cas = new Casopis();//inst triedy Casopis        
            cas.setJazyk("tibetan");
            cas.setNazov(st);
            cas.setObsah(st);
            cas.setVydavatelstvo(vyd);        
            list.add(av);//audiovideo
            list.add(kn);//kniha
            list.add(pb);//publikacia
            list.add(cas);//casopis
            i++;
          }
      }       

Hlavná trieda

public class Kniznica implements Serializable {

    public static void main(String[] args) {

        UlozenieDoArrayListu uk = new UlozenieDoArrayListu();
        
        DataOutputStream dos = null;
        try {
            dos = new DataOutputStream(new FileOutputStream("subor.txt"));
            for (Dielo dielo : uk.list) {
                dielo.Zapis(dos);
                
            }
        } catch (Exception ex) {
            System.out.println("" + ex.getMessage());
        }finally{
            try{
            if(dos!=null)
                dos.close();
            }catch(Exception ex){
                System.out.println(""+ex.getMessage());
            }
        }
}

Pridávam ešte pár tried jednotlivých diel

AudioVideo

public class AudioVideo extends Dielo implements Serializable{
    
    private String obsah;
    
    public void setObsah(String o){
        obsah = o;
    }

    @Override
    public String getObsah() {
        return obsah;
    }

    @Override
        public void Zapis(DataOutputStream s) throws IOException{
        super.Zapis(s);
        s.writeUTF(obsah);
    }


    @Override
        public void Nacitaj(DataInputStream is) throws IOException {
        super.Nacitaj(is);
    }
}

Casopis

public class Casopis extends Dielo implements Serializable{
    
    private String obsah;
    
    public String getObsah(){
        return obsah;
    }
    public void setObsah(String o){
        obsah = o;
    }
    public String toString(){
        return super.toString() + " " + obsah;
    }

    @Override
    public void Zapis(DataOutputStream s) throws IOException{
        super.Zapis(s);
        s.writeUTF(obsah);
    }
        
}
marek
Java › generátor slov
7. 4. 2013   #174605

zdravím

chcem vytvoriť generátor slov, ktorý bude generovať slová s rovnakým počtom samohlások a spoluhlások. zatiaľ mám toto

public class GeneratorMien {
        public char[]samohlasky = new char[]{'a','á','e','é','i','í','o','ó','u','ú','y','ý'};
        public char[]spoluhlasky = new char[]{'b','c','d','f','g','h','j','k','l','m','n','p','r','s','t','v','z'};
        public Random samo;
        public Random spolu;
        public Random word;
        public String slovo;
        
    public GeneratorMien(){
        Random samo = new Random();
        Random spolu = new Random();
        Random word = new Random();
        }
    public char generujSamohlasku(){
        int index = samohlasky.length;
        char samohlaska = samohlasky[samo.nextInt(index)];
        return samohlaska;
    }
    public char generujSpoluhlasku(){
        int index2 = spoluhlasky.length;
        char spoluhlaska = spoluhlasky[spolu.nextInt(index2)];
        return spoluhlaska;
        }
    public String generujSlovo(int pocetZnakov){
            for(int i=0;i<pocetZnakov;i++){
                char spoluhlaska = spoluhlasky[spolu.nextInt(i)];
                String pomocna1 = Character.toString(spoluhlaska);
                slovo +=pomocna1;
                char samohlaska = samohlasky[samo.nextInt(i)];
                String pomocna2 = Character.toString(samohlaska);
                slovo+=pomocna2;
            }
            return slovo;
        }

keď to spustím tak mi vypíše výnimku java.lang.NullPointerException. vie ma niekto poopraviť?

díky moc!

marek
Java › Začátečník
12. 3. 2013   #172633

#1 Empty
takto by to mohlo byť...

import java.util.Scanner;

public class Polomer { 
 public static void main(String[]args){
     double r;                             
     Scanner sc = new Scanner(System.in);
     System.out.println("Zadej polomer koule");
// Zde bych potřeboval poradit jak je třeba v céčku scanf("%daný datový typ",&r)
    r = sc.nextDouble();
    double V = (4.00/3.00)*Math.PI*Math.pow(r,3); 
    double S = (4.00*Math.PI)*Math.pow(r,2); 
    System.out.println("Objem = "+V);
    System.out.println("Povrch = "+S);  
}
     }

chýbal ti tam skener na načítavanie hodnôt + mal si tam pow(r,3) namiesto Math.pow(r,3)

marek
Java › Metóda na overenie príkazu…
12. 3. 2013   #172631

dobrý deň

robím na programe ktorý má podstatne viac tried, ale neviem si dať rady už iba na tomto mieste. takže, mám triedu Enum ktorá vyzerá takto:

import java.util.*;
public enum ZoznamPrikazov{
             
    CHOD ("chod", new SpustacChod()),
    POMOC ("pomoc", new SpustacPomoc()),
    KONIEC ("koniec", new SpustacKoniec()),
    UKAZ ("ukaz", new SpustacUkaz());
    
    private String nazov;
    private ISpustac vykon;
    private final EnumMap<ZozanmPrikazov, IVykonavac> Vykonavace;
    //konstruktor
    ZoznamPrikazov(String nazov, ISpustac vykon){
        this.nazov = nazov;
        this.vykon = vykon;
    }
     
    public String getNazov(){
        return this.nazov;
    }
     
    public ISpustac getVykonavac(){
        return this.vykon;
    }
    
    public boolean jePrikaz(String nazov){
        return nazov.containsKey(nazov);
    }
}

a mám interface ISpustac

public interface ISpustac
{
   boolean vykonaj(Hrac paHrac, String paParam);
}

v takejto verzií mi hlási chybu "cannot find symbol - method containsKey(java.Lang.String)", hoci podľa java docs EnumMap pozná metódu containsKey. viem, že sa to dá spraviť aj cez HashMap, ale zadanie zo školy je spraviť to pomocou EnumMap.

kde je chyba?

vďaka! marek

marek
Java › vymazanie udajov z txt súboru
17. 12. 2012   #169043

A kebyže chcem vypísať konkrétny údaj na určitej pozícií? Na to existuje nejaká metóda?

marek
Java › vymazanie udajov z txt súboru
17. 12. 2012   #169037

dobrý deň

mám súbor do ktorého sa mi ukladajú zadané dáta (teraz nezáleží na tom aké). vyzerá to takto:

            try{
                PrintWriter pw = new PrintWriter(new FileWriter("udaje.txt"));
                pw.println(data);
                pw.close();
            }catch(IOException e){
                System.out.println("Neda sa zapisat.");
            }

ako mám spraviť metódu, ktorá zo súboru udaje.txt zmaže údaj na zadanej pozícií?

vopred veľká vďaka.

marek

marek
Java › Dokonalé čísla - JAVA
20. 11. 2012   #167256

Choď na to logicky - vychádzaj z definície dokonalého čísla a skús napísať všeobecný vzorec pre také čísla, tzn. x = atď..., a práve to atď. sa snaž zapísať ako algoritmus. A potom už iba urob metódu do ktorej ho schováš :-)

marek
Java › Priraďovanie údajov z jednej…
2. 11. 2012   #165754

#6 Buco
Ja mám rovnaký zdroják ako ty a aj tak mi to hádže error.

import java.util.SortedSet;
import java.util.TreeSet;

public class Ziak {
    private int index;
    private String meno;
    private String priezvisko;
    private SortedSet<Predmet> predmety = new TreeSet<Predmet>();
    
    public Ziak(int index, String meno, String priezvisko) {
        this.index = index;
        this.meno = meno;
        this.priezvisko = priezvisko;       
    }
    
    public boolean pridajPredmet(Predmet predmet) {       
        //Vlozi predmet, vracia true ak ho kolekcia predmety este neobsahuje
        return this.predmety.add(predmet);
    }
    
    public String toString()    {
        return this.index+". "+this.meno+" "+this.priezvisko+" "+this.predmety;
    }
    
    public static void main(String[] args) {
        Ziak prvy = new Ziak(1, "Jano", "Maly");
        prvy.pridajPredmet(new Predmet("Programovanie v jazyku Java"));
        System.out.println(prvy.toString());
    }
}

Nemôže byť chyba v kompilátore?? (používam BlueJ)

marek
Java › Priraďovanie údajov z jednej…
1. 11. 2012   #165726

#4 Buco
Trocha nerozumiem metóde pridajPredmet a void main. Metóda pridajPredmet nevracia true ani false, a keď spustím void main (String[]args) vypíše "Predmet cannot be cast to java.lang.Comparable (in java.util.TreeMap)". Ale vďaka že si mi to trocha ozrejmil. Kuknem sa na tie tutoriály...

marek
Java › Priraďovanie údajov z jednej…
1. 11. 2012   #165713

Vďaka za tip. Čo sa týka SortedSet-ov tak v tom sa moc nevyznám. Mohol by si mi prosím ukázať ako by vyzeral napr. pre atribút Predmety v triede Ziak? Díky moc.

marek
Java › while -chybna podmienka
1. 11. 2012   #165690

#1 jonhnw
toto by malo byť ono

import java.util.Scanner;
public class VelkeZnaky {
    public static void main (String [] args) {
        Scanner sc = new Scanner (System.in);
        char znak;
        int pocet = 0;

        System.out.print("Zadavaj znaky,* skonci program: ");    
        do
        {
            znak=sc.nextLine().charAt(0);
        }
            while (znak!='*') ;
            
                if ((znak >='A')&&(znak<='Z')) 
                pocet++;
            
            System.out.print("Velkych pismeno bolo zadanych "+pocet);
        }
    }
marek
Java › Priraďovanie údajov z jednej…
1. 11. 2012   #165688

dobrý deň

chcem urobiť program, ktorý bude "databázou" žiakov v triede. mám vytvorenú triedu v ktorej môžete žiaka pridať, zmazať, zobraziť jeho meno podľa indexu, zobraziť všetkých a zobraziť počet žiakov. potom by mala existovať druhá trieda, cez ktorú budem jednotlivým žiakom priraďovať nejaké údaje, napr. prospech, počet vymeškaých hodín a pod.

prvá zo spomínaných tried vyzerá takto:

import java.util.ArrayList;
public class Databaza
{
    private ArrayList<String> aPoznamky;
    private int paPoradoveCislo;
    private int paIndex;
    public Databaza()
    {
        aPoznamky=new ArrayList<String>();
    }
    public void pridajZiaka(String paZaznam)
    {
        aPoznamky.add(paZaznam);
    }
    public void zobrazZiaka(int paPoradoveCislo)
    {
        if((paPoradoveCislo>=0)
            &&(paPoradoveCislo<dajPocetZiakov()))
            {
                System.out.println(aPoznamky.get(paPoradoveCislo));
            }
    }
    public int dajPocetZiakov()
    {
        return aPoznamky.size();
    }
    public void zmazZiaka(int paPoradoveCislo)
    {
        if((paPoradoveCislo>=0)
            &&(paPoradoveCislo<dajPocetZiakov()))
            {
                aPoznamky.remove(paPoradoveCislo);
            }
    }
    public void zobrazVsetkych()
    {
            System.out.println(aPoznamky);
    }
}

táto trieda funguje bezchybne. tá druhá trieda by mala robiť to, že do nej zadám údaje a tie sa pripíšu k danému žiakovi (s daným indexom). systém, ako si ho predstavujem ja, je meno - datum - predmet - znamka, napr. jozko mrkvicka - 29/2/2012 - dejepis - 5.

poradí mi niekto ako na to?

každá pomoc vítaná.

marek

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý