Hirdetés
- Vivo X300 Pro – messzebbre lát, mint ameddig bírja
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Apple iPhone 15 Pro Max - Attack on Titan
- Samsung Galaxy A54 - türelemjáték
- Milyen okostelefont vegyek?
- Xiaomi 15T Pro - a téma nincs lezárva
- Huawei Watch GT 6 és GT 6 Pro duplateszt
- Szívós, szép és kitartó az új OnePlus óra
- Samsung Galaxy S25 Edge - a tegnap határán
- Apple iPhone 17 Pro Max – fennsík
Új hozzászólás Aktív témák
-
A jvm a -128 és +127 közötti Integereket cache-eli, hogy memóriát és cpu-t spóroljon, így ha ebben az intervallumban hozol egy példányt létre, akkor a cache-ből fogja kiszedni és nem csinál újat (kivéve, ha olyat írsz, hogy new Integer(10), akkor nem tudja a cache-t használni).
-
válasz
Arpee78
#12020
üzenetére
A tömböknek (szándékosan) nincs felülvágva a toString() metódusa, ez amit látsz, kb. a tömb hashCode-ja (az Object osztály implementációja fut le).
Az Arrays.toString tényleg megoldja a problémát, de ha nem teszel bele effortot, akkor valóban nem írja ki emberi módon a tartalmat. Így pl. ajánlás, ha password fieldet kell a backenden metódusok között átpasszolni, akkor char[] legyen a típus és ne String, nehogy véletlenül bekerüljön a jelszó a logba. -
válasz
floatr
#11925
üzenetére
És amennyiben nincs is szükséged, hogy elérd ezeket a metódusokat, mindig az interface-t használd típusnak, ne a konkrét megvalósítást, mert így bármikor ki tudod cserélni a tényleges típust (pl. LinkedList-re) anélkül, hogy a kódod egyéb részeihez hozzá kellene nyúlnod.
-
válasz
Ablakos
#11908
üzenetére
Alapból a stream-nek van minimális overhead-je a hagyományos bejárással szemben, viszont sokkal jobban karbantartható kódot eredményez.
Másrészt ha nagyon heavy a stream kiértékelése (pl. sokmilliós rekordszám), akkor a .parallel() lépést beiktatva a stream-be párhuzamosítja a feldolgozást, és magszám-közeli szorzót lehet így elérni sebességben. -
válasz
Ablakos
#11903
üzenetére
A stream-et egy iterátorként fogd fel, és a benne lévő lépések végrehajtódnak minden elemre.
Tehát minden elemre végre fog hajtódni először az upperCase, ami nagybetűsít. Ennek az eredménye megy át elemenként az anyMatch-be, ami megnézi, hogy az adott elem A betűvel kezdődik-e. Az anyMatch egy terminal operátor, vagyis zárja a stream-et, további lépést nem tudsz hozzáfűzni. A visszatérési értéke boolean:boolean anyMatch(Predicate<? super T> predicate)Tehát az egész stream kiértékelés eredménye egy true/false érték, és true akkor, ha valamelyik elem nagybetűsítve A-val kezdődik. Az első sor elejére ezt is írhatod:
boolean existsWithA = Stream.of("d2", "a2", "b1", "b3", "c")...És jelen esetben ez true-t fog visszaadni, de ha az a2-t kiszeded, akkor false-t.
-
válasz
Csaby25
#11566
üzenetére
Én mind a két implementációt optimalizálnám.
Az elsőnél az a gond, hogy így baromi lassú, F(n)-t pont F(n) időben fogja kiszámolni, tehát lineáris helyett exponenciális lesz a futásidő. Ezen a már kiszámolt értékek eltárolásával lehet segíteni. Próbáld nagyobb értékkel futtatni, azt hiszem, az int-be 44-ig nem csordul túl, de ha átírod long-ra, akkor 89-ig próbálkozhatsz, azt pedig már lehetetlen kivárni.
A másodiknál pedig felesleges lefoglalni egy teljes tömböt, elég tudni mindig a két utolsó értéket:
if (n <= 1)return n;int a = 0;int b = 1;for (int i = 2; i <= n; i++) {int c = a + b;a = b;b = c;}return b; -
válasz
bucihost
#11137
üzenetére
A 110-es sort cseréld ki erre (igy csak másodpercen belül lehet egy usernél ütközés):
String timeStamp = new SimpleDateFormat("YYYY-MM-dd-HH-mm-ss").format(new Date());
String fname = "data/BugReports/" + player.getName() + "-" + timeStamp + ".txt";Egyébként pedig a dátum formátumát úgy állítod be, ahogy szimpatikus. Azért választottam ezt, mert így se pont, se szóköz nem lesz benne.
-
Miután elküldtem, rájöttem, hogy az ertekek.contains(nev) nem lesz jó, mert egy List<Gyumolcs> sosem tartalmazhat String-et, de ettől még áll, amit írtam, hogy a toString()-ezés nem a jó irány. Például:
private static boolean isNameValid(List<Gyumolcs> ertekek, String nev) {
for (Gyumolcs gyum : ertekek) {
if (gyum.getName().equals(nev)) {
return true;
}
}
return false;
}És akkor ezt a metódust lehet hívni a while ciklusból. A gyum.Megnevezes-t pedig engedelmeddel getter-re cseréltem, nem használunk field-et közvetlenül (és nem is kezdjük a nevét nagybetűvel).
-
Ez a rész háromszor is szerepel: gyum.toString().contains(nev)
Egyrészt a harmadik automatikusan teljesülni fog, elhagyható, egyetlen vizsgálat is elég. Másrészt gondolom az elso gyum helyett az ertekek változót akartad használni, így az értékek.contains(nev) pont az, amire szükséged van, sőt, a toString-ezés miatt ha akár egyetlen betűt írsz be, ami a felsorolt gyümölcsök valamelyikében szerepel, azt is el fogja fogadni, nem néz teljes egyezést. Kicsit egyszerűsítve:
public static void kaloriaKiir(List<Gyumolcs> ertekek) {
Scanner scan = new Scanner(System.in, "ISO-8859-2");
System.out.println("Kérem a gyümölcs nevét: ");
String nev;
while (!ertekek.contains(nev = scan.nextLine())) {
System.out.println("Nem megfelelő név, újat kérek!");
}
System.out.println("Kérem a mennyiséget grammban: ");
int menny = scan.nextInt();
for (Gyumolcs gyum : ertekek) {
if (nev.equals(gyum.Megnevezes)) {
System.out.println(menny + " gramm " + gyum.Megnevezes + " " + gyum.kcal / 100 * menny + " gramm kalóriát tartalmaz.");
}
}
} -
válasz
szombatitomi
#10361
üzenetére
Sőt, mondok jobbat:
for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": ");
for (String str : entry.getValue()) {
System.out.println(str);
}
} -
válasz
szombatitomi
#10361
üzenetére
beírtam az előbb
-
válasz
szombatitomi
#10358
üzenetére
Egyébként a végén a listába pakolás minek?
for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": ");
System.out.println(entry.getValue().toString().replace("]", "")
.replace("[", "").replace(", ", "\n"));
} -
válasz
szombatitomi
#10358
üzenetére
A cim-hez készíts egy saját struktúrát, legyen neki String street-je és int houseNumber-e, és definiálj ezen a struktúrán te magad egy rendezést, pl.
Comparator<Address> comparator = Comparator.comparing(Address::street).thenComparingInt(Address::houseNumber);És ezt a comparatort átadva TreeSet konstruktorába pont jó lesz a rendezés.
-
válasz
korte73
#9797
üzenetére
A tömb fix méretű, valóban nem tudsz ilyet csinálni.
Használhatsz helyette ArrayList-et, viszont akkor nem tudsz primitív típust tárolni benne, csak Integer-t.
A másik megoldás a Java 8 és a Stream API:int tomb[] = {2,6,12,8,5,3,16};
int ujTomb[] = Arrays.stream(tomb).filter(k -> k > 8).toArray();vagy ha csak a darabszám érdekel:
long count = Arrays.stream(tomb).filter(k -> k > 8).count(); -
válasz
Regirck
#9768
üzenetére
public static void main(String[] args) {
boolean draw = true;
do
{
Engine start = new Engine();
start.Dice();
System.out.println("");
if ("You".equals(start.toString())) {
System.out.println("Nyertél!");
draw = false;
} else if ("Computer".equals(start.toString())) {
System.out.println("Vesztettél!");
draw = false;
} else {
System.out.println("Döntettlen!");
}
}
while (draw);
} -
A startGame metódusban ez van:
evaluation(playingDeck, playerBet, delaer, delaer);
A 2. paraméternek playernek kellene lennie. (Egyébként a dealer szót így írják helyesen, légyszi írd át)Igazából sokkal tisztább lenne a kód, ha a player és a dealer két példányváltozó lenne, nem pedig egy metódusban létrehozott belsó változók, amiket mindig továbbadsz paraméterként. Akkor pl. ezt a hibát nem követted volna el.
Az ékezetes enum-okat pedig ne használd (hosszú ő-vel különösen ne).
-
Ja, pont amiatt, amit mondasz. Viszont futtasd le ezt a két ciklust külön-külön és nem kell más magyarázat:
String resultString = "";
for (int i = 0; i < 1000000; i++) {
resultString += "a";
}StringBuilder resultStringBuilder = new StringBuilder();
for (int i = 0; i < 1000000; i++) {
resultStringBuilder.append("a");
} -
-
válasz
smallmer
#9294
üzenetére
A kiíró for ciklust is lehetne szebben írni, pl. nézhetne ki így az inicializálás utáni rész:
for (Domino domino : myList) {
pw.println(domino.getX());
pw.println(domino.getY());
System.out.println("elküldve");
}
Iterator<Domino> it = myList.iterator();
while (it.hasNext()) {
it.remove();
}Vagy az iterátoros rész helyett ennyi is elég lenne, ha csak a funkcionalitásra megyünk:
myList.clear(); -
válasz
Chesterfield
#8929
üzenetére
A parseInt nem kezeli a belső szóközöket.
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Vezeték nélküli fülhallgatók
- Epic Store Ünnepi Ajándékozás - 12. nap: Viewfinder
- Autós topik
- Vivo X300 Pro – messzebbre lát, mint ameddig bírja
- OTP Bank topic
- Milyen videókártyát?
- A fociról könnyedén, egy baráti társaságban
- Lakáshitel, lakásvásárlás
- One otthoni szolgáltatások (TV, internet, telefon)
- VR topik
- További aktív témák...
- Újszerű Dell Latitude 5420 - i7 1185G7 ,16-32GB RAM, 512GB SSD, jó akku, számla, 6 hó gar
- Dell Latitude 7400 14" FHD IPS, i5 8365U, 16GB RAM, SSD, jó akku, számla, 6 hó gar
- HP Omen RTX 3070 8GB GDDR6 Szép Állapotú Eladó!
- Samsung Galaxy Watch 6 40mm, Újszerű, 1 Év Garanciával
- Samsung Galaxy Z Flip 7 512GB, Kártyafüggetlen, 1 Év Garanciával
- LG 55C2 - 55" OLED evo - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - A9 Gen5 CPU
- Apple iPhone 13 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- Azonnali készpénzes AMD CPU AMD VGA számítógép felvásárlás személyesen / postával korrekt áron
- Acer Predator Rift Essential gamer szék
- AKCIÓ! MSI MAG 325CQRXF QHD VA 240Hz 1ms monitor garanciával hibátlan működéssel
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest


