Java programozás - Szoftverfejlesztés fórum

üzenetek

hozzászólások


andriscs
(aktív tag)

Hi!

Megvan a hiba, hiába, minden ember a saját példáján okul. :)


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!


Miracle
(senior tag)

mondjuk azt nem vágom, hogy mit akar az a hosszú függvény amit leírtál, mert a kommenteknél csak a whitespacekkel bántál fukarabbul(jó, ez lehet, hogy a PH), nomeg hajnali 2 van... de abból amit mondtál talán segíthet, hogy ha n*m-es a meződ, akkor (n+2)*(m+2) méretű tömbben tárolod, aminek a szélső soraiban és oszlopaiban nincsen csak 0 vagy az, amivel jelölöd, hogy nincs ott semmi, és okosan írod meg a hozzáférő-függvényeket, úgy, hogy a felhasználó ebből semmit se lásson, tobábbra is n*m-esként kell paraméterezni. azaz amikor kap egy n*mes paramétert, hozzáad egyet egyet.
mondjuk nyilván van elegéns megoldás is a problémára, de ahoz egy szépen igazított kód kellene ide bekommentelve.


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)

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!

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!

Arra már rájöttem, hogy miért fehér a háttér, de a képet még mindig nem tölti be. Van ötletetek?

[Szerkesztve]


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!


Kr1xX
(csendes tag)

import java.awt.*;
import java.applet.Applet;

public class Valami extends Applet {
Image background;

public void init() {
background=getImage(getCodeBase(), ''egyKep.gif'');
}

public void paint(Graphics g) {
g.drawImage(background, 0, 0, this);
}
}

Én ezt ha lefordítom, akkor kirajzolja a képement. Próbáld meg lefuttatni te is ezt először, aztán módosítsd kedvedre. Ja értelem szerűen az ''egyKep.gif''-nek léteznie kell abban a könyvárban, ahol a class is van!


Kr1xX
(csendes tag)

Nekem is van egy kérdésem. Írtam egy Snake apletet, de annyi bajom van vele, hogy ahhoz, hogy a kígyó az mozogjon, ahhoz animálno kell, tehát azadott területet minig repaint()-elnem kell mozgásonként. Ettől viszont néha villog a kép. Láttam már viszont olyan megoldásokat is, ahol ezt megoldották valahogy. Tud e valaki segíteni, mi ennek a titka?


andriscs
(aktív tag)

Hi!

Segítek, ha te is nekem :) Na jó, ilyenkor kell double buffering-et használni, hogy ne villogjon. A neten rengeteg cucc van róla, lényegében Foreground és Background -okat kell váltogatni (ha jól emlékszem)


Kr1xX
(csendes tag)

Thx, esetlen ha tudsz dobj egy linet is ;) ! Egyébként ha tudok persze segítek!


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!

Kipróbáltam, de így nem működik. A getImage() metódus csak egy paraméterrel működik, nem lehet egyszerre getCodeBase() és képnév is a paramétereknél. Tuti így működött neked?


Kr1xX
(csendes tag)

Kössz a linket! Lehet nem értem a problémádat... ha én képeket akarok megjeleníteni mindig így csinálom, igen nekem így működik. Egykét munkám eddig: http://sztyan.uw.hu/Sztyan/java/java.htm


Kr1xX
(csendes tag)

Uhh, volna még egy kérdésem: játékhoz toplistát szeretnék írni. Ehhez pedig azt kellene egoldani, hogy nevet és eredményt kiírni egy fájlba. Ezzel nincs is gond, csupán annyi,hogy apletben nem sikerült megoldanom. Be tudok olvasni TextField-ből egy stringet me minden,de nem tudom, hogy lehetne kiírni egy fájlba (alkalmazásnál tökéetesen működik, de applenél nem megy).


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. :)


Kr1xX
(csendes tag)

Mert mit kellene a négyzethálóddal kezdeni?


andriscs
(aktív tag)

Hi!

Olvasd el a #22 üzenetet, ott leírtam. De ddig még senki nem tudta megoldani.

[Szerkesztve]


Kr1xX
(csendes tag)

Csak egy őszinte megjegyzés, aztán elkezdek kondolozni is. Így végigolvasva a forráskódod, csodálom, hogy ezt a sok feltételt még a géped felfogja, és lefordítja. Persze nem cseszegetni akarlek, mert már velem is előfordult, hogy nagyon nem jöttek össze a dolgok, aztán jöttek a feltételek egymás után, hogy szűrjem vele a hibákat, kivételeket...DE az kizárt, hogy ezt más is felfogja rajtad kívól, feltéve ha te még érted. Ja meg olyan tömör egy kicsit. Azt javaslom, inkább fogalmazd meg a problémádat pontosabban, azzzal talán rövidebb átláthatóbb és frappánsabb kódokat kaphatsz cserébe.

üzenetek