- Xiaomi 15 Ultra - kamera, telefon
- Mobil flották
- Samsung Galaxy Watch6 Classic - tekerd!
- QWERTY billentyűzet és másodlagos kijelző is lesz a Titan 2-ben
- Megjelent a Poco F7, eurós ára is van már
- Megérkezett a Google Pixel 7 és 7 Pro
- Milyen okostelefont vegyek?
- Poco F6 5G - Turbó Rudi
- Amazfit Active 2 NFC - jó kör
- Poco X6 Pro - ötös alá
Új hozzászólás Aktív témák
-
Jester01
veterán
Ezzel nem értek egyet. Ésszel kell programozni, a GC-nek és a GC fejlesztőknek pedig az a dolga, hogy ezt a használatot figyelembe vegye. A GC belső működésére építeni szerintem elég szörnyű dolog, már csak azért is, mert bármikor változhat (meg már eleve is több van, persze).
-
Jester01
veterán
válasz
kingabo #3426 üzenetére
Elég egyszerű mivel regexben a | jel használható VAGY kapcsolatra.
Kicsit zárójelezni is kell, tehát ez lesz belőle: ^(([-+]?[0-9]+)|(N/A))$
Működés közben lásd itt.Nem tudom pontosan mihez kell, de látatlanban erre nem javaslom a regexet, sokkal inkább valami olyasmit, hogy line == "N/A" || Int32.TryParse(line, result)
-
Jester01
veterán
A c-style cast az InvalidCastException-t dob ha nem sikerül, az as operátor simán null-t ad (persze csak referencia típusokkal van értelme).
Egyik a másikkal körülbelül így írható le:Foo dst;
try
{
dst = (Foo)src;
} catch (InvalidCastException) {
dst = null;
}
Foo dst = src as Foo;
if (src != null && dst == null)
{
throw new InvalidCastException();
} -
Jester01
veterán
Azért mert ügyesen ugyanúgy nevezted el a meződet meg a függvényparamétert. Ha ehhez ragaszkodsz, akkor a mezőhivatkozás elé írd ki, hogy "this."Izé, nem ez a baj, de most már nem is értem mit akarsz csinálni. Minek kapja paraméterben az OpenConnection ha egyszer ott a mező?
Egyébként ha nincs rá nyomós okod, akkor a mező ne legyen public, lehet viszont readonly.
-
Jester01
veterán
válasz
Lucas Kane #3303 üzenetére
Ezt majd komoly rendszeren azért ne használjátok, mert SQL Injection veszélyes. Lásd még xkcd
-
Jester01
veterán
válasz
Gülredy #3289 üzenetére
Miért nem mondod egyszerűen, hogy lottó program kell
Ez amúgy totál triviális feladat. Véletlenszám generálást már ezerszer elmondtuk, és nem is az "a program lényege". A gyakoriság is nagyon egyszerű, fogsz egy 90 elemű tömböt és (akár menet közben) nyilvántartod benne hogy a számok hányszor fordultak elő. Végül megkeresed benne az 5 legkisebbet.
-
Jester01
veterán
Nem zavar nagyon de erre van ám az állásbörze fórum.
-
Jester01
veterán
válasz
trisztan94 #3241 üzenetére
Nagyon egyszerű, vezess be egy member változót ami a legutoljára felfordított indexet tárolja, illetve azt is, hogy érvényes-e. Legyen mondjuk -1 ha nincs ilyen (vagyis "első gomb" következik). Induláskor ezt akkor -1. A gomb kattintás eseménykezelőjében akkor megnézed, hogy ez -1 vagy sem. Ha az, akkor ez most "első gomb", egyszerűen elteszed az aktuális indexet ebbe a változóba és kész. Ha nem -1, akkor benne van az előzőleg felfordított gomb indexe. Ez alapján már össze tudod hasonlítani, és nem egyezés esetén azt és az aktuális gombot is visszafordítod (és persze az enabled-et is visszaállítod). A segédváltozót pedig -1-re teszed, mivel a következő gomb megint "első gomb" lesz. Leírva bonyolultabb mint leprogramozni
-
Jester01
veterán
Mellesleg általában tilos ilyen módon generálni a véletlenszámokat mivel nem determinisztikus hány random hívás lesz. A helyes megoldás mindig csak a maradék számok közül választani, hiszen valójában is ez történik.
-
Jester01
veterán
Azt jelenti, hogy kettő Form1-ed van most. Ha ez tulajdonképpen egy osztály két darabban, akkor mindkettőt jelöld meg partial-nak, ahogy az üzenet írja. Ha csak névütközés, akkor az egyiket nevezd át.
Egyébként ezeket a generált Form1, Button1, stb. neveket azonnal le kell cserélni létrehozáskor valami beszédes névre.
-
Jester01
veterán
válasz
WonderCSabo #2970 üzenetére
if (text.TrimStart(new char[] { 'n', 'f', 'e' }).Length > 0) ...
-
Jester01
veterán
-
Jester01
veterán
válasz
Peter Kiss #2727 üzenetére
Ezt a new sorrendet nem lehet megvalósítani
Értelemszerűen nem arra mondtam, hogy mindig, hanem abban az esetben ha véletlen egyezik a változó típusa a példányosítani kívánt osztállyal.
Ja ha szerinted az interface-k felesleges dolgok, akkor nem szóltam.
-
Jester01
veterán
válasz
Peter Kiss #2725 üzenetére
A new esetén szerintem a microsoft rosszul találta ki. A változónak mindig kellene típust adni, ha gépelési könnyítést akarsz, akkor inkább a new után lehessen elhagyni. Pl. én ilyet engednék: Foo foo = new(arg1, arg2); Ha meg interface-t használsz (ami viszont tényleg ajánlott) akkor meg amúgy is ki kell írni: IDictionary<Foo, Bar> baz = new Dictionary<Foo, Bar>();
A változóknak mindig legyen pontos típusa. Ha utálsz gépelni, akkor használj IDE-t ami megteszi helyetted. A "később bekavarhat" részt úgy értettem, ha később módosítod a kódot a var lehet, hogy már más típust fog jelenteni, amitől rejtett módon megváltozhat a program (pl. más overload hívódik később egy metódusnál).
-
Jester01
veterán
válasz
Peter Kiss #2723 üzenetére
Használja mindenki a var kulcsszót, ahol csak lehet.
Ez szerintem rossz tanács. A var csak azt jelzi, hogy a programozónak fogalma sincs az adott kifejezés típusáról és/vagy "gépelésre optimalizál". Továbbá későbbi módosításoknál is bekavarhat.
-
Jester01
veterán
válasz
Dr. Student #2695 üzenetére
Te magát az F függvényt írod, az a feladat. És attól lesz rekurzív, hogy saját magát hívja.
-
Jester01
veterán
válasz
Dr. Student #2693 üzenetére
Ez azt akarja jelenteni, hogy mindegyik szám az előző kettő összege. n-ből közvetlenül így nem számolható, azért kell a rekurzió (bár ugye van rá képlet, de most nem az a feladat).
A definíció így hangzik:
1) F(0) = 0
2) F(1) = 1
3) F(n) = F(n-1) + F(n-2)Pontosan ezt kell leprogramozni is. Így már megy vagy mondjam tovább?
MOD: mondom még egy kicsit. F(2) a definíció alapján F(1) + F(0) tehát 1+0=1. F(3) = F(2) + F(1), vagyis 1+1=2.
-
Jester01
veterán
válasz
Dr. Student #2691 üzenetére
Fibonaccival hol akadtál el? Igazából sehol nem lehet benne elakadni, ha az alapképletet már megkerested. Jóformán szó szerint csak le kell másolni a definíciót.
-
Jester01
veterán
válasz
Dr. Student #2678 üzenetére
A négyzetgyököt túl hamar számolod, már a d-ben.
-
Jester01
veterán
válasz
Jhonny06 #2604 üzenetére
Igen, nagyjából jó. Ahogy írod, a Random nincs jó helyen, mint ahogy a tomb_hossz is jobb lenne magában a konstruktorban. Ami azonban ezeknél fontosabb hiányosság az az, hogy a tömböt magát is létre kell hozni, vagyis ilyesmi kellene még bele, mielőtt az elemeket kezded el piszkálni:
tomb = new Hallgato[tomb_hossz];
-
Jester01
veterán
A for ciklust nagyon egyszerű while ciklussá alakítani.
for(a; b; c) { d } => a; while(b) { d; c; }A számokat jelenleg nem kell eltárolni, elég az utoljára beolvasottat illetve a különbséget. A ciklusfeltétel annyi, hogy az aktuális különbség egyenlő-e az eddigiekkel.
Mondjuk indulásképpen a ciklus előtt beolvasod az első két számot, ebből kiszámolod a különbséget és elteszed a második számot. Ciklus innen indul. Beolvasod a következő számot, megnézed a különbség passzol-e. Ha nem, vége. Ha igen, eltárolod a számot és megy tovább a ciklus. -
Jester01
veterán
válasz
Jhonny06 #2564 üzenetére
Igen. Amellett, hogy a get/set metódusokban ellenőrzést és egyéb műveleteket (pl. cache-elés) végezhetsz, továbbá property-k lehetnek interface-ben ... meg még biztos egyebek amik hirtelen nem jutnak az eszembe.
MOD: plusz az írás és olvasás különböző láthatóságú is lehet illetve lehet csak írható vagy olvasható property is.
-
Jester01
veterán
Mit érthet itt null referncián?
Mit nem lehet ezen érteni? A null az null. Normál esetben egy 3 elemű tömböt kell visszaadni (a legmagasabb alkoholtartamúkat), egyéb esetben pedig null-t.
Error 2 'Kocsma.Dolgozat.ItalComparer' does not implement interface member 'System.Collections.Generic.IComparer<Kocsma.Ital>.Compare(Kocsma.Ital, Kocsma.Ital)'
Ez is egyértelmű, konkrétan megmondta mi a baj. Mivel azt deklaráltad, hogy IComparer< Ital > ezért a megadott Compare függvény kell, nem pedig az amit te írtál.
Error 3 Use of unassigned local variable 'count'
Mivel nem nulláztad ki.
Igyál egy kávét vagy aludd ki magad ...
-
Jester01
veterán
válasz
WonderCSabo #2514 üzenetére
Csak vannak architektúrák illetve szituációk ahol például a rekurzióhoz használt verem kapacitása korlátozott, vagy egyéb okból nem kívánatos a rekurzió (pl. sebesség). Egy programozónak pedig amúgy is tudnia kell rekurziót iterációvá alakítani. Ezzel a megszorítással remekül lehet látni, hogy érti-e az emberke amit csinál. Szerintem.
-
Jester01
veterán
A while ciklusos megoldásod rossz (persze ezt te is tudtad
)
Ugye csak egyetlen új linket kell hozzáadni, az utolsó elemnél. Ehhez képest te a ciklusmagban piszkálod a linkeket. Ez nem lehet jó.return után egyébként nem kell már az else, ezzel általában sokat lehet javítani az átláthatóságon.
A RemoveAll pedig ránézésre nem működik jól ha a lista elejéről több mint egy elem törlendő.
-
Jester01
veterán
válasz
ArchElf #2438 üzenetére
Viszont kelleni fog egy belső ciklus is, mert lehet, hogy az összeg egyszerre több faktoriális lépést ugrik. Továbbá utána ismét meg kell nézni, nem lett-e egyenlő. (Tulajdonképpen csak utána kell megnézni, előtte nem kell.)
Induláskor pl. fakt_alap = fakt_összeg = 1, és ha az első szám amit beírunk 6, akkor azt nem veszi észre mivel csak a 2-re lép. De még ha 2-t is írunk be, azt se veszi észre, mivel a lépés után már nem nézi az egyezést.
-
Jester01
veterán
válasz
ArchElf #2429 üzenetére
Ezek a megoldások mind működnek, de egyik sem túl hatékony. Mindig szem előtt kell tartani az adott adatszerkezet előnyeit és hátrányait valamint azt a tényt, hogy általában a programok lassúságának fő oka a memória foglalás illetve felszabadítás valamint a másolgatás.
Jelen esetre vetítve: vegyük észre, hogy a List elejéről törlés ugyanolyan másolgatást von maga után mint az első megoldásban lévő explicit mozgatás. Tehát lassú.
Ide kéremszépen egy cirkuláris buffer nevű adatszerkezet kell, ami egyszeri memóriafoglalással, másolgatás nélkül megoldja a problémát. MOD: és persze az összeget is nyilván kell tartani, nem mindig újraszámolni.
Nyilván a fentieknek akkor van értelme ha sok adattal, sokszor dolgozunk. A konkrét feladatban valószínűleg mindegy, hiszen a program leginkább a felhasználóra vár. Kivéve persze ha egy fájlt vagy másik program kimenetét irányítjuk bele.
Parse azért rosszabb, mint a TryParse, mert ha nem tud konvertálni (pl szám helyett szöveget adtál be), akkor dob egy FormatException-t, és azt le kell kezelni, hogy ne szálljon el a program.
Az addig igaz, hogy ez a különbség a kettő között. De ettől egyik sem rosszabb a másiknál, csak tudni kell mikor kell őket használni. Ha "helyben" tudod kezelni a hibás adatot, akkor TryParse, ha pedig csak blokk szinten vagy a hívóban akkor jó a kivételkezelés. Mérlegelni kell továbbá, hogy milyen gyakori a hibás bevitel, mivel a kivételkezelésnek esetenként jelentős többletköltsége van.
A te kódod egyébként nem túl szerencsés, mivel az értelmezhetetlen adatot csendben nullának veszi. Helyesebb lenne egyszerűen kihagyni. (Természetesen a felhasználó tájékoztatása mellett, de ezt ugye az itteni programocskákból szándékosan szoktuk elhagyni.)
Elnézésést a sok kötözködésért, igyekeztem konstruktív lenni.
-
Jester01
veterán
Ez nem az a tömbös megoldás amire én céloztam. Az helyes volt az eredeti programban, hogy csak annyi adatot tárolt el amennyi a feladathoz kellett. Ettől az még végtelen sorra működött ellentétben a tieddel. Én csak arra utaltam, hogy a szam1,2,3 változók helyett kellene a tömb, ezáltal a program általánosabb és szebb lenne.
-
Jester01
veterán
Azt próbálja csinálni, hogy mindig a három legutolsó számot jegyzi meg. Tehát amikor bekér egy újat, az előző kettőt eggyel hátrébb lépteti. Persze ehhez illene inkább tömböt használni. A fordító egyébként nem veszi észre, hogy a szam változókat nem kell inicializálni ezért kiabál (legalábbis nálam). A probléma megoldását az olvasóra bízom
-
Jester01
veterán
válasz
Gülredy #2411 üzenetére
Mivel ez egy előző feladatra épít, így aztán a feléről fogalmam sincs mit akar.
Úgyhogy csak a konkrét kérdésedre válaszolok:Például ezt a 1:100-hoz valószínűségű dolgot se tudom, hogy lehetne kivtelezni, mert jelenleg csak ezt ismerem Random r = newRandom(); number = r.Next(100); de ez csak 0-100 ig kiválaszt egy random számot az meg ide nem lenne jó.
Szerinted ez miért is nem lenne jó? Hiszen ez 100 lehetséges számot ad vissza, tehát egyenletes eloszlást feltételezve bármelyik szám valószínűsége 1%. Vagyis egy tetszőleges de állandó számmal összehasonlítva máris megkaptad ami kell.
-
Jester01
veterán
-
Jester01
veterán
Azért nem kell mert a CompareTo az az Int32 saját publikus metódusa. Mellesleg ez valóban implementálja az IComparable.CompareTo-t, de ugye te nem azon keresztül hívod. Még ha azon keresztül hívnád is, a fordító is tudja, hogy az int az IComparable. Lásd msdn
A sima összehasonlítás nyilván egyszerűbb. A CompareTo például akkor jó, ha egyszerre akarod eldönteni a kisebb-egyenlő-nagyobb kérdést.
MOD: ja "És azért nem kell az IComparable interfészt implementálni mert a static void main() és static void bubble-el dolgozom?"
Nem. Annak az osztálynak kell implementálnia amin hívni akarod. Jelen esetben ez az int lenne, ami implementálja is. De mint fentebb említettem, te egyáltalán nem használod az IComparable-t. -
Jester01
veterán
Igen, az indexek int típusúak.
Valahol láttam, hogy a List-nek az index értéke 0-32767-ig terjed
Nem tudom hol láttad, nem így van.Egy array-nek mennyi a maximális értéke? Olyat találtam, hogy 32bites rensdzeren max 2GB körül van
Két korlát van: az indexeknek bele kell férni az int-be illetve az egész cuccnak a virtuális címtartományba. Az előbbi azt jelenti, dimenziónként maximum 2^31-1 elem lehet, utóbbi függ az operációs rendszertől és persze attól, hogy mekkora elemek vannak a tömbben.
Az int objects-ért meg jól fejbevágnám aki írta. Ha egy int-et "bedobozolsz" (boxing) akkor lesz int object, addig meg csak int.
-
Jester01
veterán
1. Igen, a string elemei char típusúak. Lásd msdn.
2. Ránézésre nem lehet eldönteni melyik a gyorsabb, de megmérni persze meg lehet. Csinálj egy ciklust ami adott darabszámig vagy ideig fut, és számold ki. Ha csak egyetlen mezei ascii karaktert akarsz konvertálni (magyarul 0-9) akkor a leggyorsabb garantáltan az egyszerű kivonás lesz (c - '0')
3. A Convert.ToInt32-nek van pár overload-ja, a különböző típusokhoz, így char-hoz is. Vigyázat, ez nem számként konvertál, hanem karakterkódként! Tehát nem ekvivalens a kettő. Ha a számot akarod, akkor itt is kell a ToString(). Lásd illusztráció.
-
Jester01
veterán
Igen, az int az értéktípus, az int[] pedig referencia típus. Az int[] elemei ettől függetlenül nem int típusú objektumok, szerintem ott valamit félreértettél.
Érték típus átadásakor másolat készül az értékről, ahogy azt fentebb a kollega is írta. Referencia típusnál csak a referenciából készül másolat, nem magáról az objektumról. Tehát a függvényedben y ugyanarra a tömb objektumra referencia, ezért a benne lévő elemeket tudod módosítani akkor is, ha azok már érték típusok. Továbbá csinálhatsz egy új tömböt is, pl.: y = new int[1];. Ezáltal az y már erre az új tömbre fog hivatkozni. Viszont mivel magából a referenciából másolatod van, ez semmilyen módon nem befolyásolja a Main-ben lévő tömböt.
Használhatod még a ref kulcsszót paraméterek átadásához, ekkor semmilyen másolat nem készül. Mind az x mind az y értékének változása egyből kihat a Main-re is.
-
Jester01
veterán
Így van.
1. x > y > 0 => (x > y) > 0 és boolean-t nem lehet számmal hasonlítani.
2. x = y && y az && logikai operátor, nem lehet int-re alkalmazni (a bitenkénti operátor az &)
3. x /= y ez ugye helyes
4. és 5. or illetve and nem c# operátor, helyesen | és &
6. (x != 0) || (x = 0) az (x = 0) típusa int, amit nem lehet || logikai operátorhoz kapcsolni. -
Jester01
veterán
válasz
[pod]Diablo #2157 üzenetére
Meghívod a Show vagy ShowDialog metódusát ... mi a probléma?
-
Jester01
veterán
foreachben igen. Viszont idéztem a specifikációt miszerint ha a végére ért és falset adott vissza akkor az esetleges további MoveNext hívásoknak szintén falset kell visszaadni egészen addig amíg Reset hívás nincs. A te implementációd viszont ehelyett előlröl kezdi. Hogy ez zavar-e téged azt döntsd el magadnak.
-
Jester01
veterán
Igazából így sem jó, kivéve ha direkt csináltad a specifikáció ellenében.
If MoveNext passes the end of the collection, the enumerator is positioned after the last element in the collection and MoveNext returns false. When the enumerator is at this position, subsequent calls to MoveNext also return false until Reset is called.
A tiéd viszont újra elindul az elejéről automatikusan.
-
Jester01
veterán
-
Jester01
veterán
Azért az egy elég csúnya példaprogram volt...
1. minek is bele annyi using?
2. minek beledrótozni az ascii kódot ha egyszer a fordító is tudja?
3. minek stringgé konvertálni, ha char-t is ki lehet írni?
4. minek a WriteLine hívásba még egy enter
5. ... és azt miért string összefűzéssel kell beletenni?
6. minek kell a betu változót inicializálni
7. ... és miért nem a ciklusmagban van?
8. miért nem lehet eleve char a ciklusváltozó?Az egy dolog ha valami működik, de lehetőség szerint ne ilyeneket tanítsunk már...
using System;
namespace abc
{
class Program
{
static void Main(string[] args)
{
for (char c = 'A'; c <= 'Z'; c++)
{
Console.Write(c);
}
Console.WriteLine();
}
}
} -
Jester01
veterán
Double.TryParse és társai.
-
Jester01
veterán
Gondolom csak van valami .NET referenciád, nézd meg benne a String.Split működését. Ha meg niincs, akkor ott az msdn. Mi itt szívesen segítünk, de mindenki jobban jár ha az ilyen lexikális kérdéseknek inkább magad nézel utána.
De hogy ne érhesse szó a ház elejét: string[] Words = Line.Split(null); szépen beteszi neked a Words tömbbe az összes szót a Line stringből.
-
Jester01
veterán
-
Jester01
veterán
-
Jester01
veterán
És hány darab prím van Int32-ben? Gondolom megnézted nem éri-e meg jobban magukat a prímeket tárolni (akár delta kódolással).
-
-
-
Jester01
veterán
-
Jester01
veterán
válasz
whitewolf5 #338 üzenetére
Simán meg lehet csinálni a lekérdezésben.
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kerékpárosok, bringások ide!
- Xiaomi 15 Ultra - kamera, telefon
- BestBuy topik
- Házimozi belépő szinten
- Horgász topik
- Humanoid robotokat visz az AI-szervergyárba az NVIDIA és a Foxconn
- A fociról könnyedén, egy baráti társaságban
- EAFC 25
- Sega, Nintendo - retro konzolok
- Gitáros topic
- További aktív témák...
- LG 48GQ900-B - 48" OLED - 4K 3840x2160 - 138Hz & 0.1ms - G-Sync - FreeSync - HDMI 2.1
- Bomba ár! HP EliteBook Folio 1040 G2 - i5-G5 I 8GB I 256GB SSD I 14" HD+ I Cam I W10 I Garancia!
- BESZÁMÍTÁS! Gigabyte H370 i5 9500 32GB DDR4 512GB SSD RTX 2060 Super 8GB ZALMAN S2 TG be quiet! 650W
- Csere-Beszámítás! RTX Számítógép PC Játékra! I3 10100F / RTX 2060 12GB / 32GB DDR4 / 500GB SSD
- Turbózd fel géped a jövő RAM-jával!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest