java main

Programovacie jazyky, rady, poradňa...
sokinko
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 máj 2011, 18:41

java main

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

caute,
som len zaciatocnik v jave a mam problem.
keylistener som si "staihol z internetu" a ten vytvaram cez main funkciu.
v inej triede mam parser a jednu "hru, povedzme ze "textove piskvorky"".
moj ciel je vlastne ze momentalne mi tam pise v keylisteneri samotnom podla dema, key pressed, a bla bla....viem si to zmenit ze ked stlacim potrebnu klavesu tak to spravi potrebnu metodu, ale co neviem urobit je, ze ked v tej inej triede (je to taka rpg :D) do parsera by som napisal napr "hraj piskvorky" tak chcem aby sa mi otvoril keylistner...ibaze tu prave neviem ako to spravit, neviem ako vytvorit daco cez tu main funkciu alebo co , no , dufam ze chapete...
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: java main

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

no precital som si to treti krat tak som hadam pochopil

takze mas dve moznosti
A - trieda ktorej metodu chces volat je v rovnakom package ako trieda z ktorej volas - v tom pripade nemusis importovat nic
B - trieda je v inom package - musis pridat klauzulu import a importovat triedu, pozri si zaciatok suboru, isto tam neake importy su tak by si mal pochopit ako ich pisat

a ked budes mat za sebou import tak mas opat dve moznosti
A - metoda ktoru chces volat je staticka - v tom pripade smelo volas NazovTriedy.metoda(argumenty)
B - metoda nie je staticka -> vytvoris instanciu triedy a volas metodu cez jej instanciu

nemam tu prostredie na to aby som ti poslal kod tak pis ak niecomu nechapes
sokinko
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 máj 2011, 18:41

Re: java main

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

no su v jednom packagi, a volam metodu main, ktora je static.

skusal som to takto
listener = new KeyListenerTester();
KeyListenerTester.main();

a pise ze keylistener nema konstruktor

ked som dal takto

listener = new KeyListenerTester();
KeyListenerTester.main({}); -> to vlastne zadavam pri arg ked len spustam main priamo v triede

tak mi napise ze illegal start of expression

mozem uploadnut aj to moje jarko a pozres sa na to sam ze ako to urobit,



->
aha teraz som dal len KeyListenerTester.main(null);
som skusil, a ide to, ibaze mi akoby skonci ten parser, ale to uz je dalsi problem , to idem riesit ak nebudem vediet, pridem znova :D

ale zatial dik aspon som zistil ako vyvolat ten keylistener.
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: java main

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

tento kod:
listener = new KeyListenerTester();
KeyListenerTester.main(null);

zmysel nema... ak by si chcel volat main ktory by nebol staticky tak takto:
listener = new KeyListenerTester();
listener.main(null);
sokinko
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 máj 2011, 18:41

Re: java main

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

hej hej sry viem,
nakoniec to mam tak ako si hovoril len ze nazovtriedy.main bez vytvorenia ho ako objektu ci ako sa to povie :D
zatial dik pomohol si mi, uz riesim dalsi problem :)
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: java main

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

nz, keby nieco pis...
sokinko
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 máj 2011, 18:41

Re: java main

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

Kód: Vybrať všetko

public void keyPressed ( KeyEvent e)
    {  
        int a =e.getKeyCode();
        switch (a)
        {
         case 37: hra.posunVlavo(); break;
         case 38: hra.posunHore(); break;
         case 39: hra.posunVpravo(); break;
         case 40: hra.posunDole(); break;
         default: break;
        }
        
        System.out.println(hra.hraj());
    }  
ked mam toto, a stlacami sipky, tak mi tam pise

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

ciel je asi jasny ze podla toho aku spiku stlacis tam sa nieco pohne, ak treba tak mozem tu hodit cely kod aj tej "hry" aj listeneru, mozno aj tam mam chybu lebo ako som vravel prvy krat to pouzivam

hra.hraj() vracia string momentalenho stavu
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: java main

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

a je "hra" nainicializovana? lebo asi to jedine tam moze byt null - pripadne nieco v tych metodach moze byt null a volas bud metodu objektu ktory je null alebo niekde posuval argument ktory nema byt null
sokinko
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 máj 2011, 18:41

Re: java main

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

nainicializovana akoze
Loyd hra = new Loyd();
? :D
ja som bol vzdy slaby v takomto vyjadrovani....
pri main v listeneri mam toto

public static void main (String[]args ){
new KeyListenerTester ( "Loydova 8" ) ;
Loyd hra = new Loyd();
System.out.println(hra.hraj());
}

a normalne mi do terminali vypise ten string co chcem.... takze objekt hra nieje null


a metody "pohybu" dam len jeden

Kód: Vybrať všetko

private boolean dole()
    { for (int i=0; i<3;i++)
        {
            for (int j=0; j<3;j++)
            {
                if(plocha[i][j]==0 && (i-1)>-1)
                {plocha[i][j]=plocha[i-1][j];
                    plocha[i-1][j]=0;
                    kontrola();
                    return true;}
            }
        }
        return false;
    }
len zisti ci je to pohyb mozny, ak hej tak ho spravi, ak nie tak sa nestane nic ....ono mi to funguje ta hra samotna vpohode, mam problem len ked to cez ten listener chcem pouzit...

a teda tuto metodu pohybu :D volam cez inu metodu, pretoze som potreboval uz ani neviem co :D

ale to je len fakt metoda

public void posunDole()
{dole();}

no
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: java main

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

debug mod -> pozri si vsetky premenne, odkrokuj si to - a teraz nekod ale pozeraj hokej :hokej2:
sokinko
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 máj 2011, 18:41

Re: java main

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

:D ok idem skusit....
a nemam cas na hokej pretoze mam 7 zapoctov a odovzdat semestralju tento tyzden a v piatok skuska no .:D


hm no tak skusil som teda len ze nech napise keycode toho co stlacim, to ide normalne, a dal som ze ked stlacim hocico tak to urobi hra.posunnejaky, a uz tam to pise chybu, a cez ten debugger to mne moc nepomohlo :( ked tu hodim cely zdrojak tak by si sa na to pozrel po hokeji?

Kód: Vybrať všetko

package sokol.wof.predmety;

import java.awt.*; 
import java.awt.event.*;

public class KeyListenerTester extends Frame implements KeyListener{  
    TextField t1;
    Label l1;
    private Loyd hra;
    public KeyListenerTester(String s )   {  
        super(s); 
        Panel p =new Panel();
        l1 = new Label () ;
        p.add(l1);  
        add(p);
        addKeyListener ( this ) ; 
        setSize ( 200,100 );
        setVisible(true);
        addWindowListener(new WindowAdapter()

            {
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            }
        );
    }  


    public void keyTyped ( KeyEvent e ){  
        
    }  


    public void keyPressed ( KeyEvent e)
    {  
        int x = e.getKeyCode();
        System.out.println(x);
        switch (x)
        {
         case 37: hra.posunVlavo(); break;
         case 38: hra.posunHore(); break;
         case 39: hra.posunVpravo(); break;
         case 40: hra.posunDole(); break;
         default: break;
        }
        
        System.out.println(hra.hraj());
    }  


    public void keyReleased ( KeyEvent e ){  
    }  


    public static  void main (String[]args ){  
        new KeyListenerTester ( "Loydova 8" ) ; 
        Loyd hra = new Loyd();
        System.out.println(hra.hraj());
    }  
}

to je listener moj


a ta hra

Kód: Vybrať všetko

package sokol.wof.predmety;


import java.util.Random;

public class Loyd
{

    private int[][] plocha;
    private int vyhra;
  //  private KeyListenerTester listener;

    public Loyd()
    {
        
        plocha = new int[3][3];
        int x = 1;
        for (int i=0; i<3;i++)
        {
            for (int j=0; j<3;j++)
            {

                plocha[i][j]=x;
                x++;
                if(i==2&&j==2)
                {plocha[i][j]=0;
                }
            }
        }
        zamiesaj();
     //  KeyListenerTester.main(null);
    }

    public void posunVlavo()
    {vlavo();}


    public void posunVpravo()
    {vpravo();}


    public void posunHore()
    {hore();}


    public void posunDole()
    {dole();}

    public String hraj()
    {
        String hra;
        hra = "\f";
        for (int i=0; i<3;i++)
        {
            for (int j=0; j<3;j++)
            {
                if (plocha[i][j]==0){hra += "X\t";}
                else{
                    hra += plocha[i][j] +"\t";
                }
                if(j==2){hra += "\n";}
            }
        }
        
        return hra;
    }

    private boolean dole()
    { for (int i=0; i<3;i++)
        {
            for (int j=0; j<3;j++)
            {
                if(plocha[i][j]==0 && (i-1)>-1)
                {plocha[i][j]=plocha[i-1][j];
                    plocha[i-1][j]=0;
                 //   hraj();
                    kontrola();
                    return true;}
            }
        }
        return false;
    }

    private boolean hore()
    {for (int i=0; i<3;i++)
        {
            for (int j=0; j<3;j++)
            {
                if(plocha[i][j]==0 && (i+1)<3)
                {plocha[i][j]=plocha[i+1][j];
                    plocha[i+1][j]=0;
              //      hraj();
                    kontrola();
                    return true;}
            }
        }
        return false;}

    private boolean vpravo()
    {for (int i=0; i<3;i++)
        {
            for (int j=0; j<3;j++)
            {
                if(plocha[i][j]==0 && (j-1)>-1)
                {plocha[i][j]=plocha[i][j-1];
                    plocha[i][j-1]=0;
              //      hraj();
                    kontrola();
                    return true;}
            }
        }
        return false;}

    private boolean vlavo()
    {for (int i=0; i<3;i++)
        {
            for (int j=0; j<3;j++)
            {
                if(plocha[i][j]==0 && (j+1)<3)
                {plocha[i][j]=plocha[i][j+1];
                    plocha[i][j+1]=0;
              //      hraj();
                    kontrola();
                    return true;}
            }
        }
        return false;}

    public void zamiesaj()
    { 
        Random generator = new Random();
        for (int i=0; i<50 ; i++)
        {
            int r = generator.nextInt(4);
            switch (r)
            {
                case 0: hore(); break;
                case 1: dole(); break;
                case 2: vpravo(); break;
                case 3: vlavo(); break;
            }

        }
    }

    private void kontrola()
    {
        int x = 1;
        int y = 0;
        for (int i=0; i<3;i++)
        {
            for (int j=0; j<3;j++)
            {
                if(plocha[i][j]==x){y++;};
                x++;
            }
        }

        if (y==8)
        {vyhra = 1;
         System.out.println("vyhral si");
        }  
    }

}
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: java main

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

daj to sem cele... kym vyhravame a bude prestavka tak na to hodim oko... ale nemam to ako otestovat tak budem len strielat
sokinko
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 máj 2011, 18:41

Re: java main

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

no editol som ten post teraz, tak tam to je


myslim ze tam popis moc netreba no ale tak dam ze
je to hra co byva ze mas obrazok zo stvrocekov, a jeden chyba, a musis to poskladat do povodneho tvaru, tak ja to mam s cislami...
1-8 (3x3 pole), zamiesa sa to , metodami hore dole posuvas teda to co mozes na prazdne policko...

kontrola skontroluje ci je vsetko t am kde ma byt, ak ano, tak ti napise ze si vyhral, (vyhra = 1 je kvoli tej celej rpg co robim)

zatial teda potrebujem ze urobim keylistener novy, ten vytvori v terminali loyda (tak sa vola ta hra), a budem stlacat sipky a podla toho bude posuvat metodami.....a tam je teda ten problem ze mi to hadze daky error
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: java main

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

no zbezne som to presiel ale nic nevidim (to bude tym ze mi ritku stiska ked sa hra pri nasej brane) ale tak null pointer exception sa hlada lahko... len si to odkrokuj...
sokinko
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 máj 2011, 18:41

Re: java main

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

takze vysledok

v main funkcii listeneru napise kvoli Loyd hra = new Loyd(); hru ako lokalnu prememnnu, a nasledne v korku key pressed je hra null.
tak som opravil teda dufam ze to tak ma byt ze som nedal v main Loyd hra = new Loyd();, pretoze vlastne to mam an zaciatku nie ze private Loyd hra, takze teraz som len dal hra = new Loyd();
a tam mi teraz pise chybu
non-static variable hra cannot be reference from a static context....

takze si idem zistit co to vlastne znamena static :D:D



dobre takze


v keylisteneri kde som daval priave loyd hra, som skusil teda ze aby hra bola static, tym padom som dal
static loyd hra
a uz to ide :D

dik zatial velmi za pomoc, idem dalej robit :)
este raz dik
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: java main

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

static znamena ze je to premenna triedy a nie premenna instancie
Napísať odpoveď