Hirdetés
- Megint vizsgálja a leégő Ryzen ügyét az ASRock, amit elvileg már javítottak
- Nem akármilyen LAN-nal jön a GMKtec minigépe
- Nyakunkon a Mangmi combos kis kézikonzolja, a Pocket Max
- Megárthattak az Intel VGA-terveinek az emelkedő árak
- Képhibák a GeForce-on? Az NVIDIA szerint egy Windows frissítés okozza
- NVIDIA GeForce RTX 3060 Ti / 3070 / 3070 Ti (GA104)
- AMD Navi Radeon™ RX 9xxx sorozat
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- TCL LCD és LED TV-k
- Vezetékes FEJhallgatók
- Milyen TV-t vegyek?
- Melyik tápegységet vegyem?
- Képhibák a GeForce-on? Az NVIDIA szerint egy Windows frissítés okozza
- Fejhallgató erősítő és DAC topik
Ú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
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Samsung Galaxy A54 - türelemjáték
- NVIDIA GeForce RTX 3060 Ti / 3070 / 3070 Ti (GA104)
- AMD Navi Radeon™ RX 9xxx sorozat
- exHWSW - Értünk mindenhez IS
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Íme, a teljes Google Pixel 10a színpaletta
- Honor Magic6 Pro - kör közepén számok
- TCL LCD és LED TV-k
- További aktív témák...
- Apple iPhone 13 Pro 128GB, Akku: 92%, Megkímélt, Kártyafüggetlen, 1 Év Garanciával!
- Samsung Galaxy A72 6/128GB, Megkímélt, Kártyafüggetlen, 1 Év Garanciával!
- Apple iPhone SE 2022 64GB, Akku: 100% Megkímélt, Kártyafüggetlen, 1 Év Garanciával!
- Apple iPhone 13 Mini 128GB Akku: 100%, Normál. Kártyafüggetlen, 1 Év Garanciával!
- Kingston FURY Beast 16GB (1x16GB) DDR5 6000MHz CL30 - XMP/EXPO - 120 hó garancia
- 2 TB-os Samsung 980 PRO M.2 SSD with heatsink - garanciával
- BESZÁMÍTÁS! Részletfizetés 0% THM ÚJ Sony PlayStation 5 Slim digital / lemezes / Pro konzol 27% áfa
- LG NanoCell 43NANO763QA csere is érdekel (dobozával minden tarozéka meg van)
- Gamer PC-Számítógép! Csere-Beszámítás! R7 7800X3D / 32GB DDR5 / RX 9070 / 2TB SSD!
- Telefon felvásárlás!! iPhone X/iPhone Xs/iPhone XR/iPhone Xs Max
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest


