Új hozzászólás Aktív témák
-
andriscs
aktív tag
Hi!
BME Informatikán vagyok.
Ami a problémádat illeti (bár nem tudom, hogy milyen formában oldottad meg), én általában az ilyen kölcsönös kizárású dolgokat flag-gel szoktam csinálni. A te esetedeben talán az lenne a legjobb, ha irányonként csinálnál boolean flag-eket, és az egymást kizáróakat nem engedélyeznéd (pl. if (előre && !hátra) ... stb. ) Persze emiatt kissé meg kellene variálni az irányítást, de elvileg működne. De ez csak egy ötlet, ha másnak jobb van, szóljon nyugodtan. -
andriscs
aktív tag
Hi!
Persze, hogy örülökDe rájöttem, hogy ez az MI dolog nem is olyan egyszerű. Ezzel is lesz pár gondolkodós órám úgy vélem. A panel-es cuccot nem tudtam megcsinálni, pedig egy másik órán ma erről tanultunk, de semmi ilyesmiről nem volt szó, csak annyit mondtak, hogy a panel a frame egy része. Szóval lehet, hogy azt hanyagolom.
-
andriscs
aktív tag
Hi!
Sajnos még nem akadtam rá a panel-es megoldásra, viszont óriási hírem van: hétvégén SIKERÜLT olyan algoritmust írnom, amelyik rendesen keres a négyzethálón, tehát sikerül hibamentesen kerestetni vele ( kb. 3 órát gondolkodtam rajta). Eddig még nem tudtam megszívatni, szóval most már talán menni fog a dolog. Ráadásul a kép betöltése is sikerül, tehát már háttér is van. Ha kész lesz a progi, akkor majd publikálom
Természetesen most MI-t kellene bele rakni. Van elképzelésem, de ha valakinek van valami szuper ötlete, akkor ne kíméljen! -
andriscs
aktív tag
Hi!
Addig is míg megoldjuk a négyzetháló problémát, valaki elárulja nekem, hogy ha van egy Frame, aminek beállítok egy képet háttérnek, és a Frame déli részére berakok egy panel-t, amin van két gomb, akkor hgoyan tudok a panelra is képet rátölteni? Mert ugye amikor a képet kirajzoltatom a g.drawImage(img,0,0,this)-el, akkor a háttérre rakja ki a képet. Viszont ha ezt használom g.drawImage(img,0,0,p), ahol p a panel, akkor miért nem rajzolja rá a panelre? -
andriscs
aktív tag
Hi!
Jó a te kódod, hogy vízszintesen, majd függőlegesen utána meg átlósan keresel, de az átlósak nem keresik meg mindet, mert pl a balról jobbbra le csak így fut le: 0-0,1-1,2-2,..., majd utána 0-1,1-2 stb., tehát nem megy végig a 3-0... stb irányokban. Ezért csak a felső karéjt ellenőrzi, tehát kimarad az alja. Erre kellene egy ugyanilyen kereseés, csak fordítva (jobbról balra felfelé, illetve balról jobbra felfelé). Ennyi. Ezt kellene megcsinálni, dfe a héten nem nagyon van rá időm. -
andriscs
aktív tag
Hi!
Sajnos nekem sem volt időm arra, hogy átnézzem újra a kódot, viszont az egyik tanárom elmondta, hogy mi a hiba az eredeti programomban. Ezt beidézem:
''a program azért hibás, mert nem a megfelelő feltétel esetén törlöd a számlálót.
Vegyük például a clone1-et. Ha például 3 darab 0 van egy oszlop végén, pl.
mint itt a harmadik oszlopban, akkor az első elemtől lefelé indulva talál két egyezést,
így clone1 értéke 2. Majd mivel a tábla széléhez ér, a második elmetől
kezdve keres egyezést, és talál egyet, így clone1 értéke már 3, és igazzal tér vissza.
{{'0', 'x', '0', 'x', '0'},
{'x', '0', 'x', '0', 'x'},
{'0', 'x', '0', 'x', '0'},
{'x', '0', '0', 'x', '0'},
{'0', 'x', '0', '0', '0'}}''
Szóval ezért hibás a dolog. A nagy kérdés az, hogy hogyan lehet kijavítani!
De valszeg érdemeseb a te progidat továbbfejleszteni. A lényege az lenne, hogy amikor a te progid balról jobbra megy felülről lefele, akkor utána egy jobbról balra felfelé ugyanolyan ciklus kell. És ugyanez a másik irányban is, csak ott meg fordítva. Remélem érthető. -
andriscs
aktív tag
-
andriscs
aktív tag
Hi!
Nem tudtam megállni, és teszteltem, úgy néz ki működik. Ahogy átnéztem a kódodat, rájöttem, hogy az enyém túlságosan körülményes, a tied viszont lényegretörő. Az egyik tanáromnak is írtam már, aki azt ajánlotta, hogy vigyázzak, mivel én String tömben tárolom a dolgokat, és a sima == csak referencia, inkább használjak equals() tagfüggvényt, mert az ő szavaival élve a ''programom egy időzített bomba''. Remélem, hogy azzal már rendesen működni fog, most már csak egy alap mesterséges intelligencia kell bele, aztán mehet a dolog.
Apró megjegyzés, hogy rájöttem (mivel ma tanultuk), hogy hogyan lehet képet betölteni (kicsit eltér az Applet-ek képbetöltésétől): Szóval valahogy így kell:
Image img=Toolkit.getDefaultToolkit().getImage(''kep.jpg'');
utána pedig paint()-ben g.drawImage(img,0,0,this). Apró szépséghiba, hogy a kép nem jelenik meg. Vajon miért nem? Add metódus nincs képekhez, requestFocus() nem kell neki, tehát elvileg már látnom kellene a képet. De mégsem látok semmit. Ötlet? -
andriscs
aktív tag
Hi!
Kicsit átírtam a kódot, hogy világosabb legyen, tettem bele megjegyzéseket. Természtesen értem, ogy mit csinála kód, a látszólagos kuszasága ellenére eléggé szimpla kód, csak sokat ismétlődik, apróbb változásokkal. Szóval a koncepció az, hogy minden kattintás után a függvény végigfut a tömbelemeken, ls megvizsgálja, hogy van-e valamelyik irányban 4 egyforma jel. A lényeg (tehát a keresés) mindenhol ugyanaz, csak az irány változik, szóval lényegében 8x fut le ugyanaz a kód, nagyon minimális eltéréssel. Ami a for ciklusok feltételeit illeti, az azért annyira bonyolult, mert ugye nem léphetek túl a tömb határain, tehát pl. az 1,1 elemtől nem tudok 4-et balra menni, mert az már kilépne a tömbből. Tehát biztonsági intézkedések miatt van a hosszfigyelés. Ha még valami nem tiszta, akkor magyarázok, de itt az új kód (ez már csak max. 4 egyforma elemet talál):
public boolean searchEngine() //need to check
{
for(col=0;col<size;col++) //oszlopokon lépked
{
for(row=0;row<size;row++) //sorokon lépked
{
for(int count=1;row+count<game.length && count<4;count++) //soron jobbra
{ //ameddig nem éri
if (game[row+count][col]==(game[row][col])) //el a tömb szélét v. 4 jelet
{
clone1++; //ha van egyforma, növeli
if (clone1==3) return true; //min. 3 kell, hogy összesen 4 legyen
}
else clone1=0; //ha nincs egyforma, nullázza a számlálót
}
for(int count=1;row-count>-1 && count<4;count++){ //elemtől balra megy
if (game[row-count][col]==(game[row][col])) //stb...
{
clone2++;
if (clone2==3) return true;
}
else clone2=0;
}
for(int count=1;col+count<game.length && count<4;count++)
{
if (game[row][col+count]==(game[row][col]))
{
clone3++;
if (clone3==3) return true;
}
else clone3=0;
}
for(int count=1;col-count>-1 && count<4;count++)
{
if (game[row][col-count]==(game[row][col])) {
clone4++;
if (clone4==3) return true;}
else clone4=0;
}
for(int count=1;(row+count<game.length) && (col+count<game.length) && count<4;count++)
{
if (game[row+count][col+count]==(game[row][col]))
{
clone5++;
if (clone5==3) return true;}
else clone5=0;
}
for(int count=1;(row-count>-1) && (col-count>-1) && count<4;count++)
{
if (game[row-count][col-count]==(game[row][col])) {
clone6++;
if (clone6==3) return true;}
else clone6=0;
}
for(int count=1;(row+count<game.length)&& (col-count>-1) && count<4;count++)
{
if (game[row+count][col-count]==(game[row][col]))
{
clone7++;
if (clone7==3) return true;}
else clone7=0;
}
for(int count=1;(row-count>-1) && (col+count<game.length) && count<4;count++)
{
if (game[row-count][col+count]==(game[row][col]))
{
clone8++;
if (clone8==3) return true;}
else clone8=0;
}
}
}
return false;
} -
andriscs
aktív tag
Hi!
Az ilyen file-kezelésről nem nagyon tudok még dologokat, de asszem itt is valami FileInputStream kell, meg adatcsatornák, ilyesmi. Szerintem nézz körül a Sun honlapján.
Nem tudom, hogy miért nem működik, de kiírja, hogy a paraméterlistában vessző helyett ) kell. Szóval nem megy. Megnézem, hátha találok mást is. Egyelőre a háttér a legkisebb bajom. Fontosabb a hégyzethálóm problémája, amit sehogy se lehet megoldani. Azt hiszem, ez lesz a diplomamunkám: Univerzális hálóprobléma, avagy egy újabb NP probléma, amelyik megoldásra vár. -
andriscs
aktív tag
Hi!
Itt egy link, remélem, nem gond, hogy angol:
Bővebben: link
Az én problémámra nem talál senki megoldást? Már el tudom érni, hogy 1 irányban max 3 egységig keressen, de még mindig talál derékszögű dolgokat. Help me! -
andriscs
aktív tag
Hi!
Azt hiszem, hogy megtaláltam a 2000-es év 101. matematikai problémáját, ugyanis a kód szintaktikailag jó, és véleményem szerint szemantikailag is, csak éppen nem úgy működik, ahogy kellene, de ne, jövök rá, hogy mi okozza az anomáliát. Ha valaki tudna segíteni, annak nagyon örülnék, mindegy, hogy milyen nyelven próbálja ki, nekem még pszeudo-kód is jó, csak valaki nézzen már rá, hogy mi a hiba! Arra már rájöttem, hogy akkor is talál megoldást, ha egy irányban elszórva vannak azonos elemek. De ez még nem magyarázza meg, hogy a derékszögű 4-es sort miért találja meg. Légyszi segítsetek! -
andriscs
aktív tag
Hi!
Látom, hogy senkit sem mozgat az előbbi probléma, most viszont van egy újabb. betöltöttem egy képet így: Image img=Toolkit.getDefaultToolkit().getImage(''bg.jpg''); Ezután egy a metódusban meghívtam ezt: g.drawImage(img,0,0,Color.RED,this);, ennek ellenére csak egy fehér képet kapok. Mi a hiba? -
andriscs
aktív tag
Hi!
Úgy látom, hogy tényleg el kell megyaráznom, hogy hogyan működik a függvény. Szóval a külső 'for' ciklus a tömb oszlopain lépdes egyesével, az abba beágyazott 'for' pedig a sorokon lépked, magyarul a két 'for' bejárja a 2D-s hálót. A kis 'for' ciklusok az adott elem (game[row][col]) értékét hasonlítják össze egy bizonyos irányban a többi tömbelemmel (tehát mikor pl- game[row+count][col] van, akkor egy soron megy végig addig, amíg el nem éri a tömb szélét). Minden irányban más változó tárolja az azonos elemek számát. Mikor ez a változó elérte a 3-at, akkor van 4 egyforma elem ugyanabban az irányban. Ilyenkor lesz a return true. Egyébként pedig false. Szóval egy elég primitív algoritmus. Csak ezt nem értem, hogy miért nem működik a széleken. Ha valaki rájön a megoldásra, szóljon! -
andriscs
aktív tag
Hi!
Azt hiszem, hogy egy ilyen, viszonylag egyszerű kódot nem kell agyonkommentezni. A lényege az, hogy minden egyes elemtől indulva végigmegy az irányokon. amit mondazs, azt más is ajánlotta már, de nem tudom, hogy miért jobb az, ah a for ciklusok feltételében ez van, hogy a következő elem 0 (ami a keretező tömbelemeket jelentené), vagy hogy ne lépje túl a tömb htaárait. Ennek így is működnie kellene. Amit te ajánlasz, az annyiban változtatná meg a kódot, hogy for(count=1;game[row+count][col]!=''0'';count++). De ez pontosan azt csinálná, mint hogy elér az eredeti tömb széléhez, ami az én feltételeimben van. -
andriscs
aktív tag
Sziasztok!
Új problémával állok elő. Szóval van egy 2 dimenziós tömb, amiben azt vizsgálom, hogy egy adott elemtől indulva az elemet körbevevú 8 irányban találok-e még legalább 3 ugyanolyan elemet (amőba jellegű a dolog). A probléma azt, hogy a tömb belsejében tökéletesen működik a dolog, de a széleken mintha összeadná az összes találatot. Emiatt megcsináltam úgy, hogy minden irányban új változó tárolja a találatot, de így sem működik. Nincs ötletem, hogy mi a hiba. Természtesen a tömböknél figyelni kell, hogy ne lépje túl a tömb határait. Bemásolom ide az adott függvény kódját, hátha valaki rátalála hibára:
public boolean searchEngine() //need to check
{
int clone1=0;
int clone2=0;
int clone3=0;
int clone4=0;
int clone5=0;
int clone6=0;
int clone7=0;
int clone8=0;
for(row=0;row<size;row++)
{
for(col=0;col<size;col++)
{
for(int count=1;row+count<game.length;count++){
if (game[row+count][col].equals(game[row][col])) {
clone1++;
if (clone1>=3) return true;}
else clone1=0;
}
for(int count=1;row-count>-1;count++)
if (game[row-count][col].equals(game[row][col])) {clone2++;
if (clone2>=3) return true;}
else clone2=0;
for(int count=1;col+count<game.length;count++)
if (game[row][col+count].equals(game[row][col])) {clone3++;
if (clone3>=3) return true;}
else clone3=0;
for(int count=1;col-count>-1;count++)
if (game[row][col-count].equals(game[row][col])) {
clone4++;
if (clone4>=3) return true;}
else clone4=0;
for(int count=1;(row+count<game.length) && (col+count<game.length);count++)
if (game[row+count][col+count].equals(game[row][col])) {clone5++;
if (clone5>=3) return true;}
else clone5=0;
for(int count=1;(row-count>-1) && (col-count>-1);count++)
if (game[row-count][col-count].equals(game[row][col])) {
clone6++;
if (clone6>=3) return true;}
else clone6=0;
for(int count=1;(row+count<game.length)&& (col-count>-1);count++)
if (game[row+count][col-count].equals(game[row][col])) {clone7++;
if (clone7>=3) return true;}
else clone7=0;
for(int count=1;(row-count>-1) && (col+count<game.length) ;count++)
if (game[row-count][col+count].equals(game[row][col])) {clone8++;
if (clone8>=3) return true;}
else clone8=0;
}
}
return false;
}
Akinek van ötlete, ne kíméljen! -
andriscs
aktív tag
HI!
Címkézett vezérlésnél mi a teendő? Elvileg csináltam egy ide: cimkét, majd használtam a break ide parancsot, de hibát jelez, hogy a cimke hiányik. Hova kell rakni? -
andriscs
aktív tag
Hi!
Működik a dolog, csak csináltam auto-formázást, és a csodálatos progi átrakott egy {-t, így minden a catch alá került, persze, hogy nem futott le. Ez így elég hosszadalmas dolog, de ha nincs ló, jó a szamár is (én is megnéztem C#-ban van olyan Console-os readInt() ).
[Szerkesztve] -
andriscs
aktív tag
válasz
Alvin_ti4200 #16 üzenetére
Hi!
Ez így oké, de majd mikor ZH-t írok Java-ból, akkor mit írjak a lapra? Hogy tessék tanár úr, itt egy link, ezen ellenőrizheti, hogy az általam használt Console osztály létezik, csak nem jegyeztem meg, de amúgy müködik.Megpróbálom ezt a BufferedInputStream.In.Read.Int.Load.Integer.ReadLine.DoWork.Already.Java.Very.Easy.ToUse.This.Input.Read() függvényt, talán működik
-
andriscs
aktív tag
Hi!
Megnéztem, létezik olyan, hogy System.in.read(), és elvileg van olyan verziója, ami int-et kér argumentumnak, de miután megkapja, gondol egyet, és kér még egy int-et, meg egy byte-ot. Pedig van olyan read aminek 1 int argumentum kell. Szerintem be van b*szv* a fordítóm. -
andriscs
aktív tag
válasz
Alvin_ti4200 #6 üzenetére
Hi!
Oké, de akkor ebből a Console osztályból kellene származtatnom az eredeti osztályt, hogy elérjem a Console class metódusait. De ez a Console nem ''gyári'' Java osztály, hiába írnám be, hogy class xy extends Console. Szóval vmi eredeti Sun inputolvasás nincs?
[Szerkesztve] -
andriscs
aktív tag
Hi!
És ezzel most mit kezdjek? Mi az input? Mert nem igazán ismer ilyen függvényket, bármit import-álok be. ha xyválozó.readInt() van, akkor nem lehet hívni, ha csak magában readInt() van, az úgy nem elérhető, ha osztályszinten csinálom, az se jó. Szóval ez így nem működik. Kicsit bőveb help? -
andriscs
aktív tag
Hi!
Láttam, hogy nincs igazi Java topic, ezért gondoltam, én nyitok egyet, jó lenne, ha itt kérdezgetnénk Java-s dolgokat. Szóval, hogy megnyissam a sort, lenne is egy kérdésem. Szóval van egy egyszerű Java alkalmazás, é szeretnék beolvasni az inputról. Van két {B}int tpusú változó, és {B}readCharacter(){/B} függvénnyel próbáltam beolvasni, de nem igazán ismeri a függvényt a fordító. Mit kell importálni, hogy működjön?
Kb. ilyen a progi:
class xy{
public static void main(String []args)
{
int x;
int y;
x=readCharacter();
y=readCharacter();
}
}
Ha van ötlet, írjatok!!
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- TUF F15 FX507ZI4 15.6" FHD IPS i7-12700H RTX 4070 32GB 512GB NVMe gar
- AKCIÓ!! i9 9900 , RX 5700 XT , 32GB DDR4 , 512GB NVME , 2TB HDD
- Inspiron 14 7440 2-in-1 14" FHD+ IPS érintő Core 5 120U 16GB 512GB NVMe magyar vbill ujjolv gar
- Garis ZOTAC GeForce RTX 4070 Ti Trinity 12GB GDDR6X videokártya
- Nokia mobilgyűjtemény - E-series + 2 klasszikus
- TAVASZI BOMBA AKCIÓK! STEAM, UBISOFT CONNECT, EA APP, XBOX EREDETI KULCSOK 100% GARANCIA
- Új és régi konzolok Okosítása/Softmodoloása, és Szoftveres szintű javítása - RÉSZLETEK A LEÍRÁSBAN
- Lenovo Legion 5 15ACH6 Az ár irányár, komoly érdeklődés esetén van lehetőség egyeztetésre
- Eladó Új Motorola G31 4/64GB szürke / 12 hónap jótállással!
- IKEA (HAVREHOJ) tablet vagy laptop tartó
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest