- A hagyományos (nem okos-) telefonok jelene és jövője
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Fotók, videók mobillal
- iPhone topik
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Android alkalmazások - szoftver kibeszélő topik
- VoLTE/VoWiFi
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Szívós, szép és kitartó az új OnePlus óra
Új hozzászólás Aktív témák
-
WonderCSabo
félisten
válasz
norbert1998 #7486 üzenetére
Csak egy apró tanács: ne nevezd el a tömb hosszút jelentő változót "i"-nek. Az "i"-t szinte mindig ciklusváltozónak szoktuk felhasználni.
-
D4nte
csendes tag
válasz
norbert1998 #7482 üzenetére
Az lenne a legjobb, ha magadtól rájönnél mi a hiba (ha az írás óta ez megtörtént az nagyszerű). Melléteszed a keresés Pszeudokódját segítségül esetleg (de ne görgesd le mert ott a java-s is!), és úgy már mindenképpen menni fog a javítás.
-
Szmeby
tag
válasz
norbert1998 #7482 üzenetére
A j egy nemnegatív szám. A k megy j+1-től j-ig, és növekszik. Csodálkozol, hogy nem csinál semmit?
-
WonderCSabo
félisten
válasz
norbert1998 #7442 üzenetére
Tudom, hogy csak a konzolra írtok, nem is baj az. Csak a formázást sztem nem kell túlzásba venni.
A keresést már nem néztem, mert az extra hiánya miatt ugye az egész kód piros volt. A beolvasás jó.
-
floatr
veterán
válasz
norbert1998 #7440 üzenetére
Mondjuk ezt az egészet én sem értem, hogy miért kell ezt így. Amikor gimis voltam az előző évezredben pascal-ban gyártottunk max 100 soros kódot, de ott már mindenféle algoritmus volt, amikell az alapokhoz. Jó hogy Javat használtok, de nem értem, hogy akkor először miért nem tanítják meg nektek azokat az alapokat, amivel nem csak gányoltok, hanem kezelhető minőségű kódot tudtok csinálni.
-
WonderCSabo
félisten
válasz
norbert1998 #7440 üzenetére
ha format left vagy right-tal kiiratod, akkor sincs elcsúszva a felső sor?
Nem. Mivel nem mellékelted azt a csomagot, ezért kénytelen voltam törölni az extra csomagban lévő hívásokat. De ezek szerint a kiírás rossz csak. Én nem sokat foglalkoznék egy konzolra való kiírás formázásával...
-
WonderCSabo
félisten
válasz
norbert1998 #7437 üzenetére
Lefuttattam a progidat, nálam oké, nem látok semmilyen extra karaktert.
-
Szmeby
tag
válasz
norbert1998 #7435 üzenetére
Szia!
Az ember maximum 7 dolgot tud egyszerre fejben tartani. A program komplexitása messze meghaladja ezt a számot. Vagyis az időd nagy részét arra pazarlod, hogy a fejedből kieső információt folyamatosan töltöd vissza, miközben ettől függetlenül hibát is keresel. Ne csodálkozz, ha nem megy. Senkinek sem menne.
Az oktatás célja új tudásanyag átadása, és nem a szívatás. Ha tömbök használatát kell gyakorolni, akkor gyakoroljátok, de ezt nem egy átláthatatlan programon kell csinálni, mert az már nem a tömbök használata lesz. Ezzel csak arra akarok célozni, hogy bizonyos komplexitás elérésekor meg KELL tanulni a kód kisebb egységekre bontásának módjait. Különben az energia egyre nagyobb részét fogja felemészteni az, hogy próbálod megérteni, mi történik, és egyre kevesebb figyelem jut a tényleges gyakorlásra.
A nehezebb mód az, hogy tovább görcsölsz rajta, és majd egyszer sikerül rátalálni az egyik hibára. Sajnos hátra van még a többi hiba is. Mindig van egy újabb hiba.
Ezen valamelyest javíthatsz, ha elkezded debugolni: teszel egy breakpoint-ot a problémás rész elé, és debug módban indítod a programot. Majd szépen lassan, soronként egyesével lépkedve, a változók értékeit folyamatosan ellenőrizve megnézed, mit is a csinál a gép.A könnyebb (és melósabb) mód, ha legalább megtanulsz metódust készíteni.
Első lépés:
public class Beadando {
public static void main(String[] args) {
new Beadando.doit();
}
// ez egy példány szintű metódus, nincs visszatérési értéke, nincs paramétere
public void doit() {
// a main helyett ide kerül minden
}
}A static main metódus a program belépési pontja, ugyan a Beadando osztályban van (mert valahova tenni kell), de nem sok köze van hozzá. Ami a main-ben történik, hogy az osztályból készül egy példány, és azonnal ráhívsz annak egy példány szintű (nem static) metódusára. Én doit-nek neveztem, te úgy nevezed, ahogy akarod. Minden más marad a régiben.
A következő lépés lehetne mondjuk a Beadando által gyakran használt változókat kiemelni, field-et csinálni belőle. Ha nem lenne egy Beadando példányod, ezt nem tehetnéd meg ilyen szépen. Pl. én kiemelném az adatot tartalmazó tömböket, sőt a színeket tartalmazó konstansokat is:
public class Beadando {
private static final String RESET = "\u001B[0m";
private static final String RED = "\u001B[31m";
private static final String BLUE = "\u001B[34m";
private static final String CYAN = "\u001B[36m";
private int n=500;
private String [] nev =new String [n];
private String [] gazdnev =new String [n];
private String [] tomeg =new String [n];
private String [] kor =new String [n];
public static void main(String[] args) {
new Beadando().doit();
}
public void doit() {
// ide kerül minden
}
}
Értelemszerűen ezeket már nem kell belül létrehoznod, elég hivatkozni rájuk. Javaban a konstans static és final módosítóval is rendelkezik, a példány szintű field-eknek nem kell static-nak lenniük. Nem is ajánlott.new Beadando()
Ez készít egy példányt az osztályból. Mivel az osztálynak még nincs látható(!) konstruktora, az alapértelmezett konstruktor (aminek nincs paramétere) használható a példányosításkor.A tömb mérete nem túl szép ott a field-ek között, lehetne akár konstruktor argumentum. A konstruktor tekinthető egy spéci metódusak is, máshogy is néz ki. Ő csak egyszer hajtódik végre, a példány létrehozásakor. A tömböket is elég ilyenkor lefoglalni:
public class Beadando {
private static final String RESET = "\u001B[0m";
private static final String RED = "\u001B[31m";
private static final String BLUE = "\u001B[34m";
private static final String CYAN = "\u001B[36m";
private String [] nev;
private String [] gazdnev;
private String [] tomeg;
private String [] kor;
private int n;
public static void main(String[] args) {
// new Beadando(500).doit();
// vagy akár így is lehet példányosítani és ráhívni az egyik metódusára:
Beadando beadando = new Beadando(500);
beadando.doit();
}
// ez a konstruktor, van egy int argumentuma, ebben lesz majd az 500
public Beadando(int n) {
this.nev =new String [n];
this.gazdnev =new String [n];
this.tomeg =new String [n];
this.kor =new String [n];
this.n = n; // ha esetleg még valahol hivatkoznál az n-re, a this.n-nel ezt megteheted
}
public void doit() {
// ide kerül minden
}
}A field-ekre a this. prefix-szel hivatkozhatsz, de elhagyható, ha a neve nem ütközik más változó nevével.
Első blikkre egész szépen kiszervezhetők metódusokba a case blokkokban lévő cuccok. Kezdd a belül lévő legkisebbekkel. Kommentekkel még el is nevezted őket, szinte adja magát.
Pl. ebből:
// ...
public void doit() {
// ... a doit elején lévő cuccok
case 3 : { //főmenü 1-es menüpont->2-es menüpont
String kereses=extra.Console.readLine("Milyen korút keressünk?");
db=0;
i=0;
while(kor[i++]!=null){
}
for (int g=0;g<i;g++){
if (kereses.equals(kor [g])){
torvalogatas[db]=g;
db++;
}
}
break;
}
// ... a doit végén lévő cuccok
}
}Ez lesz:
// ...
public void doit() {
// ... a doit elején lévő cuccok
case 3 : { //főmenü 1-es menüpont->2-es menüpont
db = keresKorra(torvalogatas);
break;
}
// ... a doit végén lévő cuccok
}
// ez egy új metódus, az osztályon belül, de a doit metóduson kívül
private int keresKorra(int[] torvalogatas)
String kereses=extra.Console.readLine("Milyen korút keressünk?");
int db=0; // Figyelem! Ez a db, nem a metóduson kívül található db.
int i=0; // Ahogy ennek az i-nek sincs semmi köze a külső i-hez. Ezek csak itt belül léteznek.
while(kor[i++]!=null){
}
for (int g=0;g<i;g++){
if (kereses.equals(kor [g])){
torvalogatas[db]=g;
db++;
}
}
return db; // Itt a metódus futása megszakad és visszatér a return mögött található változó értékével.
}
}A metódusokat tetszőleges sorba rendezheted, azokat, amelyek hasonló dolgot csinálnak, egységesítheted. Amelyek pedig ugyanazt csinálják, több helyen újra felhasználhatod, eltérő paramétereket adva neki.
private int keresKorra(int[] torvalogatas)
Az első elem egy láthatóságot szabályozó módosító, a private csak az osztályon belül látható, a public bárhol, a többi most nem érdekes, jelen esetben teljesen mindegy, melyiket használod.
A következő a metódus visszatérési értékének típusa. Sajnos max. csak 1 db visszatérési értéke lehet egy metódusnak, ez most egy int (a metódus törzsében található return utasítással adod majd vissza a tényleges értéket). Ha a metódus nem kell, hogy visszaadjon értéket, akkor a típus a void lesz (a return pedig elhagyható).
Aztán jön a metódus neve, tetszőleges, bár a szokásos névkonvenciók rá is vonatkoznak, kezdődjön kisbetűvel, és az ékezetes betűket inkább hanyagold.
A zárójelek között pedig vesszővel elválasztva felsorolod a metódus paramétereit (típusa és a metóduson belül használt neve).
Ha a metódusban kivételt is dobunk és azt nem kapjuk el, akkor a ) után szerepel a throws kulcsszó és a kivételek vesszővel elválasztva, pl.: void metodusNeve(String param1, int param2) throws IOException { }. A fordító majd úgyis reklamál, ha ilyet kell csinálnod.A return a metódusban bárhova tehető, de ha a vezérlés elér hozzá, - akár egy ciklus kellős közepén is vagy - a metódus futása megszakad és visszatér az adott változó aktuális értékével. Ez alól csak a finally blokk kivétel, mert az abban lévő cucc a metódus elhagyása előtt még gyorsan megfut.
A metódus felhívása így történik:
db = keresKorra(torvalogatas);
Metódus neve, és zárójelben vesszővel elválasztva felsorolod az átadni kívánt paramétereket. Ha a metódus valamilyen értékkel is visszatér (nem void), akkor azt az értéket el is tárolhatod egy változóban, most a db változóba tettük egy sima értékadás keretében. Persze ha kint nincs szükséged a visszaadott értékre, nem kell azt mindenáron változóba tenni, az értékadás elhagyható.A metódus törzse egy külön világ, itt csak a field-eket és a beadott paramétereket látod, ezekkel dolgozhatsz.
A paraméterek érték szerint adódnak át. Ez primitív típusoknál (int, char, boolean, stb.) egyértelmű, az érték átadásra kerül, de a metódusban bármit is csinálsz vele, az a metóduson kívül nem fog érvényre jutni. Immutable típusoknál (pl. String) sincs veszély, mert azok úgy lettek megalkotva, hogy bármit is csinálsz vele, magán az objektum állapotán nem változtat, inkább új objektumot hoz létre.
Viszont van minden más (pl. a fentebb említett Dog osztály, vagy éppen a tömbök), amelyek akár több értéket is képviselhetnek. Ezért aztán csak azok memóriacíme kerül értékként átadásra, így ha ezek tartalmát módosítod a metóduson belül, a módosításod a metóduson kívül is érvényre jut. Hiszen a metóduson kívül létező tömb és a metódusnak átadott tömb címe ugyanaz, ugyanazt a memóriaterületet piszkálod.
És itt jutottunk el ahhoz a csúnya megoldáshoz, amit alkalmaztam: átadtam a torvalogatas tömböt a metódusnak, pedig az csak ír bele. Nem szép dolog metóduson belül a paramétereket változtatni, normális esetben csak olvasni szabadna, de ez például egy módszer arra, hogy a metódus több dolgot is változtasson (mivel csak egy visszatérési értéke lehet, és azt a db-re elpazaroltuk).
Persze a több visszatérési értékre van más megoldás is, pl. minden visszaadandó cuccot becsomagolni egy objektumba, de egyelőre szerintem ennyi is elég.Kellemes refaktorálást. Miközben bontod szét a kódot, valószínűleg a mostani hiba okát is meg fogod találni. Ha lehet, említsd meg a tanárnak, hogy az ezersoros programod kezd átláthatatlanná válni, meséljen már az osztályokról, példányokról és metódusokról.
Ami pedig az érettségit illeti: Egy problémát meg lehet oldani jól és hatékonyan, de meg lehet oldani gányolással is. Nem kell ismerni az osztályokat, a metódusokat, de még a for ciklust sem hozzá. Csak éppen évekkel tovább tart a megoldás, és lehet hogy kapsz rá egy kettest. És egy bizonyos méret felett az ember már nem a megoldással foglalkozik, hanem a kapálózással, hogy a víz felszínén tudjon maradni. Kizárt, hogy érettségin ne kelljen ezeket az alap dolgokat használni. De tedd fel magadnak a kérdést: Könnyű érettségit akarsz? Jó munkahelyet magas fizuval? Ha igen, és a tömböket már unalomig gyakoroltad, akkor érdemes továbblépni a List-re. Annyi hasznos dolog van még a nyelvben, sose jutsz a végére.
Bár lehet, hogy feleslegesen pötyögtem... csapd fel a tankönyvet a metódusnál és hajrá.
Persze a legjobb az lenne, ha az osztályok és metódusok után egy elegáns mozdulattal telepítené mindenki a junit-ot, és TDD-ben gyakorolnátok tovább. Mennyivel könnyebb lenne az immáron jól struktúrált kódon megtalálni a hibákat. És a refaktorálás is veszélytelenebb lenne. Szép álom.
-
WonderCSabo
félisten
válasz
norbert1998 #7435 üzenetére
Töltsd fel a forrásfájlt valahova, változatlanul.
-
WonderCSabo
félisten
válasz
norbert1998 #7432 üzenetére
Metódus-t meg nem lehet máshogy hívni Javában:
pulic class Main {
public static void main(String[] args) { // a main egy metódus
}
public String masikMetodus() { // masikMetodus egy másik metódus
return null;
}
} -
WonderCSabo
félisten
válasz
norbert1998 #7432 üzenetére
A Collections-re gondolom csoportok alatt, és az nem primitív tömb, amit Te használsz, hanem modern adatszerkezetek (tárolók) gyűjteménye. A kettő nem egyelő, nem mondjuk a tömböt Collection-nek, mert nem az. PL.
Tömb:
int[] tomb = new tomb[1000]; // lefoglalok előre sokat
tomb[0] = 1;
int a = tomb[i]; // benne volt-e? mire vizsgáljak?
i > 1000 // le kell foglalni új tömböt, mert már nem férne bele az elemekCollections:
List<Integer> lista = new ArrayList<>();
lista.add(2);
lista.add(3);
lista.remove(2);// dinamikusan változik a mérete, "sosem" telik be, kivenni is lehet elemeket, a benne lévő elemek ismertek
Ez csak egy típusó Collection, van még nagyon sok.
-
WonderCSabo
félisten
válasz
norbert1998 #7428 üzenetére
Új metódusok írását se tanultátok?
Szerk: Ezek szerint nem... Mondd meg a tanárnak, hogy ilyen komplex feladat (már ha az tényleg) megoldásához biztosítsa a megfelelő eszköztárat.
-
norbert1998
nagyúr
válasz
norbert1998 #7428 üzenetére
Közelebb kerültem ismét a megoldáshoz. Mégis a beolvasással lehet valami. A legelső beolvasott tömbelem (azaz a példában az első sor Bukfenc-e) egy nem látható karakterrel rövidebb, mint a többi tömb elem(e).
A szöveg BOM nélküli UTF-8-ba van formázva, txt fájl, és ahogy fent látható, szóközök nélkül pontosvesszők választják el őket.
gygabor88: És az mi és hogy?
-
skoda12
aktív tag
válasz
norbert1998 #7428 üzenetére
Azért metódusokra szétszedheted. Nem lesz rövidebb, de így legalább kisebb-nagyobb kód blokkokat el tudsz nevezni és akkor már érthetőbb lesz a kód.
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7421 üzenetére
Értelmesebb lett volna, ha egyből egy tesztelhető kódot dobsz be (értsd: mi csak bedobjuk a fejlesztőkörnyezetbe az adott osztály(oka)t, és mehet a teszt), vagy csak a vonatkozó kódrészletet, nem csak simán bedobod ezt az óriási - ráadásul rosszul tagolt - borzalmat (mert lusták vagyunk kibogarászni ekkora kódot, ami ronda is, gyorsabb lenne lefuttatni). Ekkora mennyiségű kód tényleg mehetne pastebinre (ahol bekattintod, hogy Java-szintaxis szerint legyen kiemelve értelemszerűen). Amúgy nem véletlenül mondtuk korábban, hogy bontsd szét a kódodat több metódusra, ez így valami elképesztő ocsmány és átláthatatlan.
(#7423):
Ugyanúgy megoldhatod do-while-lal ezt a feladatot is. -
Ursache
senior tag
válasz
norbert1998 #7421 üzenetére
Legkozelebb pastebint, vagy hasonlot hasznalj, koszi.
-
PumpkinSeed
addikt
válasz
norbert1998 #7419 üzenetére
Megkerestem a kerettanterveket. Ahogy írtad szakos osztály vagytok, szóval a szakközépiskolai kerettanterveket töltöttem le. Ahogy leszűrtem te most 10-es lehetsz (2 év múlva érettségin miatt). Szóval a 10-es tantervet néztem ami két ágazatra szakosodott. Az egyik a programozó másik hálózatos, ahogy én értelmeztem. A programozói szakágon van az algoritmusok és adatszerkezetek valamilyen algoritmusleíró nyelven míg a másikon ugyan ezen a helyen a hálózati kommunikációk. Szóval nem nagyon van meghatározva. Amúgy annak idején 10-ben nekünk C++-t tanítottak, szóval elég régóta van már ez a rendszer. A lényeg az, hogy érettségin a kód működését illetve a felépítését ellenőrzik okos emberek, ugyanis emelt érettségit jobb esetben kijelölt iskolában végzed ahol hozzáértő emberek ellenőrzik. Ha korszerűbben oldod meg mint ahogy amúgy tanultad nem fognak megbuktatni.
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7419 üzenetére
És a kerettantervben mi van? Az, hogy gyakoroltatni kell a ciklusokat és a tömbök használatát is, és most épp ott tartotok? Csak mert mint előbb írtam - szerkesztettem a hsz.-t közben -, ezekre ennél SOKKAL értelmesebb és használhatóbb példákat is ki lehetne találni, hogy megértsétek a használatát, meg hogy mire jó. Nagyon nem erre, amit mutattál.
És attól még, mert gyakorlatiasabb példákat vesztek, nem lenne muszáj eltérni a kerettantervtől. Most itt az infós kerettantervet fikázzuk, de még nem említette senki, hogy pontosan mi is van benne, ami szar (nekem most nincs kedvem rákeresni) - biztos egyébként bőven van miért szidni sok tekintetben, de nem ártana némi konkrét információval felvértezve fikázni.
Amúgy most akkor hogyan is alakítgattad a kódodat, ami nem működik? És akkor most mi a gond, hogy nem írja ki az első elemet? Kicsit nekem már zagyva a leírásod.
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7416 üzenetére
"De miért a tanár a hülye, ha ez szerepel a kerettantervben? Csak nem mondhatja azt, hogy screw you és tanítaná azt, ami tényleg értelmes, aztán a hülye tanterv alapján felállított érettségin meg sorban megbukunk"
Az érettségin az ilyen C-szerű kódolást kérik számon Java-nyelven? Nagyon remélem, hogy nem. Ha meg nem, akkor a tanár hülye, hogy olyan szokásokat próbál belétek verni, amik ennél a programozási nyelvnél kifejezetten károsak, és ocsmánnyá teszik a kódot. Ha tényleg ilyet kérnek számon az érettségin is, akkor qrva nagy gáz van az ottani számonkéréssel is.Nem az van, hogy a tanár is most tanulgatja a Javát, és korábban más nyelvben programozott?
A ciklusok, tömbök gyakoroltatására létezne ezerszer értelmesebb és gyakorlatiasabb feladat is.(#7417): tehát akkor most mi is a kódod, ami nem működik?
-
dabadab
titán
válasz
norbert1998 #7414 üzenetére
"Elhiszem, de manapság mit nem bonyolítanak agyon a NAT-ban?"
Ez nem bonyolítás, hanem egy nagy kupac gőzőlgő szar. A jelek szerint a tanárnak fogalma sincs a Javaról, én a helyedben - ha érdekel a programozás - akkor elkezdenék önállóan foglalkozni az témával, mert ebből legfeljebb egy rakat kiírtandó rossz reflex lesz, rendes tudás semmiképpen sem.
-
dabadab
titán
válasz
norbert1998 #7410 üzenetére
A problema az, hogy gyakorlatilag C64 BASIC-ben programoztok. Bar persze Javaban is lehet fix meretu tomboket hasznalni meg ezersoros methodokat irni, de ezek olyan dolgok, amiket egy rendes Java programozo csak nagyon kulonleges helyzetekben alkalmaz, ezeknek mar felsobb szinteken kellene elokerulniuk, semmikeppen sem kezdoknel.
-
WonderCSabo
félisten
válasz
norbert1998 #7408 üzenetére
Ezt a megoldást a tanár ajánlotta nektek? Mert ez borzalmas. Csináljatok egy Dog nevű osztályt, annak legyen név, gazda, tömeg, kor mezői, és rögtön elég egy tömbben tárolni. (Azt mondanám, hogy List-ben, de gondolom Collections még nem volt). Meg lehetne for ciklus while helyett, azt se vettétek még?
public class Dog {
public String name, owner, age, weight; // getter setter kéne, típus lehet szám, stb.
@Override
public String toString() {
return name + " " + owner + " " + age + " " + weight;
}
}
...
Dog[] dogs = new Dogs[500];
// read
int i = 0;
Dog dog = dogs[i];
while(dog != null) {
if (dog.name.equals(input)) {
System.out.println(dog);
}
dog = dogs[++i];
}Egyébként már a beolvasásnál el lehetne menteni, hány sor volt, és akkor lehetne addig menni a null ellenőrzés helyett.
Megelőztek.
-
dabadab
titán
válasz
norbert1998 #7408 üzenetére
Ez így nagyon gáz.
Egyrészt ez a nullig keresés olyan, mintha C-ben programoznál, márpedig a Java nem C, itt vannak rendes containerek, tessék azokat rendesen használni iterátorral. Másrészt meg ahelyett, hogy csinálnál ezer tömböt (listát, akármit) csinálhatnál egyet, amibe classokat raksz, minek van név, gazdnév, tömeg meg hasonló fieldje. -
Aethelstone
addikt
válasz
norbert1998 #7349 üzenetére
Jééézus....
-
Szmeby
tag
válasz
norbert1998 #7342 üzenetére
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7342 üzenetére
Akkor valamit nagyon rosszul csinálsz. Vagy a tanárotok egy kókler, hogy nem szól rátok időben, hogy ezt soha ne csináljátok.
-
Aethelstone
addikt
válasz
norbert1998 #7342 üzenetére
Erre én is kíváncsi vagyok....
-
WonderCSabo
félisten
válasz
norbert1998 #7342 üzenetére
Ezt nehezen hiszem el. Miért?
-
dabadab
titán
válasz
norbert1998 #7336 üzenetére
Mondjuk szerintem alapból ne írj ezer soros metódusokat.
-
kispx
addikt
válasz
norbert1998 #7336 üzenetére
source menü -> format menüpontja automatikusan megformázza a kódot.
tools -> options -> editor -> formating résznél pedig beállíthatod, hogy hogyan formázzon automatikusan.
Szerk.: legközelebb
-
Oppenheimer
nagyúr
válasz
norbert1998 #7336 üzenetére
kijelölöd a sorokat és nyomsz egy tab-ot
-
válasz
norbert1998 #7334 üzenetére
-
dabadab
titán
válasz
norbert1998 #7332 üzenetére
Jezusmaria, azert akartad kiiratni az stderr-re, mert annak mas a szine?...
-
WonderCSabo
félisten
válasz
norbert1998 #7330 üzenetére
Asszem az ellen nem sokat tudsz tenni.
-
WonderCSabo
félisten
válasz
norbert1998 #7327 üzenetére
Picit utánanéztem, és a javasolt flush-nek nem sok értelme van, mivel automatikusan megtörténik a flush. Legalábbis ha println-t használsz.
Vagy Neked az volt a bajod, hogy System.out és a System.err összekeveredett?
-
norbert1998
nagyúr
válasz
norbert1998 #7327 üzenetére
Ezzel megoldottam: [link]
-
Ursache
senior tag
válasz
norbert1998 #7311 üzenetére
System.err.flush();
esetleg egy ilyet megpróbálhatsz.
szerk.:
Természetesen így:
System.err.println("TÖRLÉS MENÜ");
System.err.flush();
System.out.println("1-Egy állat törlése"); -
újraregelt
tag
válasz
norbert1998 #7315 üzenetére
Az utasításaid a leírt sorrendben hajtódnak végre, viszont ezek egy memóriában lévő területre (buffer) teszik a kiírt karaktereket. Hogy innen mikor, hogyan kerülnek a képernyőre, az egy másik történet.
Nekem is úgy rémlik, ahogy Gábor írta: futtató környezettől függ. Előfordulhat, hogy pl. az IDE átirányítja és elkapja ezeket a kimeneteket és külön szálakon intézi a bufferek ürítését. Ez már okozhatja az általad tapasztaltakat. -
skoda12
aktív tag
válasz
norbert1998 #7315 üzenetére
Ez picit bonyolultabb. Mint írtam, a standard kimenetre írandó szöveg elvileg bufferelt, azaz akkor kerül ténylegesen kiírásra, ha a buffert űrítik, pl mert megtellik, vagy lezárják a streamet vagy pl újsor karakternél. Standard errornál ez nincs. Illetve a fenti példád is más, mert az új sornál űrítik a buffert, így elvileg a sorrend adott kellene legyen.
Valószínűleg az lesz a háttérben, hogy amikor futtatod az IDE-ből a programot, akkor az IDE két külön threaden olvassa a két streamre kiírt szöveget és az nem befolyásolható, hogy ezek a threadek mikor milyen sorrendben aktiválódnak. -
skoda12
aktív tag
válasz
norbert1998 #7313 üzenetére
Bocs, benéztem, új sornál űríti a buffert.
Két különböző streamre írsz, csak egy ablakban látod, de a streamek feldolgozásának sorrendje nem garantált szvsz, pl IDEA vagy eclipse termináljában. Bevallom nem tudom, hogy garantált-e a sorrend, ha cmd-ből futtatod, de nem is nagyon használom a sysout/syserr párost, mindig valammi loggerrel mentünk fájlba kimenetet. -
skoda12
aktív tag
válasz
norbert1998 #7311 üzenetére
Sysout bufferelt, syserr nem.
-
Aethelstone
addikt
válasz
norbert1998 #7293 üzenetére
if os == windows {
Runtime.getRuntime.exec("cls");
} else if os == *nix {
Runtime.getRuntime.exec("clear");
} else {
Runtime.getRuntime.exec("akármi, ami konzolt töröl....");
}Amolyan pszeudóféleképpen
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7291 üzenetére
Jobb gomb az Output ablakban, majd Clear, vagy nyomatsz egy Ctrl+L-t...
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7289 üzenetére
A konzol/terminál tartalmát szeretnéd törölni? Mert Windows-on az a cls bepötyögésével, majd Enterrel megoldható, Linuxnál a clear kulcsszóval.
(Már ha jól értettem a kérdésedet...)Hogy kell elképzelni ezt, hogy mindent konzolon csináltok? nano, mcedit (most ezek Linux-eszközök, de mindegy), vim (bár ezt kétlem), ilyesmik használatával szerkesztitek a kódot?
(#7288) floatr:
A Java-fejlesztőknek nem a hosszú távú támogatás jár a fejében? Ez így furán hangzik. -
Sk8erPeter
nagyúr
válasz
norbert1998 #7278 üzenetére
Teljesen érthető for-ciklusnál, de én még mindig foreach-ről beszélek, gondolom majd azt is fogjátok tanulni.
-
floatr
veterán
válasz
norbert1998 #7268 üzenetére
A wildcard-os import egyszerűen bad practice. Néha gyorsabb megoldani valamit vele, de a mai IDE-k támogatják az import sorok generálását is; beírsz valamit, aztán vagy magától megtalálja, hogy mit kell beszúrni, vagy rákérdez, hogy melyiket a sok közül szeretnéd.
Viszont a break-es témában igaza volt, hogy azzal össze lehet kócolni a kódot rendesen.
(#7270) Sk8erPeter háááát... nálam a kódreview-n nem menne át
-
Sk8erPeter
nagyúr
válasz
norbert1998 #7268 üzenetére
Remélem, azért nem szól be, ha egy foreach-ciklusnál (nem sima for) adott esetben használsz breaket... néha vannak emberkék, akik kitalálnak ilyen "szabályokat", hogy legyen mivel lefoglalni magukat.
A kód olvashatóságát pedig ez például nem rontja.
-
WonderCSabo
félisten
válasz
norbert1998 #7268 üzenetére
Akkor ha bármilyen negatív dolog lenne ezzel kapcsolatban.
-
WonderCSabo
félisten
válasz
norbert1998 #7261 üzenetére
Ne viccelj, ha emiatt levonnak a megoldásodból, akkor hagyd ott azt az intézményt...
-
Ursache
senior tag
válasz
norbert1998 #7263 üzenetére
Igen.
-
Ursache
senior tag
válasz
norbert1998 #7261 üzenetére
Igen.
-
WonderCSabo
félisten
válasz
norbert1998 #7258 üzenetére
Én egyáltalán nem javaslom a wildcard (*) importokat, pont az ilyen gondok miatt. Csak azokat az osztályokat importáld, amiket ténylegesen használsz, ne egész csomagokat. [link]
-
Ursache
senior tag
válasz
norbert1998 #7258 üzenetére
Egyszerűen ne importáld az egyik packaget, hanem amikor hivatkozni szeretnél rá, akkor a teljes (minősített [fully qualified package name]) nevét használd.
Pl.: extra.Console.etc
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Mibe tegyem a megtakarításaimat?
- Hunt: Showdown
- Autós topik
- The First Berserker: Khazan
- A hagyományos (nem okos-) telefonok jelene és jövője
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Milyen belső merevlemezt vegyek?
- PlayStation 5
- Fejhallgató erősítő és DAC topik
- Milyen légkondit a lakásba?
- További aktív témák...
- Telefon felvásárlás!! Samsung Galaxy S21/Samsung Galaxy S21+/Samsung Galaxy S21 Ultra
- ÁRGARANCIA!Épített KomPhone i5 13400F 16/32/64GB RAM RTX 4060 Ti 8GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! Gigabyte A620M R5 7600 32GB DDR4 512GB SSD RTX 5060 Ti 16GB Zalman i3 NEO Enermax 650W
- ÁRCSÖKKENTÉS LG 24" full HD LED IPS monitor (HDMI, DSUB, jack) eladó
- BESZÁMÍTÁS! Gamer számítógép Asus B150M i3 6100 16GB DDR4 240GB SSD GTX 1050 Ti 4GB Sharkoon 500W
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest