- iPhone topik
- Apple Watch
- 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
- 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
Új hozzászólás Aktív témák
-
Sirpi
senior tag
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. -
Sirpi
senior tag
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.
-
Sirpi
senior tag
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. -
Sirpi
senior tag
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.
-
Sirpi
senior tag
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;
-
Sirpi
senior tag
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.
-
Sirpi
senior tag
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).
-
Sirpi
senior tag
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.");
}
}
} -
Sirpi
senior tag
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);
}
} -
Sirpi
senior tag
válasz
szombatitomi #10361 üzenetére
beírtam az előbb
-
Sirpi
senior tag
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"));
} -
Sirpi
senior tag
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.
-
Sirpi
senior tag
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();
-
Sirpi
senior tag
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);
} -
Sirpi
senior tag
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).
-
Sirpi
senior tag
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");
} -
Sirpi
senior tag
-
Sirpi
senior tag
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();
-
Sirpi
senior tag
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?:))
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! Lenovo ThinkPad X250 - i5-5GEN I 8GB I 128GB SSD I 12,5" HD I Cam I W10 I Garancia!
- Csere-beszámítás! Számítógép PC Játékra! I3 14100F / RTX 3060 12GB / 32GB DDR4 / 500GB SSD
- Telefon felvásárlás!! Samsung Galaxy A12/Samsung Galaxy A22/Samsung Galaxy A32/Samsung Galaxy A52
- Xiaomi Redmi Note 11 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest