C# alapokat ismerem, de nem komoly a tudásom. Van egy kis programom, ami szépen fut, csv adatfájlokat kezel.
Ahogy nő az adatfájl mérete, egyszercsak elérem az "out of memory exception problémát. Valahol olvastam, hogy C# csak kb. 2GB-ig kezeli alapból a RAM-ot, de valahogy be lehet állítani, hogy nagyobbat tudjon használni.
RAM-om van sok, de fogalmam sincs, hogyan kell azt kezelni C#-ban.
Ha tényleg lehet ezen állítani, és valaki tud ebben segíteni, annak nagyon tudnék örülni.
Sziasztok lenne egy feladat ami nem tudok megoldani esetleg , valaki aki átlátja és leirná a megoldását megköszöném
A feladat-Generáld le backtracking módszert használva az összes 3 betűs szavakat a {a, t, f, e, g} halmazból, úgy hogy két magánhangzó ne legyen egymás mellett.
én eddig jutottam el :)
// C# program to print all // permutations of a given string. using System;
class GFG { /** * permutation function * @param str string to calculate permutation for * @param l starting index * @param r end index */ private static void permute(String str, int l, int r) { if (l == r) Console.WriteLine(str); else { for (int i = l; i <= r; i++) { str = swap(str, l, i); permute(str, l + 1, r); str = swap(str, l, i); } } }
/** * Swap Characters at position * @param a string value * @param i position 1 * @param j position 2 * @return swapped string */ public static String swap(String a, int i, int j) { char temp; char[] charArray = a.ToCharArray(); temp = charArray[i]; charArray[i] = charArray[j]; charArray[j] = temp; string s = new string(charArray); return s; }
// Driver Code public static void Main() { String str = "atfegaaa"; int n = str.Length; permute(str, 0, n - 1); } }
Ehhez már nem értek. C++-ban utoljára több mint 30 éve programoztam. Csak halvány emlék, hogy a képernyőmemória tartalma lehet a kulcs, de itt abba is hagyom, mielőtt hülyeségeket kezdek el írni.
Egy olyan kódot szeretnék írni ami a windows alatt tetszőleges darabot kimásol az asztal képernyőről bármi is legyen a képernyőn azt elmenti egy kép formátumba vagy hasonló
Lényegében a szövegfelolvasó progik is valahogyan hozzáférnek a képernyő képéhez.
A Hengersor nevű suliba mennék esti teljesen ingyenes programozó / szoftverfejlesztő OKJ -s képzésre, de nem vagyunk elegen, hogy induljon a képzés. Ha valaki szeretne ingyen tanulni, mint én, akkor hívja fel a sulit telefonon, vagy írjon nekik e-mail-t, hogy esti szoftverfejlesztő OKJ -ra szeretne járni. Teljesen ingyenes. Köszi a többiek nevében is ha csatlakozol, vagy ha szólsz az ismerőseidnek, akiket esetleg érdekelhet a képzés. Sose késő :)
Látom nem nagyon pörög a topik. De azért lenne egy kérdésem, C#-hoz melyik a legalkalmasabb fordítóprogram Linuxra ? Jelenleg a Visual Studio Code-t használom, de nem vagyok elájulva tőle. Természetesen a szükséges bővítményeket felinstalláltam.
Mert Invalidate() -et a Form osztályból örökli a MainForm osztályod. Lehet az, hogy a playernek átadod a Form-ot konstruktor időben, és eltárolod benne, majd azon hívod az invalidate-et, de inkább a MainForm-ban tárold el a playert fieldként, és ott döntsd el, hogy mikor kell invalidate-et hívni, mondjuk úgy, hogy a player booleant ad vissza a függvényeknél, ha frissíteni kell, akkor true-t.
És abban tudnátok segíteni-elmagyarázni, hogy az Invalidate függvény hívása miért nem működik egy saját, létrehozott Class-on belül? Most már létre tudom hozni objektumként a játékosnégyzetet, ki is tudom így rajzoltatni az osztályból, abban van az elmozdulás ellenőrzése is, de az Invalidate-et nem tudom benne használni, így az elmozdulás nem látszik.
Így néz ki a mainform-om:
using System; using System.Drawing; using System.Collections.Generic; using System.Windows.Forms;
namespace teglalap { publicpartialclassMainForm : Form {
publicMainForm() { InitializeComponent(); player p1=newplayer(50,50); Paint += new PaintEventHandler(p1.rajzol); KeyUp += new KeyEventHandler(p1.gombFel); KeyDown += new KeyEventHandler(p1.gombLe); } voidMainFormLoad(object sender, EventArgs e) {
}
}
}
így pedig a class1 forráskódja:
using System; using System.Drawing; using System.Collections.Generic; using System.Windows.Forms;
A ritka hiba épp elég. Ha eggyel mindig növeled az i-t, és ha törlöd az i-ik elemet, akkor az i-nél nagyobb indexű elemek indexe egyel csökken, így törléskor olyan, mintha kettővel növelnéd az i-t, így átugorsz egy elemet, amit lehet, hogy törölni kellene.
"„System.Collections.Generic.List<valami.jatekos>” nem tartalmazza a(z) „Where” metódus definícióját, és nem található olyan „Where” kiterjesztésmetódus, amely „System.Collections.Generic.List<valami.jatekos>” típusú első argumentumot fogad el (esetleg hiányzik egy „using” direktíva vagy egy szerelvényre mutató hivatkozás). (CS1061) "
Ezzel viszont felbukkant egy érdekes hiba is: amikor a ciklusfej módosítása után futtatom a programot, kinn hagy egy, a feltételnek amúgy megfelelő (xhely>=100) négyzetet a képernyőn és ezt csak az Enter ismételt megnyomásával lehet eltüntetni. Ha ezek után módosítás nélkül többször futtatom a programot, ez a hiba nem jelentkezik (SharpDevelop-ot használok egyébként). :-/
A következő probléma megoldásához keresek segítséget: kirajzolok 10 db négyzetet véletlen helyekre a programablakban, ezek a jatekos-ok. Enter lenyomására szeretném törölni ezek közül azokat, amelyek X koordinátája >= 100. Ezt a gombnyomas() függvény intézné, viszont amikor ez bekövetkezik, a következő hibaüzenetet kapom:
"System.ArgumentOutOfRangeException: Az index az engedélyezett tartományon kívül esett. Az index nem lehet negatív, és kisebbnek kell lennie a gyűjtemény méreténél."
Viszont amikor átírom a gombnyomas()-ban a for ciklus értékét 9 helyett 5-re, nem jelentkezik ez a hiba - viszont nyilván nem fut le az összes négyzeten a ciklus:
for (int i=0;i<=5;i++) ...
Mi lehet a baj és mi a megoldása?
Íme a teljes kód:
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;
voidgombnyomas(object sender, KeyEventArgs e) { if (e.KeyCode==Keys.Enter) { for (int i=0;i<=9;i++) //Itt írom át a 9-et 5-re! { if (jatekosok[i].xhely>=100) { jatekosok.RemoveAt(i); Invalidate(); } }