- Bejutott az európai 5G-be az Amazon
- Még több AI-generálta reklám jön a Facebookra és az Instagramra
- Egyre nagyobb a hatása a választásokra az AI-generálta képeknek
- Visszavonta az Intel és a Qualcomm Huawei-hez kiadott exportlicencét az USA
- Több stúdiót is bezár költségcsökkentésként a Microsoft Xbox részlege
- Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
- Windows 11
- Több stúdiót is bezár költségcsökkentésként a Microsoft Xbox részlege
- Szabadulnak a kínai eszközöktől az amerikai szolgáltatók, de ez sokba kerül
- Bejutott az európai 5G-be az Amazon
- Milyen routert?
- Rendszergazda topic
- Még több embert rúgott ki a Tesla
- ESET NOD32 Antivirus / Smart Security
- Aliexpress tapasztalatok
Új hozzászólás Aktív témák
-
Lacces
őstag
Sziasztok!
Akkor ide teszem fel a kérdés, mert ezek szerint van :-) és létezik:
Objektumból alkotott objektumot hogyan lehet létrehozni C#?
Van egy adott pl:
Téglalap objektumom.
Ennek van egy mezője(példányváltozó), ami szintén egy objektum.Teglalap doboz = new Teglalap();
doboz.sarok = new Pont() //talán.. a sarok példányváltozó egy pont objektumEsetleg erről linket tudnátok nekem küldeni? Angol is jó lesz. Hiába írom be a Google-be, mindig az alap object-oriented leírást kapom, és abban nem veszem észre, azt ami engem érdekel igazán. Példakód is jöhet. Nagyon érdekel a téma Python nyelvben tűnt ez fel nekem, ezelőtt sohasem.
-
Lacces
őstag
amargo, -Zeratul- , hunfatal köszönöm a segítséget!
+1 -Zeratul-nak, köszönöm a részletes példát is! A példát lemásolnám magamnak, ha szabad!
Tanulok én egyetemen C# és Java-t de a programozás gyakorlatát igyekszem most a nyári szünetben elsajátítani. És a Python-t javasolták nekem, amiből van egy jó jegyzet. Őszintén szólva, most kezdem felfogni a C# és Java objektum orientált működését is ezzel a nyelvvel, sőt még a C/C++-ot is.
És a könyvben volt az írva, hogy objektumból alkotott objektum... Google-be beírtam, de konkrét találatott nem adott.Ez az eredeti Python példakód:
A teljes példakód:
# coding: iso-8859-2
class Pont:
"Egy matematikai pont definíciója"
# Egy Pont objektum létrehozása
p1=Pont()
# Példány attribútomok vagy változok
# Nem kell semmilyen konstruktor stb.
p1.x=3.0
p1.y=4.0
# Objektumokból alkotott Objektum
class Teglalap:
"egy téglalap osztály definicója"
doboz = Teglalap()
doboz.szeles=50.0
doboz.magas=40.0
# Példányváltozó(sarok) egy Pont objektum
doboz.sarok=Pont()
doboz.sarok.x=12.0
doboz.sarok.y=27.0És az egyetemen nem láttam ilyen példát még, nem is tanítottak, hogy egy olyan osztály objektumát tudom felhasználni egy másik objektumba, amelyek nincsenek származási viszonyban egymással.
Öröklődésnél láttam ilyen példát. De így, hogy teljesen két független objektum, még nem!
Ez nekem új volt! -
Lacces
őstag
Ismét műxik a gép, ismét faggatom a prohardver kollegákat
1. Kérdés, magamnak:
Hogyan lehet .net-ben megakadályozni, hogy egy osztályból ne lehessen példányosítani? (objektumot létrehozni)Válasz: Privát konstruktor (esetleg van más is?, jó a válaszom)
Megj.: angolul a példányosítás hogy van? (dont create object-el keresek rá)
2. Kérdés, teszten volt
Egy 3 elemű tömb mennyi helyet foglal a memóriában?
(én 6Kb-ot írtam, mert egyszer rá kerestem, és az msdn-en volt írva, hogy 128 elemű tömb 256Kb-ot foglal el...)
De nem tudom, hogy akkor jó-e a 6Kb-os válaszom, egy teszt kérdésnél3. Kérdés teszten volt
Mi a különbség referencia és érték szerinti átadásnál?
Válaszom: referencia szerinti átadásnál a memóriacímet (memóriahelyre hivatkozok)adom át egy változónak(adatnak, objektumnak), és mindig a memóricímen történik a változás. Több változó is mutathat ugyanarra a memória címre.
Érték szerintinél, meg egy értéket adok át, azaz másolom a válozóban tárolt értéket.
De nekem ezt a választ nem fogadták el...A válaszokat előre is köszönöm
-
Lacces
őstag
A statikus objektum-nál mindig kétségbe vagyok esve...
Azt mégis mindig létre lehet hozni, és változik a tartalma osztály szinten. Abból csak létre lehet hozni 1-et (egyszer volt egy tutorial, ahol egy statikus csirke objektum volt, és annak az adati folyton változtak, én legalább is így emléxem rá, de ez már rég... 3-4éve volt), bár lehet többet nem, nem tudom.Haver mondta, hogy volt ilyen teszt kérdése, de fogalmam sincs, hogy minek ilyet kérdezni, mondjuk azért, hogy mennyire tudja a .net-et
De most minek olyan osztályt létrehozni, ahol nem hozzok létre objektumot belőle?
Akkor már abstract osztályt írnék...És köszönöm a tippet utána kérdezek!
-
Lacces
őstag
válasz martonx #2357 üzenetére
2.-hoz Megvan emléxem rá, char típusú volt! és úgy is volt msdn-en. de nem fogadták el.
Az, hogy 32 bites, vagy 64 bites rá sem volt írva. Ez csak az int-nél számít? Most ez a téma érdekelni kezdett
Amúgy meg a kérdések, olyan lettek volna, hogy néhányan kiröhögik ahogy meg volt fogalmazva, látszott rajta, hogy valaki olyan kérdezett, aki annyira nem ért hozzá. De tényleg nem az infós megfogalmazások voltak.
Köszönöm a választ!
-
Lacces
őstag
Aham, köszönöm szépen, ez az instance() nagyon érdekes. Még így sosem használtam.
Fórumon volt egy kérdés: Hogyan lehet megakadályozni, hogy egy osztályból példányosítani lehet.
Gondolom arra gondolt az illető, hogy objektumot ne lehessen létrehozni az osztályból.3. az jó, tetszik, egyszerű és pontos, rem nem baj ha lopom!
Köszönöm mindenkinek a segítséget!
-
Lacces
őstag
Aham, így értem, akkor miért hasznos
A linket is köszönöm, a design patterns-eket átnézem, azt tanulni kell. Úgy tűnik van még mit
Ettől mindig frászt kapok, hogy valami létezik, és nem kell létrehozni...
Eddig a konstruktorról tudtam, hogy defaultan létezik egy publikus változata. És ha azt private-á teszem nem lehet létrehozni újabbat.Staticnál nem tudtam, ott mindig létre volt hozva tutorialokban. Van még mit tanulni! Köszönöm szépen!
-
Lacces
őstag
Hello!
Van ez a feladat:int x
int ySzabályos kifejezések-e a C#-ban ha x és y az int típusúak.
x > y > 0
x = y && y
x /= y
x or y
x and y
(x != 0) || (x = 0)Az én eredmény:
Én egyedül csak az x/=y-t tartom szabályos kifejezésnek, az összes többi nem az.
Vagy ha más is szabályos, akkor az miért?előre is köszi a válaszokat!
-
Lacces
őstag
Igen, a miértek érdekeltek, Jester válasza jól jött, mert 1 kivételével mindegyiknél tudtam rá a választ, az egyiknél meg nem voltam biztos :-)
Személy szerint az első válasz: x>y>0, az átalakítás része, hogy (x>y) az egy bool érték (false/true) és az nem hasonlítható össze egy 0-al (néha előfordul, hogy a 0-t false-nak nézem be, vagy a C-s feltételekben, ahol a kiértékelés sosem false vagy true, hanem 0 vagy 1
[ Szerkesztve ]
-
Lacces
őstag
Sziasztok!
Jönnek a fórum kérdéseim:
static void Main(string[] args)
{
int number = 0;
int[] numbers = new int[1];
m(number, numbers);
System.Console.WriteLine("number is " + number + " and numbers[0] is " + numbers[0]);
Console.ReadLine();
}
static void m(int x, int[] y)
{
x = 3;
y[0] = 3;
}
Ennek a programnak a kimenet meglepett, próbáltam neten keresni a megoldás rá, hogy miért de nem esett le.
Kimenet: number is 0 and numbers[0] is 3
number=0, és numbers[0]=3.1.Miért? Hogy-hogy az egyiknél megtörtént az érték átadás a másiknál nem?
a C# az int x, az ugye egy értéktípus?
aztán néztem az msdn library-t és ott volt írva, hogy az int[] elemei nem más mint int típusú objektumok.Lehet, hogy itt van a lényeg elásva? Gondoltam itt arra, hogy nincs return így az int-nek nem adja vissza az értékét. de mivel az int[] object azért annak az értékét betudja állítani.
Bár nem tudom, hogy ez a logika megállja-e a helyét? -
Lacces
őstag
Convert Téma:
String isbn = Console.ReadLine();
int sum = 0;
for (int i = 0; i < 9; i++)
{
sum += Convert.ToInt32(isbn[i]) * (i+1);
sum += int.Parse(isbn[i].ToString()) * (i + 1);
}1. Minden String eleme az char típusú? (Amikor debuggal mentem, mindekttőnél megfigyeltem, hogy az isbn értéke az char, és nem string.
2. int.Parse() argumentuma muszáj, hogy string legyen, ezért az isbn(i).ToString()-et kell alkalmazni, hogy stringgé konvertáljam, kérdésem, így a ez lassabb vagy gyorsabb-e mint a Convert.ToInt32? Illetve ezt a sebességet, hol lehet esetleg a VS-ben "megmérni"?
3. Convert.ToInt32 az isbn(i) paramétert hogyan kezeli? (hogyan használja fel, a működése érdekelne), mert ő ezt így simán elfogadja szintaktikailag helyes, csak érdekel, hogy ezt a háttérben hogyan dolgozza fel.
Valahol úgy olvastam, hogy meghívja rá az Int.ParseTry()-t ha igaz, akkor átkonvertálja (és állítólag ezért is lassabb, mint az int.Parse(). De még mielőtt az Int.ParseTry()-t meghívja előtte az isbn(i)-t átalakítja stringgé? -
Lacces
őstag
válasz Jhonny06 #2382 üzenetére
Köszönöm. Így okés elméletben.
1.Kérdés: Még sosem írtam c#-ban mutatókat. Megkérhetlek arra, hogy a kódomat átírod szintaktikailag helyes formában?
Én így figyeltem ki netről: de nem jó bekavar neki folyton valamistatic unsafe void Main(string[] args)
{
// double[] array = new double[30];
int number = 0;
int *pointer = &number;
int[] numbers = new int[1];
m(*pointer, numbers);
// number: 0, numbers[0]: 3 mutatók nélkül
System.Console.WriteLine("number is " + number + " and numbers[0] is " + numbers[0]);
Console.ReadLine();
}
static unsafe void m(int *x, int[] y)
{
*x = 3;
y[0] = 3;
}
Az m() argumentummal van baja, azt írja ki rá, hogy int-et nem lehet int*-ba konvertálni...2.Kérdés
a static void m( int x, int[] y){...}-nak, hogy tudok szintaktikailag helyes return értéket adni?
az int-et még elfogadja, de az int[]-t már nem. Hiába írtam át a void-ot int-re úgy sem fogadja el.Törölhető! Már megkaptam rá a választ!
Csak közben itt magamtól próbáltam és netről beszerezni az infókat!
Köszönöm, hogy már leírtad a megoldást!
[ Szerkesztve ]
-
Lacces
őstag
válasz Jester01 #2385 üzenetére
Köszi, a ref is jól jön ilyenkor, meg a kollega megoldása is
"This allows you to declare an array and assign any array of int objects to it, regardless of the array's length." - ezt olvastam fent msdn library-ben. Itt az int objects akkor mi akar lenni?
Utána eszembe jutott, hogy az int[] az referencia típus, mert a system.object-ből öröklődik.
-
Lacces
őstag
Jester01, igazad volt, kösz, hogy szóltál (pont olyan 2 példát használtam tesztre amire jó volt a megoldás..)
Illetve még ezek a kérdések vannak:
Mi a tömb indexének a típusa?
Lehet, hogy rosszul kerestem rá neten ezért nem találtam a megoldást. Én Integert mondanék. Meg néhány helyen úgy láttam. (Bár msnd-en lehet rosszul kerestem, ott nem láttam)Ez nem a kérdés része, de érdekel a válaszotok:
Valahol láttam, hogy a List-nek az index értéke 0-32767-ig terjed, ami meg a Short-nak a felső értékevel egyezik meg...
Egy array-nek mennyi a maximális értéke? Olyat találtam, hogy 32bites rensdzeren max 2GB körül van, bár máshol meg ilyen választ találtam:"Keep in mind that every time you place an object in an array, it allocates a certain amount of memory to that object. So, if an object of type int is 32 bits long, that's how much memory that would be allocated for each element in the array. So, if an array consisted of 500 int objects, then it would be right at around 2KB in size. "
Itt egyébként az int objects most pontosan mire utal?
Mi a legkisebb index értéke?
0
Mi történik, ha a programjában megkísérel hozzáférni egy érvénytelen indexű tömbelemhez?
IndexOutOfRangeException keletkezik -
Lacces
őstag
Van kettő buborékrendezéses algoritmus C#-ban.
[C static void bubbleSort(int[] array)
{
// Write your code here.
int j;
int temp;
int i = array.Length - 1;
while (i > 0)
{
int swap = 0;
for (j = 0; j < i; j++)
{
if (array[j] > (array[j + 1]))
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
swap = j;
}
}
i = swap;
}}
}A másikban az eltérés csak az if feltétel if (array[j].CompareTo(array[j + 1]) > 0)
1.Kérdés, hogy hogy nem kell a függvény argumentumát int[ ] array - ről IComperable[ ] array -re változtatni? Hogy-hogy nem kéri ezt az interfészt?
És azért nem kell az IComparable interfészt implementálni mert a static void main() és static void bubble-el dolgozom?
(Class-okat nem használok, csak egy sima tömb rendezés)2. Kérdés, van-e jelentős eltérés a két if feltétel között?
CompareTo() annyit tesz, ha igaz, hogy a j-dik elem nagyobb mint a j+1-dik akkor 1-el tér vissza, és így tovább. És ha ez az érték 1 ami > 0, nál akkor lép be a feltételbe.
De akkor nem egyszerűbb csak simán az első verzió( array[a]>array[a+1])?Csak érdekelnek a miértek és a hogyanok
[ Szerkesztve ]
-
Lacces
őstag
Visszatértem.
Én nagyon elakadtam egy feladat leprogramozásában. Rendkívül rosszul gondolkodom benne. Már 4 órát töltök vele, netet böngészem de nem bírom felfogni, amiket ott találok (pontosat olyat nem, mint ami nekem kell). Kellene a szájba rágós segítség.
Feladat: Program írása... a beolvasott számok összes másodosztályú, ismétlés nélküli kombinációját lexikografikusan növekvő sorrendben!
Példa:
7 2 5 3
Ezt rendezem, okés, beolvastatom, gyerekjáték.
A fenti bemenethez tartozó kimenet:
2 3
2 5
2 7
3 5
3 7
5 7Valami ilyet írtam legutolsó probálkozásom, ami egy hulladék:
static void combination_out_repeat(int[] a)
{
for (int i = 0; i < a.Length; i++)
{
int actual = a[i];
//int next=a[i+1];
int last = a[a.Length - 1];
while (actual<last)
{
Console.WriteLine(a[i]+" "+a[i+1]);
}
actual++;
}
Már ideges is vagyok, hogy ilyen sok időm elment egy piti feladatra... de nem bírom le implementálni, amit akarok.
QuickSort, BubbleSort stb... leprogramozom és értem is. De itt a .... kivan, hogy nem megy, már a falat verem.Ha egy kezdőnek szánt, ilyen számos példás weboldalt tudtok ajánlani már az is tökéletes!
-
Lacces
őstag
Sziasztok!
Köszönöm a megoldást Jester01 Illetve a többieknek is. Bocs, hogy ilyen későn jöttem fel a válasszal.
Amúgy ez egy gyakorló feladatsor része volt, amelyek közül a következő gyakon, lesz belőle egy röpi, és ha az ember nem tudja megoldani az adott feladatot 10-15 perc alatt akkor nem kaphat aláírást és bukta az egész tárgyat.
És tegnap este annyira a rendezésben gondolkoztam... az a és a[i+1]-re fokuszáltam, hogy amit Jester01 írt le, az a(i) és a[j] kombó teljesen kiment a fejemből, csak másnap reggel jutott eszembe, mikor c++-ozni kellett. :-DMost a java-t és c#-ot tanuljuk, de... nem is ennek a két nyelvnek az alapjait, hanem ilyen c/c++-os feladatok megoldását, nézzük. Szal c++-osan programozunk.
Meg most vannak tantárgyak, amelyek c++-ra épülnek, szal nem baj ha megtanulom ezeket az algoritmusokat.
Sőt nekem nagyon tetszett amikor python-nal melegettem be a programozásba (nekem a python sokat segített, szerintem egy jó tanuló nyelv), hogy egy split metódust megírtunk saját kezüleg, mert így tudom, hogy akkor egy-egy függvény hogyan működik a háttérben, vagy volt egy C-os könyv, ahol olyan függvényeket írtunk meg, amelyek pl.: a unixos cat parancs megvalósításának is tökéletesen megfelelt. Ez nekem tetszett és sokat segített.Visszont értem én stevve érvelését is. Magamtól tanultam ezeket a kollekciókat, használtam is stb. Java és C# alapok vannak. És tényleg értem én, hogy mit mondasz, mert amit a munka világa követel, azt az egyetem nem tanítja. Azt magamtól kell megszerezni. Teljesen megértelek, és hidd el én is kidobnám ezeket, de ha kell diploma, akkor muszáj leszek ezeket megcsinálni Máskor majd jelzem, hogy sulihoz kell vagy magamnak, Bocsánat, remélem nincs harag!
-
Lacces
őstag
Hali!
Tömbös megoldás:
Igyekeztem követni a do-while szerkezetedet, de én benne elhelyezkedtem inkább egy IF-et így számomra átláthatóbb, de több megoldás is van :-)Szerintem is célszerű a tömbös, szerintem a legtöbb embernek elsőre ez ugrik be
1-50-ig futhat le a ciklus... max 50-ig próbálkozhatsz :-D Azért a végtelenségik ne! :-D
Ha a bevitel már nagyobb vagy egyenlő mint 3
Ha igena tömb utolsó 3 elemének az összege egyenlő-e 8-al?
Kiírom, hogy van eredmény
megszakítom a ciklus futását! (break utasítás)int[] tomb=new int[50];
int i = 1;
do
{
int temp;
temp = int.Parse(Console.ReadLine());
tomb[i] = temp;
if (i >=3)
{
if ( (tomb[i] + tomb[i - 1] + tomb[i - 2]) == 8)
{
Console.WriteLine(" Az utolsó 3 elem összege 8 ");
break;
}
}
i++;
} while (i<=50); -
Lacces
őstag
válasz ArchElf #2426 üzenetére
stevve, Jester01 köszi. Igen, nem az, de legalább fejből jött magamtól :-D És ez már félsiker. Egy nap olyan jó programozó leszek mint ti
AE Neked külön köszönet, a példakódért. Nagyon tetszett ez a megoldás, sosem találtam volna ki, ezt
Még List-eknél nem járok.
Hogyan működik a tomb.add() ? Tudom, hogy a List elemhez hozzáaadja a tempet.De ha már a List tartalmazza: 3, 4, 4
akkor hogyan tudja hozzáadni a 4. elemet?
(rendben vágom, hogy utána az 1. elemet törli)
Ahogy látom, hogy a List egy 3 elemű tömböt tartalmaz, és ez érdekel, hogy a háttérben a 4.-ket hogyan képes hozzáadni.TryParse, igen, már eszembe jutott, hogy ezt érdemes használni. De én akkor fórumon a Convert.ToDouble()-el hasonlítottam. Azt írták azért nem jó a Convert.ToDouble, mert az pluszban meghívja a TryParse()-t, meg olyat vettem észre, hogy false helyett 0-val tért vissza.
Parse-nek mi a hátránya a TryParse()-al szemben? Amiért nem javaslod?
Bocs de még egyetemen vagyok, és a legtöbb oldalt marha nehezen hozza be
-
Lacces
őstag
Sziasztok!
Elméleti kérdéseim lennének: (összevadászgattam java és c#)
Mi a kapcsolat az objektum és az őt definiáló osztály között?
Az objektum az osztály egy megvalósítása , példánya. Mást nem találtam...Hogyan tud deklarálni egy objektum referencia változót?
Ez mi? Ez alatt mit ért? Kerestem neten, és ilyen megoldások születtek: String, Array, magyarán Object osztály gyermekeinek az objektumai. Ez alatt mit érthetnek?Hogyan tud létrehozni egy objektumot?
new kulcsszóval és konstruktorhívássalHogyan tud deklarálni és létrehozni egy objektumot egyetlen utasítással?
ClassName objectName = new ClassConstructor();
Pont emiatt nem értem az objektum referencia változót, hogy mi az akar lenni. Mire gondol a tanár. Vagy csak simán erre gondol: Osztálynév ObjektumNév ?Mi a különbség a konstruktorok és a metódusok között?
Elnevezése az osztály neve.
Inicializálja az Osztályt
Nincs visszatérési értéke
Létrehozza a VMT-t (Virtual Method Tablet) -
Lacces
őstag
Hali!
Objektumoknál írtunk egy ilyen Equals()-t én csak most vettem észre, hogy az
n1.Equals(n3) esetén true-t ad vissza. Az a kérdésem, hogy miért?
(Nem hiszem, hogy a paraméter miatt lehet)(n1==n3 false, mert a két objektum más helyre mutat.)
public override bool Equals(object obj)
{
// as - Referenciát ad vissza, ami a jobb oldalon van, ha konvertálható
// ha nem, akkor null-t ad vissza!
Negyzet tmp = obj as Negyzet;
// Ha Nem sikeres a konverzió
if (tmp == null)
{
return false;
}
// Ha Sikeres a konverzió
return this.a == tmp.a;
}static void Main(string[] args)
{
Negyzet n1 = new Negyzet(2.0);
Negyzet n2 = new Negyzet(5.0);
Negyzet n3 = new Negyzet(2.0);
...
Console.WriteLine((n1==n2) + " " + (n1==n3)+ " " + (n2==n3));
Console.WriteLine(n1.Equals(n2)+ " " + n1.Equals(n3)+ " " + n2.Equals(n3)); -
Lacces
őstag
válasz Lortech #2449 üzenetére
WonderCSabo Köszönöm, igen azt én is észrevettem, de azthittem több van a háttérben.
Lortech Köszönöm, így kerek most, ezt a value type-ot hirtelen nem értettem az elején, de hogy így itt írtad, rájöttem, hogy "érték típus"
Amúgy ha a mező referencia típus, akkor ugyanúgy megvizsgálja, hogy a referencia típusban lévő értékek "=="-e ?
pl.: egy lista, ugyanazokkal az elemekkel?[ Szerkesztve ]
-
Lacces
őstag
válasz WonderCSabo #2451 üzenetére
WonderCSabo Lehet igazad van Csak pár egyszerű mezei példát láttam operátor felülírásra!
x007 Az equals-t hogyan kell felülírni? Van rá általános megoldás? (vagy elég úgy ahogy fentebbi hsz-nél van)
És ennek mikor van gyakorlati haszna? (amikor megvizsgálom, hogy a két referencia ugyanaz-e)
Szerk.:
Azt szem látom mire gondoltál, ennyi átírás bőven elegendő [IEquatable.Equals], ami az oldalon van public override bool Equals(Object obj)
?[ Szerkesztve ]
-
Lacces
őstag
válasz Gülredy #2461 üzenetére
A többiek jól mondják
Plusz, használj TryParse-t a Parse helyett
Magyarázat itt: Magyarázat itt AE-tól
-
Lacces
őstag
Srácok, volt egy beadandó feladat, LáncoltLista C#-ban... (no comment) megoldottam magam módján, de az egyik esetben szeretnék egy szebb megoldást, a többi esetben, ha van valakinek tippje, hogyan lehet átírni rövidebb alakra, optimalizálni, azt is nagyon szívesen fogadom, sőt igénylem a jó tanácsokat
Osztály implementáció a legvégén.
Szépíteni kellene, amit úgy értek elsősorban, hogy megpróbáltam egy másik while ciklusban megírni - ami kommentelve volt - de az úgy nekem nem működött (akkor csak két elemet kaptam vissza), Működik a kód, csak csúnya
public bool AddLast(int val)
{
// Write your code here
if (Head == null)
{
Head = new Node(val);
Size++;
return true;
}
else
{
Node current = new Node(val);
Node previous = Head;
int i = 1;
while (i < Size)
{
previous = previous.Next;
i++;
}/*
while(previous.Next.Next!=null){
previous.Next = previous.Next.Next;
}*/
previous.Next=current;
Size++;
return true;
}
}Ezeket lehet-e másképp implementálni? (vagy optimalizálni)
public bool AddFirst(int val)
{
// Write your code here
Node current = new Node(val);
current.Next = Head;
Head = current;
Size++;
if (Head == current)
return true;
else
return false;
}public bool RemoveAll(int val)
{
// Write your code here
bool result = false;
if (Head == null) return false;
if (Head.Value == val)
{//does head contain the value
Head = Head.Next;
Size--;
result = true;
}
Node Prev = Head;
while ((Prev.Next != null))
{//actually checking prev.next if it contains the value
if (Prev.Next.Value == val)
{
Prev.Next = Prev.Next.Next; //remove link from prev to prev.next
Size--;
result = true;
}
else
{
Prev = Prev.Next;
}
}
return result;
}Osztály Implementáció:
class MyLinkedList
{
public int Size { get; private set; }
Node Head { get; set; }
class Node
{
public int Value { get; private set; }
public Node Next { get; set; }
public Node(int val)
{
Value = val;
}
//... metódusok -
Lacces
őstag
válasz Jester01 #2470 üzenetére
a return az tényleg igaz, ott az else ágat kivettem. Amúgy melyik a jobb megoldás?
Ha return false vagy return true-t használok, vagy egy bool értéket, és azt adom át a return-nek? pl: bool result = flase; return result;RemoveAll-nál igaz, az elején még nekem while ciklus volt, ott lehet a beadandó miatt átnéztem :-D, Így while szépen veszi ki
While esetében melyikre gondoltál? Amelyik kommentelve van, vagy amelyik használatban?
-
Lacces
őstag
Ehhez mit szólsz? (nekem tetszik :-D)
public bool AddFirst(int val){
Node current = new Node(val);
current.Next = Head;
Head = current;
Size++;
return (Head == current);}public bool AddLast(int val){
if (Head == null)
{
Head = new Node(val);
Size++;
return true;
}
else
{
Node current = Head;
while (current.Next != null)
{
current = current.Next;
}
current.Next = new Node(val);
Size++;
return true;
}
}Kérdés: Mikor és milyen esetben követeli meg a bool függvény, hogy a megadjam neki mindkettő visszatérési típust: return true, és return false, és mikor elégszik meg csak az egyikkel?
AddLast esetében megelégszik, hogy 2 db return true van, de AddFirst-nél nekem nagyon jött a fordító, hogy legyen egy return true és return false is. -
Lacces
őstag
Már lejárt a szerkesztési időlimit... bool metódusra vonatkozó return true/false kérdés felejtős, elfogadta csak a true visszatérési értékre is
Amúgy a Console Ablaknál, hogyan lehet beállítani, hogy fent maradjon az ablak (ne tűnjön el) és ne egy Console.ReadLine()-al állítsam meg?
-
Lacces
őstag
Hogyan kell kivenni a whitespaceket egy Stringből?
Probáltam még a String str = input.Split(' '); -t is használni, de akkor a char x=str[i]; -nél kerültem bajba, a fordító mindig kijelenti, hogy expliciten sem lehet string-et char-á konvertálni.
Trim()-et is bevetettem, de az sem segített rajtamString str = "5 + ( ( 1 + 2 ) * 4 ) −3"; Ennél egy StackEmpty hibát dob ki,
de ha a string-ben nincsenek whitespacek, akkor nem dobja ki a hibátstatic String LengyelFormaKonvertalas(String input)
{
Stack stack = new Stack();
String str = input.Trim();
StringBuilder formula = new StringBuilder();
for (int i = 0; i < str.Length; i++)
{
char x=str[i];
if (x == '(')
stack.Push(x);
else if (IsOperandus(x))
{
formula.Append(x);
}
else if (IsOperator(x))
{
if (stack.Count>0 && (char)stack.Peek()!='(' && Prior(x)<=Prior((char)stack.Peek()) )
{
char y = (char)stack.Pop();
formula.Append(y);
}
if (stack.Count > 0 && (char)stack.Peek() != '(' && Prior(x) < Prior((char)stack.Peek()))
{
char y = (char)stack.Pop();
formula.Append(y);
}
stack.Push(x);
}
else
{
char y=(char)stack.Pop();
if (y!='(')
{
formula.Append(y);
}
}
}
while (stack.Count>0)
{
char c = (char)stack.Pop();
formula.Append(c);
}
return formula.ToString();
} -
Lacces
őstag
Nos, köszönöm, a helpet, igyekeztem megírni a stuki alapján a kódot.
Valami nem stimmel az algoritmussal, (hosszabb bemeneti sztringeknél vettem észre)
Mert ezt kellene kapnom:
5 1 2 + 4 * + 3 -
De helyeztte ez jön ki...
5 1 2 + 4 * 3 - +using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace LengyelForma
{
class LengyelForma
{
static void Main(string[] args)
{
String str = "5 + ((1 + 2) * 4) - 3";
String result=LengyelFormaKonvertalas(str);
Console.WriteLine(result.ToString());
Console.ReadLine();
}
static String LengyelFormaKonvertalas(String input)
{
Stack stack = new Stack();
String str = input.Replace(" ",string.Empty);
StringBuilder formula = new StringBuilder();
for (int i = 0; i < str.Length; i++)
{
char x=str[i];
if (x == '(')
{
stack.Push(x);
}
else if (IsOperandus(x))
{
formula.Append(x);
}
else if (IsOperator(x))
{
while (stack.Count > 0 && (char)stack.Peek() != '(' && Prior(x) >= Prior((char)stack.Peek()))
{
char y = (char)stack.Pop();
formula.Append(y);
}
while (stack.Count > 0 && (char)stack.Peek() != '(' && Prior(x) > Prior((char)stack.Peek()))
{
char y = (char)stack.Pop();
formula.Append(y);
}
stack.Push(x);
}
else
{
char y = (char)stack.Pop();
if (y != '(')
{
formula.Append(y);
}
}
}
while (stack.Count>0)
{
char c = (char)stack.Pop();
if(c!='(')
formula.Append(c);
}
return formula.ToString();
}
static bool IsOperator(char c)
{
return (c=='-'|| c=='+' || c=='*' || c=='/');
}
static bool IsOperandus(char c)
{
return (c>='0' && c<='9' || c=='.');
}
static int Prior(char c)
{
switch (c)
{
case '=':
return 1;
case '+':
return 2;
case '-':
return 2;
case '*':
return 3;
case '/':
return 3;
case '^':
return 4;
default:
throw new ArgumentException("Rossz paraméter");
}
}
}
} -
Lacces
őstag
Megnyugtatlak ez nem az! Magamnak akartam. De kaptam ezt stuktogrammot, és mit ne mondjak... elég csúnya lett... Bár én még ennél szebb megoldást nem igazán láttam.
Visszafejtése legalább egyszerű.De ha van egy szép kódsora arra, hogy a lengyel formára hozást hogyan meg lehet nagyon profi módon megírni! Az most mondja, vagy hallgasom el örökre
De prog2-n Listákat kellett írni, és Bináris Kereső Fát... De az osztály már megvolt írva, és a metódusok is, de a metódust meg kellett írni.
Figyelj:
public bool insert(int key)
public bool removeAll(int key)
public bool addLast(int key)
és a többi.
Semmilyen más paramétert nem kaphat a metódus, rekurzív megírás kizárva, egyéb osztályok, interfészek használata tilos. Ez a no comment kategória.refaktorálható lenne? Az alatt mit értesz?
-
Lacces
őstag
1. Kérdés:
A C# és Java "dinamikus kötésének" a működése megegyezik?
(Szülő-gyermek osztályra gondolok, Téglalap deklarált, de négyzettel hívtuk meg stb...)Lenne egy kérdésem, 9-ből 8-t megértettem, egynél akadt egy kérdésem... Osztály öröklés vagy dinamikus kötés - én ezt a szakszót láttam :-D
Komplex és valós szám osztályok adottak, a lényeg, hogy van ez a 3 metódus, :
Komplex osztályban definiált metódus:public Komplex plusz(Komplex k){ // Komplex osztályban
System.out.println("K + K: "+toString() +" + " + k.toString());
return new Komplex(re+k.re, im+k.im);}
Valos osztályban definiált metódus:public Valos plusz(Komplex k){ // Valos osztályban
System.out.println("V + K: "+toString() + " + " + k.toString());
return new Komplex(re+k.re, k.im);
public Valos plusz(Valos v){ // Valos osztályban
System.out.println("V + V "+toString()+ " + " + v.toString());
return new Valos(re+v.re);[És akkor ez történik a main-ben:
Komplex kk = new Komplex(3.4, -5.6);
Komplex kv = new Valos(1.2);
Valos vv = new Valos(7.8)kk = vv;
Console.WriteLine(kk.plusz(new Valos(9)).ToString());
Az eredmény: V + K: (7.8) + (9.0) kiírás!kk=vv; Azt jelenti, hogy a kk objektum deklarált típusa komplex lesz, de dinamikus típus, mert a Valos osztály konstruktárat használja fel.? (Valósként van inicializálva? Nem tom, hogy ezt hogyan mondjuk)
na most itt meghívja plusz() metódust. És itt elgondolkodtam, hogy miért a public Valos plusz(Valos v) metódust hívja meg! Ez nem tiszta.
Ez az eredmény kiértékelés (függvény hívás hogyan történik?)
1. Elsőnek a Komplex osztályon megy végig, aztán a Valósba megy.
vagy
2. Egyből a Valós osztályba megy? -
Lacces
őstag
kv.plusz(kv) esetén mi a hézag?
Lehet, hogy az előző hsz-szel ellent mondok magamnak, de itt ugye az történik, hogy
kv.plusz() van, és ezért mivel a kv az Valósként lett inicializálva, ezért egyből a Valós osztályban keresi hozzá a függvényt! De mivel a paraméterben lévő kv deklarált típusa Komplex, ezért a Valós plusz(Komplex k) metódust hívja meg!
Hoppá de jó vagyok
Vagyis akkor ezekből azt a következtetést vonhatom le, hogy a függvény hívásnál az számít, hogy milyen objektumként van inicializálva, kv = new Valos() ezért, mindig a Valos osztályban keresi hozzá a metódusokat.
És az, hogy melyik paraméterű függvényt hívja meg plusz(Valos v) vagy plusz(komplex k), az a paraméterben lévő kv objektum deklarált típusa dönti el, ami jelen esetben komplex.Jól elmagyaráztam magamnak?
De ha van valakinek könnyebb, egyszerűbb mondókája, szívesen várom, itt PH-n mindig jókat kaptam
-
-
Lacces
őstag
Hali!
Hatalmas segítség kellene, idegbeteg vagyok már...
Nézem google-t de olyan gyér a találat, nah szal van egy hatalmas nagy gondom. Valamiért a VS úgy döntött, hogy megszívat. Isten áldja soká.
VS 2010 (64 bitesről van szó)Console Application-nél a Konzol ablaknak a betűméretét hol lehet megváltoztatni? (Pontosan).
Benne vagyok én itt, és végig mentem a fél opción, és a Konzol ablak betűméretén kívül mindent képes vagyok nagyítani[szerkesztve]
Megnéztem, midnenhol a betűméret 9-es, de a Konzol ablakban lévő legalább 3 vagy 4-es, végig lépkedtem az összesen Options/Enviroment/Fonts and Color
De lehet, hogy a Konzol ablak méretével van a gond... azt az opciót hol lelem meg a VS-ben?
[ Szerkesztve ]
-
Lacces
őstag
Igazatok van... cmd is elment, az sem volt jó. Azthittem mindig, hogy az a command ablak a VS-ben van, mint valami Console ablak... (ekkor ezért nem leltem normális találatot Google-ban)
-
Lacces
őstag
Visszont van egy új problémám. Házi és váááááá
Feladat:
Írjon a Dolgozat osztályban egy statikus metódust, amely paraméterként megkap egy italokat tartalmazó olyan tömböt, amelyben a szeszesitalok alkoholtartalma különböző. A metódus adja vissza a tömbben található három legmagasabb alkoholtartalmú szeszesitalt! Ha nincs ennyi szeszesital a tömbben, akkor a metódus null referenciát adjon vissza!Mit érthet itt null referncián?
Hogyan lehet implementálni / elérni, hogy egy Ital tömbben SzeszesItalokat rendezen?
Megírtam én metódust, de valamiért az órai példával ellentétben az én VS-m csak úgy imádja írni az Errorokat (séma ugyanez volt)
Hiba:
Error 2 'Kocsma.Dolgozat.ItalComparer' does not implement interface member 'System.Collections.Generic.IComparer<Kocsma.Ital>.Compare(Kocsma.Ital, Kocsma.Ital)'Kódom:
class ItalComparer : IComparer< Ital >
{
// Ez az én ötletem...
public int Compare(SzeszesItal x, SzeszesItal y)
{
if (x == null || y == null)
{
throw new NotImplementedException("baj van");
}
return x.AlkoholTartalom.CompareTo(y.AlkoholTartalom);
}
}
static void RendTömb(Ital[] t)
{
int count=0;
Array.Sort(t, new ItalComparer());
foreach (Ital item in t)
{
if (item is SzeszesItal)
{
count++;
}
}
// ha nincs 3 szeszesital
if(count<3)
Console.WriteLine("null");
else
{
Console.WriteLine(t[0]+ "\n" + t[1] + "\n" + t[2]);
}
}
Szerkesztve: töröltem az egyik hibát. Én néztem be...[ Szerkesztve ]
-
Lacces
őstag
Órán ezt vettük:
Bár már itt feltünt nekem, hogy a CompareTo() -t nem implementáltuk külön a Név adatmezőkre (Java-nál ezt megcsináltuk) de én magam sem implementáltam
Amúgy ennél van szebb megoldás? Mint, hogy így külön osztályt csinálok neki?
// Java Comparerto-nak a megfelelője
class SzemelyNevComparer : IComparer<Szemely>
{
public int Compare(Szemely x, Szemely y)
{
if (x == null || y == null)
{
throw new NotImplementedException("Na mizu Öcsém?");
}
return x.Nev.CompareTo(y.Nev);
}
}
class Program
{
static void Main(string[] args)
{
Szemely[] t = { new Szemely{Eletkor=19, Nev="Lajos"},
new Szemely{Eletkor=25, Nev="Monika"},
new Szemely{Eletkor=28, Nev="Peter"},
new Szemely{Eletkor=19, Nev="Gabor"},
new Szemely{Eletkor=25, Nev="Peter"},
new Szemely{Eletkor=18, Nev="Andrea"},
new Szemely{Eletkor=31, Nev="Peter"},
new Szemely{Eletkor=29, Nev="Gabor"},
};
Console.WriteLine("Comparer megvalósítás: Névszerint: ");
Array.Sort(t, new SzemelyNevComparer());
foreach (var item in t)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen