- Több mint 500 millió dollárt spórolt az AI a Microsoftnak
- Ismét 128 és 256 GB-os memóriaszetteket villantott a G.Skill
- Panorámás miditorony jött a Chieftec fémjelzésével
- Ráfordult a célegyenesre a SiPearl első szerverprocesszora
- A partnerektől függ, hogy lesz-e Arc csúcs-VGA az aktuális generációban
- Szünetmentes tápegységek (UPS)
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Léghűtés topik
- OLED TV topic
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Milyen monitort vegyek?
- Monitor hiba topik
- Azonnali informatikai kérdések órája
Új hozzászólás Aktív témák
-
válasz
trisztan94 #4299 üzenetére
-
trisztan94
őstag
Sziasztok!
GWT-vel kapcsolatban lenne még kérdésem.
Készítettem egy service-t, egy Model-t és egy adatbázis kapcsolódást.
Így néz ki az adatbázis kapcsolódás:
public class db_conn
{
public Connection con;
public db_conn()
{
}
public String ConnectToDB()
{
try
{
String host = "localhost";
String db = "test";
String driver = "com.mysql.jdbc.Driver";
String user = "root";
String pass = "pwd";
Class.forName(driver).newInstance();
con = DriverManager.getConnection(host+db, user, pass);
return "Connected to Database";
}
catch(Exception ex)
{
return ex.toString();
}
}
}Sikeresen kapcsolódik is az XAMPP-s adatbázishoz. Egy kérdésem maradt már csak: Hogyan tudok a mysql adatbázis felé query-ket küldeni, és visszakapni azok értékét? (Valami olyasmi kellene, mint PHP-ban a fetchAll, vagy valami hasonló)
-
trisztan94
őstag
-
Karma
félisten
Köszi, ezen a vonalon el tudok indulni remélhetőleg.
(Egy BridgePropertyPlaceholderConfigurernek kéne mindezt becsempésznem.) -
modder
aktív tag
-
Karma
félisten
válasz
trisztan94 #4294 üzenetére
Tudtommal jó eséllyel, ha nem használsz semmit az újabb Servlet API-ból. Azért volt egy-két konfigurációs változás is...
A legegyszerűbb ha letöltesz egy hatost és megpróbálod, nem sokból tart.
Más:
Nekem is lenne egy kérdésem a közösbe.
Adott egy webalkalmazás WAR csomagban, ami egy properties fájlból konfigurálható (DB elérés, SMTP, útvonalak, stb.). Ezt jelenleg a classpathon tárolom (fájlszinten a WEB-INF/classes alá kerül a Maven által).
A kérdés egyszerű: hova és hogyan kellett volna tennem ahhoz, hogy ha új verziót adok ki a cuccból, a WAR-ban lévő propfájl ne vágja felül az ügyfél adatait? Nem én üzemeltetem és nyilvánvaló okokból nem kapom meg az ő konfigjukat, amiket a deployolt alkalmazásban módosítottak.
Gyors megoldásként gondoltam arra, hogy a fájlt kiveszem a WAR-ból, így a Tokcat redeploy nem fog a kinn lévőhöz nyúlni. De mi lett volna a helyes megoldás?
-
trisztan94
őstag
Sziasztok!
Ha Tomcat 7 alatt tesztelem az app-ot (xampp), akkor az mekkora valoszinuseggel fog jol futni Tomcat 6 alatt?
-
fatal`
titán
válasz
trisztan94 #4292 üzenetére
Számológéppel, vagy kódból
-
Karma
félisten
válasz
trisztan94 #4290 üzenetére
A setColor 0 és 1 közötti float értéket vár, nem 0 és 255 közötti egészeket.
-
trisztan94
őstag
Miért lesz kék egy betű, ha barna rgb-t adok meg neki? Bitmapfont
font.setColor(165, 126, 70, 1);
eredmény:
-
WonderCSabo
félisten
válasz
trisztan94 #4288 üzenetére
Sztem rövid kifejezések esetén szebb a ternary, mint az if.
-
trisztan94
őstag
válasz
WonderCSabo #4285 üzenetére
Ja tényleg, ez nem a "rövidített" if
Köszi a linket, még sosem néztem utána, de nagyon ronda szerintem (és átláthatatlanabb sokkal, mint egy értelmesen megírt if() vagy switch())
Köszönöm a gyors válaszokat uraim, neveiteket imáimba foglalom!
-
fatal`
titán
válasz
Peter Kiss #4284 üzenetére
?
Igen, ez volt az eredeti kód, a kérdés pedig az volt, hogy hogy van ifekkel.
-
WonderCSabo
félisten
válasz
trisztan94 #4282 üzenetére
If (x >= xo && x <= xe && y >= yo && y <= ye)
return true;
else
return false;Mivel ez egyetlen logikai kifejezés, simán ennyi. De ezt így írni tökre nem szép. Egyébként sztem a "rövidített if" amire te gondolsz, az a ternary operator.
Látom megelőzek. Athlon64+, Te az eredeti választ adtad meg.
-
fatal`
titán
válasz
trisztan94 #4282 üzenetére
if ( x>=xo && x<=xe && y>=yo && y<= ye)
{
return true;
} else
{
return false;
}Esetleg még szét lehet bontani 4 ifre, de ez aztán abszolút értelmetlen:
if (x >= xo)
{
if (x <= xe)
{
if (y >= yo)
{
if (y <= ye)
{
return true;
}
}
}
}
return false; -
Karma
félisten
válasz
trisztan94 #4280 üzenetére
Az megvan ugye, hogy az előző kódod pont ugyanez?
Persze ha a smokeX egész szám, akkor egynél kisebb számot kivonogatva mindig ugyanazt a számot kapod.
Szerk.: Tévedtem, nem ugyanaz, mert összeadás helyett szorzást írtál az előbb.
-
fatal`
titán
válasz
trisztan94 #4278 üzenetére
LibGDX-et sajnos még életemben nem láttam, max pár percre valamelyik tutorialt, így ezt nem tudom megmondani.
AndEngineben ehhez ráadásul külön osztály van, ami egyszerűsíti a dolgokat, de az is azt csinálja, amit írtam.
-
trisztan94
őstag
-
fatal`
titán
válasz
trisztan94 #4276 üzenetére
Két update ciklus közötti időt felszorzod valamilyen számmal (hogy normális sebessége legyen) és ennyivel arrébbtolod minden updateciklusban a felhőt, egészen addig, amíg el nem éri azt a pontot, ahova tolni akartad.
-
trisztan94
őstag
Azt hogy tudom megoldani, hogy egy textúra (jelen esetben egy felhő) kb 1 perc alatt a képernyő egyik oldaláról "átrepüljön" a képernyő másik oldalára, természetes mozgással? (Tehát ne "ugrálja" át a pixeleket) És mivel ugye az lesz utoljára draw-olva, lehessen rajta átkattintani, mert átlátszó lenne?
Köszönöm!
-
trisztan94
őstag
válasz
Superhun #4274 üzenetére
Nyomtam, nem segített. Újraindítottam a gépet, és lám, no problem. Néha tud érdekes dolgokat művelni ez a napfogyatkozás
Más:
Libgdx problémába ütköztem. Ugye egy aknakeresőt készítek, egy kész kód alapján, csak nagyon sok mindent módosítok rajta. (minesweeper-gdx google első találat)
Az input handling-gel gyűlt meg a bajom.
Van ez a metódusom:
if (in.justTouched()) {
int x = in.getX();
int y = H - in.getY();
if (isPaused) {
if (yesBox.contains(x, y)) {
Gdx.app.exit();
}
else if (noBox.contains(x, y)) {
isPaused = false;
}
}
else if (smileBox.contains(x, y)) {
MineFinder.Log.debug("restart touched");
clearGame();
}Az "in" változó korábban van deklarálva:
Input in = Gdx.app.getInput();Nos, ugye a smileBox-ra ha rányomnak, akkor újraindul a gém. A smileBox koordinátái: 610, 590.
Többször is rákattintottam, logoltam az x és az y koordinátát, jól kalkulálja ki, ilyenek jöttek ki: 600-600, 587, 612, stb, tehát nagyon közeliek, sőt, volt ami pont annyi volt, mégsem fogadja el, hogy rákattintottam.
Ez miért lehet? Ha gondoljátok, és ráértek, szívesen elküldöm a teljes forráskódot, (összesen kb ~600 sor) de azt privátban.
Köszönöm!
Szerk:
ja igen, a yesbox és a nobox-ra bezzeg elfogadja a kattintást, szóval végtelenül tanácstalan vagyok
-
válasz
trisztan94 #4273 üzenetére
Nyomj egy Clean-t szerintem a projectre, hátha segít.
-
SirRasor
addikt
EDIT: semmi-semmi, már világos
Nah megyek folytatom a következő leckét. Már csak 12+e nap és profi leszek!
-
fatal`
titán
válasz
SirRasor #4269 üzenetére
"Szimpla változóknál működik is. Persze nem érteni kell, hanem megtanulni
"
Csak primitív típusoknál nem kell objektumot létrehozni, minden más esetben nullreferenceexceptiont fog dogni.
Minek hozna létre 32 darab kártyát? Az is lehet, hogy egy másik tömböt fogsz értékül adni az egésznek. Vagy éppen már "kész elemekkel" pakolod tele. Mindkét esetben teljesen feleslegesen pazarolná a cpu-t és a memóriát is.
-
SirRasor
addikt
Hmm hát igen, hiába haladok sorba, ez kimaradt a tutorialból
Thx, ezzel már működik
Mondjuk igazából nem értem, hogy miért kell így, mert a tömblétrehozáskor megmondtam neki, hogy MI lesz benne és MENNYI. Szimpla változóknál működik is. Persze nem érteni kell, hanem megtanulni
-
SirRasor
addikt
Hoi!
Azt hittem elég jól haladok, de most elemi hibába ütköztem
kártya tutorial; teljesen más a gondolatmenetem, tehát a megoldással össze se tudom hasonlítani. Adott egy szimpla tesztprogram. Csináltam hozzá egy card classot és ha a főben létrehozok 1 kártyát a card osztályból, akkor minden jó. Csináljunk paklit: 32 elemes tömb-re cseréltem a változót, és ilyet dob:
Nem értem mi az a null poineres cucc. A card konstruktorjában deklaráltam mindent (meg nyilván akkor 1 példánnyal sem működne). Vagy a tömböt használom rosszul? Azt hittem a new paranccsal a card konstruktorja meghívódik és így mind a 32 el is készül.
-
modder
aktív tag
válasz
trisztan94 #4265 üzenetére
új projekt from source. existing csak akkor működik, ha már van .project fájl a könyvtárban
-
trisztan94
őstag
Sziasztok!
Google Code-ról checkout-oltam egy projektet.(minesweeper-gdx) Hogyan tudom Eclipse-be importálni a projektet?
Csináltam egy új workspace-t, rámentem a file->import->general->import existing projects into workspace. Kiválasztottam a mappát ahová lementettem, de semmi sem jelenik meg
Ötlet?
-
modder
aktív tag
válasz
pakriksz #4263 üzenetére
http://en.wikipedia.org/wiki/Public-key_infrastructure
Mi az a cacerts file:
http://docs.acl.com/ax/300/index.jsp?topic=/com.acl.ax.admin.help/system_administration/t_importing_certificates_into_the_java_cacerts_file.htmlHa a java SSL kilensed a default cacerts truststore-t használja, és olyan szerverrel kommunikálsz, ami self-signed certificate-et vagy olyan használ, aminek az aláírója nincsen benne a cacerts fileban, akkor nem tudja hitelesíteni a szervert.
-
pakriksz
őstag
-
pakriksz
őstag
köszi a válaszokat, ezt a dolgot kicsit félretettem.
Van egy nagyobb probléma, vagyis kettő. A javas servletem, és ez egy wines gépen tökéletesen fut. Egy x86-os linuxos gépen is, OpenJDK7-el, egy ARM-os linuxon szintén openJDK-el, viszont SSL-es smtp-n keresztüli mailküldésnél elszáll ezzel: javax.net.ssl.SSLException: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Guglin rákeresve valami default keystore-ról írnak, meg hogy hozzam létre... de lila gőzöm nincs arról hogy mi a fene ez a keystore és hol van. Eddig ilyesmi soha nem kellett, csak akkor ha szerverként akartam használni a programomat (ott inkább lemondtam az SSL-ről, mert annyira nem fontos), de most kliensként is ezzel szórakozik...
Ugyan ilyen leosztásban a servlet x86-os gépeken úgy működik ahogy kell (ha nem megfelelő requestet kap egyszerűen csöndben, van ha megfelelőt akkor válaszol), az ARM-os gépen pedig 500-as üzenetet "server error" dob az alkalmazásszerver mindenre, bár lehet hogy ez összefügg a fenti dologgal, mert a requestre a válasz SSL-en menne.
-
Karma
félisten
válasz
pakriksz #4254 üzenetére
Ja egyébként erre visszatérve: jogos észrevétel, a TeeOutputStream valószínűleg praktikusabb, mert akkor csak egyszer kell írnod valahol a forrásnál, mintha simán a fájlt hergelnéd.
Ha InputStreamet készítesz a forrásoldalon, akkor tényleg másolni kell, a streamek nem folynak át maguktól egymásba
Viszont a Commons IO-ban erre is vannak statikus metódusok (IOUtils.copy, IOUtils.copyLarge), úgyhogy nem muszáj saját IO logikát írni.
-
pakriksz
őstag
Még egy kérdés: egyszerű servletnél a service metódus hogy viselkedik? Ha több request fut be egy időben, akkor több szálon fut le egy service metódus, vagy cacheli a requestet, és egymás után futtatja le rájuk?
-
pakriksz
őstag
Egy olyan dolgot szeretnék egy javas programban, hogy egy outputstreamet kiírok egy helyi fájlba, ÉS egyidejűleg ezt az outputstreamet valahogy inputstreammé konvertálva egy másik metódusnak is küldöm (ami feltölti egy tárhelyre). Van erre valami kész megoldás, vagy bytebufferes másolgatás lesz belőle?
-
MrSealRD
veterán
Akkor most megyek és eltüzelem az eddigi szakirodalmakat amiben a StringBuildert erőltették...
-
WonderCSabo
félisten
válasz
MrSealRD #4245 üzenetére
Tévedsz, Javában a string literálok nem úgy műkődnek, mint az egyéb sima objektumok. Ezek egy String poolba kerülnek. Amikor létrehozol egy új string literált, akkor a JVM megnézi, hogy benne van-e már az a string a poolban, és ha igen, akkor nem hoz létre új objektumot, hanem egyszerűen referál a már meglévőre. A garbage collector ezeket a stringeket nem is fogja bántani csak úgy, különben elveszik az újrafelhasználás lehetősége.
A StringBuildert pedig nem kell feltétlenül használni, mert egyrészt sokkal természetesebb a plusz operátor, másrészt úgyis StringBuilderre fordul a + operátor...
-
válasz
MrSealRD #4245 üzenetére
sb.replace(0,sb.length,"x")
Ekkor is létrehozol egy "x" (vagy akármi más) tartalmú String objektumot. Tény, hogy utána a régi literált nem kell GC-zni, mert egyszerűen felülcsapja az új literállal a karaktertömbjét, de ha picit utánaolvasol annak, hogy mi az a PermGen, akkor rájössz, hogy alapesetben a régi Stringet sem fogja megenni a GC. Annyit értél el az egésszel, hogy rondább lett a kód.
-
MrSealRD
veterán
(#4241) Superhun : sb.replace(0,sb.length,"x"); Tudom nem szép....
(#4243) modder : Nyilván mindenre azt lehet mondani, hogy "attól függ..."
Én alapvetően erre a helyzetre akartam reagálni.:
String s = "egy";
...
s = "ketto"; // innentől kezdve ott ül a memóriában elérhetetlenül, hogy "egy" ami majd egyszer ki lesz takarítva.
Amíg ez egyszer van addig oké nem nagy érvágás...de alkalmazás szinten már halmozódhat a dolog. Nem törvényszerű nyilván...A példa amit írtál az kicsit erőltetett...egy szóval nem mondtam, hogy String helyett általánosan StringBuilder-t kell használni...pláne nem olyan helyzetben amit vázoltál. Ha tudom, hogy lesz egy szövegem ami nem fog megváltozni akkor persze String, de ha valamivel "műveleteket" szeretnék végezni akkor StringBuilder.
-
WonderCSabo
félisten
StringBuffer a thread-safe, és pont ezért a fordító alapból concat() helyett mindig StringBuildert használ.
Egyébként jól mondod. Kizárólag cikluson belül érdemes StringBuilderrel játszadozni, a többi helyen úgy is helyesen elintézi helyetted a fordító. De nem azért mert nem ismeri fel. Vegyük a kövi kódot:
String s = "";
for (int i = 0; i < 100; ++i) {
s += Integer.toString(i);
}Ebből a következőt fogja generálni maga a fordító a bytecodeban:
String s = "";
for (int i = 0; i < 100; ++i) {
StringBuilder b = new StringBuilder(s);
b.append(Integer.toString(i));
s = b.toString();
}Látható, hogy rosszabbul járunk, mintha simán a concat()-ot használtuk volna.
-
modder
aktív tag
válasz
MrSealRD #4239 üzenetére
Esküszöm, nem értem, mit akarsz mondani Superhun válaszára.
De pár tény:
1) A JVM k*rva okos és tele van optimalizációval. Memória allokációnak alig van költsége, persze sok kis objektum lassíthatja a GC-t. Megoldás: arra az objektumra ne veszítsük el a referenciát, amit újra fogunk használni. Ennek megkönnyítésére szoktak memory poolokat implementálni Javában úgy, ahogy C++-ban is. De ezeket elég speckó esetekben szokták használni, amikor a sebesség van mindenek felett.
2) literálokra referencia mindig ugyanarra a memóriaterületre mutat. for() { String s = "nyorr"; } nem fog új objektumot létrehozni minden egyes iterációban
3) Olyan mikro-optimalizációról beszélünk, aminél egy adatbázis lekérdezés nagyságrendekkel lassabb: semmi értelme gondolkodni rajtaCiklusban String összefűzést StringBuilderrel, mert azt a compiler tudtommal nem ismeri fel, ellenben a "egy" + "ketto" + $valami.toString; kóddal, amit StringBuilderre cserél (vagy StringBuffer, most hirtelen nem emlékszem, melyik a thread-safe)
Nem látom értelmét String helyett StringBufferben tárolni a stringet.
Szerk.:
Közben rájöttem, mit akartál mondani, de elég veszélyes. Ha Stringbuilderben tárolod a stringeket, akkor a StringBuilder mutable, és olyan helyen is megváltoztathatod a String értékét, ahol nem akarod. pl.:StringBuilder strTime = getTimeInString();
page1.setLastVisited(strTime);majd később:
StringBuilder strTime = getTimeInString();
page2.setLastVisited(strTime);no shit, lastVisited szintén frissült page1-re, mert ugyanaz az objektum. Nem hiába találták ki, hogy a String immutable.
-
raggg
senior tag
válasz
RaPiDsHaRe #4203 üzenetére
Window/Preferences, aztán Java/Installed JRE.
-
TBG
senior tag
válasz
MrSealRD #4239 üzenetére
Ez csak abban az esetben jelenthet gondot, ha több tízezres/százezres nagyságrendben "kallódnak" az objektumok. Ergó, a felhasználástól is függ, hogy az ember hogyan hegyezi ki a kódot. Illetve érdemes-e nagyon kihegyzeni. Mindenesetre ökölszabály, hogy ha tökmind1, akkor is a szebb, takarékosabb megoldást használjuk.
-
MrSealRD
veterán
(#4235) Karma : Ezt jó tudni. Kösz.
(#4236) Superhun : Oké, de amíg a másik String referencia nélkül ott kallódik memóriában valahol addig egy másik területen újabb memória kerül lefoglalásra az új String esetében. A StringBuilder-nél pedig marad ahol van. Ha szükséges bővíti, ha nem akkor marad amennyi volt. Ez valahogy takarékosabbnak tűnik nekem...Rosszul gondolom?
-
raggg
senior tag
válasz
trisztan94 #4230 üzenetére
C#-ban is immutable a string.
-
válasz
MrSealRD #4234 üzenetére
A példaként hozott esetben a StringBuilder használata teljesen indokolatlan, hiszen nem karakterlánc hozzáfűzés/zsugorítás történt, hanem egy teljes csere. StringBuilder használata akkor javasolt és szép, ha ciklusban használod a String += operátorát, vagy ha 2-nél több Stringet akarsz összefűzni.
-
-
Jim-Y
veterán
válasz
SirRasor #4228 üzenetére
Lehet hülyeséget írok, de ebben az esetben tényleg nem változtatod meg a string literál értékét, az immutable marad, ellenben a gyumolcs változó referenciáját ráállítod a string class egy objektumára ("barack"), így a gyumolcs ezentúl a barack string literálra fog mutatni a memóriában, és nem a körtére. A GC meg gondolom végzi a dolgát ezután a "körte"-n.
"Now we find that the value displayed by the myString variable has changed. We have defined immutable objects as being unable to change in value, so what is happening? Let's extend the example again to watch the myString variable closer.
String myString = new String( "old String" );
String myCache = myString;
System.out.println( "equal: " + myString.equals( myCache ) );
System.out.println( "same: " + ( myString == myCache ) );
myString = "not " + myString;
System.out.println( "equal: " + myString.equals( myCache ) );
System.out.println( "same: " + ( myString == myCache ) );
The result from executing this is:
equal: true
same: true
equal: false
same: false
What this shows is that variable myString is referencing a new instance of the String class. The contents of the object didn't change; we discarded the instance and changed our reference to a new one with new contents." -
SirRasor
addikt
Üdv ismét. Tanulom nagyban az alapokat és belefutottam egy ilyenbe:
String gyumolcs = "körte";
gyumolcs = "barack";Így a gyümölcsöm barack lesz, nem pedig körte. De a hivatalos dokumentáció szerint nem lehet megváltoztatni a gyumolcs értékét, az első hozzárendelés után:
"Enclosing your character string within double quotes will automatically create a new String object; for example, String s = "this is a string";. String objects are immutable, which means that once created, their values cannot be changed"
WTF? Vagy mire gondolnak?
-
trisztan94
őstag
válasz
PandaMonium #4226 üzenetére
Köszönöm mindenkinek az ötleteket, szerintem sem lesz vele gond, de azért ha bármi gond lenne ordítok
-
PandaMonium
őstag
válasz
trisztan94 #4221 üzenetére
Egyébként, hogy témára térjünk, ami fontos lehet: Bizonyos számú aknát (ez akár lehet tartomány is, pl. 15-20 között) helyezz el csupán a képernyőn, tehát véletlenül se legyen majdnem mindenhol akna. Az aknák számát esetleg nehézségi szintenként (ha van ilyen) kedved szerint növelheted. Egy sima random funkció elég ide, de ha úgy érzed, hogy szeretnél valami újat tanulni próbálj ki valami zajt, pl. perlin noise vagy simplex noise. Összességében az egész projekt nem bonyolult ha nem akarod cifrázni, egy délután alatt (inkább 2-3 óra alatt) simán megoldható. Miben tervezed amúgy kivitelezni a user interface-t? Sima konzolba printelés, swing, vagy android?
-
Karma
félisten
Az még talán nem is olyan nehéz, bár nem könnyű pontozni a full randomhoz képest az alternatív megoldásokat. Szerk.: Az egy jó ötlet, ami előttem elhangzott: csak az első kattintás után kell lerakni őket, hadd higgye azt a játékos, hogy szerencséje volt
Ott van még, és tényleg bejárási algoritmust igényel annak a kezelése, hogy ha egy nullás mezőnek minden szomszédját fel akarja fedni - hasonlóan például a Windows beépített aknakeresőjéhez. De semmi durva.
Off vonalra visszatérve: sok merész, valóságtól elrugaszkodott dolgot mondanak az iskolában. Ez a fajta folyamatábra rajzolás iskolapéldája ennek (haha, szóvicc). Egyetemen már közelítenek a dolgok, de azért az első igazi munkafeladat, éles helyzetben mindig hideg zuhanyként jön.
Nem azt mondom, hogy nincs helye a folyamatábrának. De azért egy ilyen programnak fejben is el kell férnie
Ritkán ér rá az ember két és félszer annyi munkát végezni ugyanannyi eredményért, a munkáltatók meg még kevésbé hajlandóak kifizetni.
-
Ragnar95
félisten
Ráadásul sok aknakereső program dinamikusan rakja le az aknákat vagyis az adott helyzethez alkalmazkodva, tehát csak akkor rakja le őket, ha te már megérintettél egy mezőt. iOS-es Minesweeper-ben pl az elsőnek megérintett mezőn sosincs akna, bárhol is legyen az, így sokáig mivel mindig a bal felsővel kezdtem, azt hittem,h ott sosincs akna, de aztán kipróbáltam és ha máshol kezdtem, akkor időnként a bal felsőbe is rakott aknát.
Amúgy egy tényleg jó algoritmusnál arra is figyelni kéne szerintem,h mindig egyértelműen eldönthető legyen, hogy adott helyen van-e akna vagy nincs, de csomószor elakadhat benne az ember, mert tippelni kell, illetve többször találkoztam már olyannal is, amikor egy akna csak aknákkal volt határolva, így ugye azt csak akkor találhatod meg, ha utolsónak hagyod... -
modder
aktív tag
válasz
trisztan94 #4221 üzenetére
előbb algoritmust kell tudni írni, (ami MINDENKÉPP folyamatábra [struktogram])
Volt, amikor én is csináltam folyamatábrát olyan problémára, aminek nehezemre esett a megértése, de egyébként az esetek 90%-ában, kigondolsz egy algoritmust, amit egyből le is kódolsz, aztán finomítod, hogy a végén az elvárásoknak megfelelően működjön. Egyből le is tudod tesztelni, hogy működik-e.
Szóval a gyakorlatban minden problémát folyamatábrával kezdeni fasság.
Amúgy meg az aknakereső pont olyan egyszerű, mint a faék. Legalábbis generálni:
Random leteszel aknákat, majd sorba mész az aknamezőn, és minden mezőhöz (ami nem akna), rendelsz egy számot, ami azt jelzi, hogy a közvetlen szomszédai közül hány mezőn van akna. Rettentő nehéz.Ami kihívást okozhat, az az aknák eloszlása, hogy szépen csoportosan legyenek.
-
PandaMonium
őstag
válasz
trisztan94 #4221 üzenetére
Ebben van némi igazság, csak hogy ez csak akkor érne valamit ha az algoritmust (vagy pszeudokódot) is te találnád ki, vezetnéd le magadnak. Abból, hogy csak gépelsz nem tanulsz semmit, tetszik tudni a programozás lényege a problémamegoldás, nem a billentyűzetkoptatás.
-
trisztan94
őstag
Nekünk pedig 4 éven keresztül azt tanították suliban, hogy ahhoz, hogy valaki jó programozó legyen, előbb algoritmust kell tudni írni, (ami MINDENKÉPP folyamatábra [struktogram]) nyelvfüggetlenül, és, hogy program írás előtt írjuk azt meg, utána kezdünk csak bele a tényleges kódolásba.
Keresgéltem, találtam is párat, arra voltam kíváncsi, hogy tud-e valaki azokon kívül valami jót
-
fatal`
titán
válasz
trisztan94 #4210 üzenetére
"szerk: javitom magam: csak php-ban van ertelme (+ olyan nyelvekben ahhol vannak asszociativ tombok)"
Meg C++-ban, ahol olyan operátort rendelsz hozzá az osztályodhoz, amilyet akarsz.
Meg funkcionális nyelveknél (vagy C#-ban lambda kifejezéseknél).
-
Karma
félisten
válasz
trisztan94 #4214 üzenetére
Hát, nem igazán. Az a pszeudokód, legyen szöveges vagy folyamatábra, már a tényleges programozói munka része, a kész program terve. Nyomokban algoritmusokat is tartalmaz.
Az előttem szólóra rákontrázva: szerintem nemhogy a "jó" programozóvá váláshoz kell ez, hanem egyáltalán a programozáshoz. Egy programnyelvre leírni a más által fejben végigvitt dolgokat nem programozás, csak kódolás.
Az eredeti kérdésre visszatérve: Google-ben próbáltad már? Sourceforge-on? GitHubon?
Persze az így "talált" kódok licencét célszerű figyelembe venni. -
Mukorka
addikt
válasz
trisztan94 #4214 üzenetére
Pedig az emberré (jó programozóvá) váláshoz érdemes kigondolni ilyen dolgokat. Az sokkal izgibb mint működésre bírni.
-
trisztan94
őstag
Egy felturbózott aknakeresőt akarok csinálni, és nagyon nem szeretném kigondolni, hogy mi hogy van, mit kell ellenőrizni, stb, ezért kellene egy algoritmus.
Na most lehet, hogy én vagyok a hülye, de egy algoritmus az nem az, ahol programnyelv-függetlenül le van írva egy program működése (struktogram pl) amit aztán lekódol a programozó?
-
Karma
félisten
válasz
trisztan94 #4212 üzenetére
Mármint aknakereső mire? Generálásra, a játék levezetésére, vagy a megfejtésre?
Ezek közül egyikhez sincs konkrét algoritmus, vagy nem algoritmusnak hívják...
Szóval mi kéne?
-
trisztan94
őstag
Tud valaki egy jó aknakereső algoritmust?
-
alratar
addikt
Aham.
Köszönöm mindenkinek a választ! -
trisztan94
őstag
válasz
alratar #4207 üzenetére
A <= es a >= logikai operatorok, jelentesuk: kisebb egyenlo, nagyobb egyenlo.
a => hozzafuzesre valo, amit irtal:
x => 10 azt jelenti, hogy x legyen egyenlo 10-el. Altalaban asszociativ tombnel hasznaljak leginkabb php-ban, pl: elem => 15 es akkor ugy hivatkozol ra, hogy array[elem] -> ennel az erteke 15
szerk: javitom magam: csak php-ban van ertelme (+ olyan nyelvekben ahhol vannak asszociativ tombok)
-
alratar
addikt
Mi a különbség => és >= között?
Ugyanis mikor ezt írtam:
x >= 10 && x <= 20
Semmi gond.Viszont itt:
x => 10 && x <=20
The operator && is undefined for the argument type(s) int, boolean -
válasz
RaPiDsHaRe #4203 üzenetére
Window -> Preferencies -> és keress rá a jre runtime-ra
-
RaPiDsHaRe
aktív tag
válasz
WonderCSabo #4204 üzenetére
Ha futtatni akarom a java-t, akkor nem tudja elindítani, mivel nem találja a java-t.
-
WonderCSabo
félisten
válasz
RaPiDsHaRe #4203 üzenetére
Miért, panaszkodott, hogy nem találja? Mert ha nem, akkor nem kell bántani.
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Teljes külső kijelzővel hódítana a Flip7, ami kapott egy kistestvért is
- Érkezik az OpenAI saját böngészője
- gban: Ingyen kellene, de tegnapra
- Automobilista 2
- Szünetmentes tápegységek (UPS)
- Lakáshitel, lakásvásárlás
- Építő/felújító topik
- PROHARDVER! feedback: bugok, problémák, ötletek
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Léghűtés topik
- További aktív témák...
- BESZÁMÍTÁS! ÚJ AMD Ryzen 5600X 5700X 5800X 5900X processzor 3 év garancia 27% áfa termékbeszámítás
- BESZÁMÍTÁS! ÚJ AMD Ryzen 8500G / 8600G AMD Ryzen 7 8700G / 7800X3D processzor 3 év garancia 27% áfa
- Remek áron Lenovo ThinkPad x395 AMD Ryzen 7 pro-3700U/16GB/256 SSD/AMD Radeon Vega 10 Grap/FHD/IPS
- MacBook Air M1 8/256 92% Aksi szép állapotban
- iPhone 12 Pro Max 128GB Újszerű Független/1-3 hónap gar./Akku 86%/p4360
- Konzol felvásárlás!! Playstation 5, Playstation 5 Pro
- Bomba ár! Dell Latitude E6400 - Intel P8400 I 3GB I 160GB I 14,1" I Intel VGA I Garancia!
- Samsung Galaxy A53 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- Asus E510M 128GB SSD, 4GB RAM, 1 Év Garanciával
- Bomba ár! Dell Latitude E7250 - i5-5GEN I 8GB I 256SSD I 12,5" HD I HDMI I Cam I W10 I Garancia!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest