Új hozzászólás Aktív témák
-
bpx
őstag
nekem az ilyen típusú feladatokra a rekurzió ugrik be 1 másodperc gondolkodás után, mint legegyszerűbb megoldás (ami persze nem azt jelenti, hogy optimális)
pl. a rekurzív függvény paraméterként kap egy koordinátapárt, ahol megvizsgálja, hogy talajszint >= 4?
ha igen, megáll
ha nem, "feltölti" a területet vízzel, és meghívja önmagát a szomszédos mezőkre - de csak ahol még nem járt (pl. ha ez kimarad, akkor ugye soha nem áll meg, és kapásból stackoverflow)[ Szerkesztve ]
-
bpx
őstag
válasz xxSanchez #3631 üzenetére
pedig pofonegyszerű
én pl. azt raktam be kézzel context menübe, hogy lejátssza a fájlt VLC-vel (ugye .rar)registry-ben az ide tartozó érték:
C:\Program Files (x86)\VideoLAN\VLC\vlc.exe %1
ahol %1 a kattintott fájl neve (%L elvileg a teljes útvonallal együtt)
ebből rögtön látszik, hogy a programban a Main-ben az args[0] lesz a barátod
[ Szerkesztve ]
-
bpx
őstag
válasz Neil Watts #3188 üzenetére
legyen a kitalálandó szám a Form tagváltozója, a Loadban adsz neki értéket random.next-tel
a Form egy másik változója legyen a próbák száma 0 kezdőértékkel
gombnyomásnál vizsgálsz + növeled a próbák számát, semmilyen for ciklus nem kell
ha a próbák száma elérte a 7 és nem találta ki, game over -
bpx
őstag
válasz Neil Watts #3185 üzenetére
1. rakd oda, ami nem hívódik meg minden gombnyomásnál
2. a kívánt működést megvalósítja ránézésre, de gondolkodj rajta kicsit, és rájössz, hogy nem kell háromszor (kilencszer!) megírni ugyanazt
egy eseménykezelőt lehet több gombhoz is rendelni, nézd meg a Form1 generált részét (Form1.Designer.cs)
továbbá a szövegnek sincs semmi jelentősége a vizsgálatnál (főleg hogy ki sem írod a játékosnak, hogy a gép mit választott) -
bpx
őstag
válasz Neil Watts #3175 üzenetére
1.
minden gombnyomásnál új számot generál
és amúgy meg minek ide for ciklus ami 7-szer végigmegy az egészen?2.
JatekosValaszt = "papir";a papír hosszú í
-
bpx
őstag
válasz Neil Watts #2994 üzenetére
semmi, +2 sor
for (int i = 0; i < elemszam; i+=2)
{
Nevek[i] = Ossztomb[i];
Pontok[i+1] = Ossztomb[i+1];
listBoxFeltolt.Items.Add(Ossztomb[i] + " , " + Ossztomb[i+1]);
}(csak hogy az eredeti elképzeléssel legyen egyenértékű)
[ Szerkesztve ]
-
bpx
őstag
válasz Neil Watts #2991 üzenetére
-
bpx
őstag
válasz Neil Watts #2986 üzenetére
pedig ez ránézésre működik, csak eléggé távol van az optimálistól
no meg az értelmét sem látom, mert egy ilyen bemenetből:A
.
B
..ilyen lesz a két tömb:
nevek: "A", null, "B", null
pontok: null, ".", null, ".."egyébként meg mi az hogy a for nem kap értéket? a ciklusváltozó kap értéket (i=0)
végtelen ciklus sincs, csak egymásba ágyazott, aminek semmi értelme nincs, és csak a feladat egyszerűsége miatt működik -
bpx
őstag
nem egészen tiszta, hogy mi lenne a kérdés, hiszen abban a 2 sorban már benne van a válasz is
simán felveszed olyan típusú tagváltozónak, és az egy referencia lesz egy másik objektumrade pl:
class Pont
{
int X, Y;
public Pont(int x, int y) { X = x; Y = y; }
}
class Teglalap
{
Pont balfelso, jobbalso;
public Teglalap(int x1, int y1, int x2, int y2)
{
balfelso = new Pont(x1, y1);
jobbalso = new Pont(x2, y2);
}
public Teglalap(Pont bf, Pont ja) { balfelso = bf; jobbalso = ja; }
}
Teglalap doboz = new Teglalap(0, 0, 10, 15);
Pont p1 = new Pont(0, 0);
Pont p2 = new Pont(10, 15);
Teglalap doboz2 = new Teglalap(p1, p2);[ Szerkesztve ]
-
bpx
őstag
válasz martonx #2083 üzenetére
ennyire azért nem rossz a helyzet, még mindig vannak akik önállóan utánajárnak és tanulnak, de igaz, én is sokszor tapasztalom azt, hogy ha valakinek kell valami, legyen az akármilyen egyszerű dolog, rögtön inkább megkérdezi valakitől, ahelyett hogy rászánna akár 1 percet is
ezzel egyébként még egyetemen is szembesültem (bme infó szak), pedig oda aztán tényleg azért megy az ember, mert érdekli (ugye milyen naív vagyok )én amire sokszor gondolok, hogy mikor én kezdtem, akkor az internet még sehol nem volt
pl. a programozást az iskolakönyvtárból kikölcsönzött (majd a szülők által munkahelyen gondosan lefénymásolt) ősrégi BASIC könyvekből + a "QBASIC" helpből tanultam egy angol szótár segítségével
és akkor itt van a mai világ, már mindenhol internet van, elérhető ez a rengeteg tudás bárki számára, de a mai "fiatalok" nagy része nem is tudja/akarja használni(azért "fiatalok", mert még én is csak 24 vagyok )
[ Szerkesztve ]
-
bpx
őstag
csak hogy kötözködjek egy picit
static void Main(string[] args)
{
long a;
long start1 = DateTime.Now.Ticks;
for (long i = 0; i < 20000000000;)
a = i++;
DateTime dt = new DateTime(DateTime.Now.Ticks - start1);
Console.WriteLine("i++ : {0} sec, {1} ticks", dt.Second, dt.Ticks);
long start2 = DateTime.Now.Ticks;
for (long i = 0; i < 20000000000; )
a = ++i;
dt = new DateTime(DateTime.Now.Ticks - start2);
Console.WriteLine("++i : {0} sec, {1} ticks", dt.Second, dt.Ticks);
Console.ReadLine();
}i++ : 51 sec, 519749728 ticks
++i : 49 sec, 492008142 ticks
i++ : 52 sec, 521009800 ticks
++i : 49 sec, 492998197 ticks
i++ : 52 sec, 520389764 ticks
++i : 49 sec, 493708238 ticksakárhányszor futtatom, megvan a 2,6-2,7 mp körüli különbség
a másodiknál assembly-ben kevesebb a mov
[ Szerkesztve ]
-
bpx
őstag
válasz #90999040 #2008 üzenetére
"A név szerinti keresés szerintem gyorsabb. De ha ez nem lehetséges, akkor a for helyett a foreach talán gyorsabb."
majd az általad linkelt cikkben:
"Therefore, I strongly feel if you are planning to write high performance code that is not for collections, use for loop. Even for collections, foreach may look handy when using, but it's not that efficient. Therefore, I strongly recommend everyone to use for loop rather than foreach at any stage."
-
bpx
őstag
válasz Speederer #1943 üzenetére
látom már segítenek a többiek, de én kíváncsi voltam milyen rövidet tudok írni - legyen az akármilyen ronda is - úgyhogy itt egy elrettentő példa
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int[] bases = { 16, 10, 8, 2 };
List<TextBox> tb = new List<TextBox>();
private void Conv(object sender, KeyEventArgs e)
{
long l = Convert.ToInt64(((TextBox)sender).Text, bases[tb.IndexOf((TextBox)sender)]);
for (int i = 0; i < bases.Length; i++)
tb[i].Text = Convert.ToString(l, bases[i]);
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
if (c is TextBox) { c.KeyUp += Conv; tb.Add((TextBox)c); }
}
} -
bpx
őstag
válasz Vasinger! #1884 üzenetére
elkezdtem írni egy kisregényt, de meguntam, úgyhogy inkább itt egy megoldás, a kiinduláshoz hűen
static void Main(string[] args)
{
string[,] nevek = new string[50, 2];
string nev;
int hossz = 0;
while (hossz < 50)
{
Console.WriteLine("Kerem a neveket az üres string végjelig!");
nev = Console.ReadLine();
if (string.IsNullOrEmpty(nev)) break;
string[] words = nev.Split(' ');
nevek[hossz, 0] = words[0];
nevek[hossz, 1] = words[1];
hossz = hossz + 1;
}
Console.WriteLine("Milyen névnap van?");
nev = Console.ReadLine();
Console.WriteLine("Névnaposok:");
for (int i = 0; i < hossz; i++)
{
if (nevek[i, 1].Equals(nev)) Console.WriteLine("{0} {1}",nevek[i,0], nevek[i,1]);
}
} -
bpx
őstag
válasz [pod]Diablo #1881 üzenetére
megkeresed a "torrents.php?action=details&id=..." sorokat, amiből kinyered az id értékét, majd a "torrents.php?action=download&id=..." url-lel letöltöd:
System.Net.WebClient client = new WebClient();
client.DownloadFile(string url, string localname); -
bpx
őstag
válasz [pod]Diablo #1877 üzenetére
az említett oldalnál megy gettel, valójában csak nem látod címsorban
ha rákeresel valamire, akkor ugye kiadja a találatokat és közben meg is jegyzi a keresési beállításokat
ha ekkor megnézed az oldal forrását, ott lesz benne a keresési feltételeknek megfelelő url[ Szerkesztve ]
-
bpx
őstag
válasz [pod]Diablo #1875 üzenetére
úgy, hogy feltérképezed az adott oldal lehetőségeit, és ezeket maximális mértékben kihasználod
ha pl. össze lehet állítani egy olyan URL-t, amivel csak a neked megfelelő találatokat listázza ki az oldal keresője, akkor nyert ügyed van[ Szerkesztve ]
-
bpx
őstag
amikor a Visual Studio-ban a grafikus felületen összekattintgatsz valamit, ő ahhoz a háttérben legenerálja a kódot, tehát megjelenik a kódban, csak nem olyan helyen, amit az ember kézzel módosítani szeretne
minden formnak van egy InitializeComponent metódusa, és ha pl. combobox-nak adsz meg elemeket, az ott meg fog jelenni
ha pl. van egy Form1 formod, akkor a Form1.Designer.cs-ben lesz a következő:/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.SuspendLayout();
//
// comboBox1
//
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Items.AddRange(new object[] {
"Alma",
"Körte",
"Szilva",
"Barack",
"Dinnye"});
this.comboBox1.Location = new System.Drawing.Point(66, 33);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(121, 21);
this.comboBox1.TabIndex = 0;
... -
bpx
őstag
-
bpx
őstag
válasz killerjohn #1776 üzenetére
a problémára nincs megoldásom, de miért akarod rebuildelni a komplett solutiont minden egyes alkalommal és nem csak azt az 1 projektet, amit módosítottál?
[ Szerkesztve ]
-
bpx
őstag
Szia!
2 dolog:
1. Hiába van connection-öd és nyitod meg, ha a commandokat nem kapcsolod össze vele. A commandnak sehol sem adtad meg, hogy milyen kapcsolatot használjon, így persze hogy panaszkodik.
2. SQL paramétert tényleg paraméterrel kellene megadni, nem pedig magát az SQL-t "összeollózni" (sql injection, dbms optimizer).
például így:
MySqlCommand user_keres = new MySqlCommand();
user_keres.CommandText = "SELECT id FROM account WHERE username=?UN";
user_keres.Connection = connection;
user_keres.Parameters.Add(new MySqlParameter("UN", user);
MySqlDataReader reader = user_keres.ExecuteReader();ha minden igaz, akkor MySQLhez ? kell az SQL Servernél megszokott @ helyett a paraméterhez
[ Szerkesztve ]
-
bpx
őstag
azt a listát nem lehet ciklus közepén módosítani, amin épp iterálsz, mert egy exception a jutalom
egyébként én is ezt a változatot használom (ArchElf) a program többi részén (pl. a sakk logika ellenőrzésnél), csak a kérdéses helyen félbehagytam a dolgot, és ott úgy maradt -
bpx
őstag
válasz Gregorius #1635 üzenetére
az már a csütörtök délelőtti gányolásom eredménye, azóta nem foglalkoztam vele
akkor írtam át, hogy ClientInfo helyett csak a callback channel referenciát tárolja, meg az ellenőrzést is máshogy csinálja (a játékos nevét eleve nem használta semmire, a dátum meg pont az új ellenőrzés miatt nem kell)
az ellenőrző thread csak ott maradt egyelőre, de el se indítom, szóval simán lehet, hogy helytelen, de az nem futigen a foreach-es dolog is előjött, elején ott is van alatta kommentben, hogy hogyan lenne érdemes
a tanácsokat köszönöm
az a baj, hogy közel a határidő, és van egy csomó más dolog, amivel foglalkozni kellene
úgy vagyok már vele, hogy bemutatom ezt a részt kihagyva, úgy legalább működik a játék többi funkciója + nem hal szét random módon a kapcsolat, aztán le van tudva a tárgy legalább...
szerettem volna több dolgot is megvalósítani, de szvsz ez a Silverlight-WCF kombó elég nagy melléfogás lett, sokkal egyszerűbb lett volna vmi (n+1). webes portált csinálni, mint a többiek nagy része, amit összekattintgat az ember 1 nap alatt
szóvalt ezt normálisan legfeljebb önszorgalomból fogom valamikor, ha már felvet a sok szabadidő -
bpx
őstag
az alkalmazásokhoz létre lehet (illetve van, ahol kell) hozni XML formátumú konfigurációs fájlokat (app.config, web.config, stb.), ami több okból is jó, pl. a program változtatása/újrafordítása nélkül is lehet befolyásolni a működését
ezt a ConfigurationManager osztállyal lehet könnyen feldolgozni
amit leírtál, az a konfig fájlból a megadott nevű ("vp.Properties.....") connectionstring XML elemre hivatkozik, és annak a connectionstring attribútumát adja vissza(#1631) Gregorius:
[link] (1.1MB a sok sallang miatt)
ha fordítani is szeretnéd, akkor kell pár dolog:
- VS2010 + .NET 4.0
- Silverlight 4 SDK
- Silverlight 4 Tools
- adatbázist (chess.bak) visszaállítani Management Studio-val (Sql Server 2008 Express)[ Szerkesztve ]
-
bpx
őstag
válasz Gregorius #1629 üzenetére
ez se oldotta meg - de az InstanceContext hasznos volt, nem kellenek statikus tagok, stb
közben próbálkoztam még pár dologgal, szálakat/listát máshogy szervezni, timeout-okkal játszani, de sehogy sem tökéletesjövő hét szerdán leadás, meg doksit is kellene írni hozzá, szóval lehet ez kimarad belőle
-
bpx
őstag
válasz Gregorius #1627 üzenetére
"Akár úgy, hogy egy extra metódushívást beleiktatsz a kontraktba, ami periodikusan küld egy dummy üzenetet"
igen, a PingRequest()/PingReply() kb. ezt csinálja
"A kódhoz kellene még a konfig is. Nagyon sok mindent jobbá lehet tenni vagy katasztrofálisan el lehet rontani egy WCF szolgáltatás konfigurációjával."
az a gond, hogy Silverlight vs. IIS duplex kommunikáció van (amit hát mégegyszer nem biztos, hogy így csinálnék, de most már ez van...), tehát muszáj pollingduplexhttpbinding-et használni (vagy még nettcpbinding-ot lehetne, de szerintem az én esetemben a clients lista konkurrens hozzáférésével lesz valami gond, nem a szolgáltatás konfigurációjával)
egyébként itt a konfig, semmi extra nincs benne (maxOutputDelay="00:00:01" - a kliens 1 mp-enként pollozzon, hogy jött-e neki üzenet)"Az mindenesetre már látszik, hogy ha void aszinkron hívásokat akarsz csinálni, akkor ajánlott az interfészen az OperationContract-ban megjelölni IsOneWay=true-ként és akkor nem kell külön szálat indítani minden ilyen híváshoz."
na ez egy érdekes dolog, ezt így is a csináltam, a kliens (callback channel) összes metódusa
[OperationContract(IsOneWay=true)]
void ... (...)alakú
ha nem így csináltam, akkor amikor a klienshez hozzáadtam a referenciát a szolgáltatáshoz (és feldolgozta a wsdl-t és generálta a megfelelő dolgokat), akkor dobott is egy warning-ot hogy ez így nem fog működni Silverlighttal - tehát ez megvan
ennek ellenére, ha szerver oldalon hívok egy ilyen függvényt, és közben már nincs is kliens - akkor ha lejár a bindingban megadott timeout (2 perc, default 1 perc) kivételt dob, sőt addig a 2 percig még blokkol is (ezért indítottam még ennek is külön threadet és raktam try..catch blokkba
[ Szerkesztve ]
-
bpx
őstag
válasz Gregorius #1622 üzenetére
igen, erről is olvastam
csak átmenetileg oldotta meg a problémát, közben ugyanúgy megszívtam class-szal isúgyhogy segítséget kérnék
adott a következő szituáció:
IIS-en fut egy WCF szolgáltatás, amivel Silverlight kliensek kommunikálnak duplex módon
(silverlightos sakk, emberek belépnek a szerverre, majd egymás ellen tudnak játszani) - de ez lényegtelen, a konkurenciával van a gond
(azt szeretném észlelni, amikor meghal egy kliens, hogy a másik játékos ne csak üljön és várjon a semmire, hanem tudjam jelezni neki)
az ötlet a következőa szolgáltatásban van egy
static List<ClientInfo> clients;
private static readonly object syncLock = new object();ahol
public class ClientInfo
{
public string name; // játékos neve
public IChessClient client; // callback channel referencia
public DateTime lastreply; // utoljára mikor jött tőle válasz
}amikor a kliens hív a szerveren egy Login()-t, az csinál neki egy ClientInfo objektumot, és beteszi a listába
a szolgáltatás statikus konstruktorában csinálok 2 threadet:
- az egyik pl. 20 mp-ként küld egy kérést a klienseknek (PingRequest())
ezekre 1-2 mp múlva jön egy aszinkron válasz, mégpedig úgy, hogy a kliensek meghívják a szolgáltatás PingReply() fv-ét, ami bejegyzi a fenti listába, hogy most ebben az időpontban jött utoljára válasz adott klienstől- a másik meg pl. 60 mp-ként ellenőrzi a fenti clients listát, hogy kik azok, akik már mondjuk 2 perce nem válaszoltak
ezeket törli a clients listából, az ellenfelüket meg (ha van) értesítiahányszor hozzáférek a clients listához, mindig lock(syncLock)-ot használok a kölcsönös kizárás miatt
tehát 3 fő thread van (végrehajtó, "pingelő", ellenőrző)
a "végrehajtó" (Login(), PingReply()) csak ír
a "pingelő" csak olvas, és mindig helyes értéket lát
a probléma az ellenőrző threaddel van, ez olvassa és módosítja is a clients listátha csak 1 kliens van bejelentkezve, akkor minden megy rendben
ha több, akkor 1 db kliensnél nem látja a ClientInfo.lastreply aktuális értékét, hanem csak a létrehozáskori értéket (Login()) látja - viszont az összes többi kliensnél látja a friss értékeket
ez az 1 db ugye nem frissül, ha letelik X perc, a szerver úgy veszi hogy halott, törli
ilyenkor megint lesz 1 db másik, akinél nem látja az ezután érkező friss értékeket, őt is kiszórja
és ez így megy tovább, egyesével kiszór mindenkit amíg csak 1 játékos marad az egész szerveren, úgy hogy közben mindenki szépen válaszolt és folyamatosan volt kommunikáció, "ping"-re is jöttek válaszokha esetleg valaki eljutott volna idáig az olvasásban (), [link] van kód is, csupaszítva, csak a lényeget meghagyva
-
bpx
őstag
ma egy ~2 órás kínlódás után saját káromon megtanultam, hogy C#-ban a struct nem threadsafe, még szinkronizációval sem, sajátos működési elvéből adódóan
persze mikor már nagyon gyanús volt a dolog, rákerestem neten, aztán rögtön felvilágosodtam ...gondoltam egyszerűsítek és class helyett structot csinálok, mert csak pár változó összerakása volt a cél egy struktúrába mindenféle függvény nélkül, hát helyette jól megszivattam magam...
-
bpx
őstag
tessék, semmi double, char, semmi konverzió, de még indexof/substring se, mert ugye nem szabad/nem tanultátok...
lehet ezt csűrni-csavarni, meg a tanár hülyeségéhez ragaszkodni, és lesz egy ilyen förtelem belőle, inkább el se magyarázom, mert még elrettentő példának is sok és leírni is fájt :static void Main(string[] args)
{
Console.WriteLine("Kérem adjon meg 3 számot 1-5 között, vesszővel elválasztva: ");
string szamok = Console.ReadLine();
Console.WriteLine("Átlag: {0}", (szamok[0] + szamok[2] + szamok[4] - 144) / 3);
Console.ReadLine();
}hozzászólásaitok alapján többet tanulhattok az itteniektől, mint attól a tanártól valaha fogtok
-
bpx
őstag
hogyne lenne olyan connectionstring
SqlConnection-nél valóban nincs Provider, de OleDb-hez nem is SqlConnection kell
SqlConnection helyett OleDbConnection kell, és a többiből is Sql____ helyet OleDb____ osztályok kellenekez például tökéletesen lefut (csak ezt a részt piszkáltam, kicsit egyszerűsítettem + sűrítettem; de legalább produkál valami primitív működést )
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\adatok.mdb";
try
{
OleDbCommand command = new OleDbCommand("select termekneve from termekek where termekazonosito between 1 and 5", con);
con.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read()) { MessageBox.Show(reader[0].ToString()); }
reader.Close();
}
catch (Exception ex) { MessageBox.Show("hiba: " + ex.Message); }
finally { con.Close(); }viszont ehhez az adapteres mókához abszolút nem értek (és megtanulni sincs kedvem most, mert nemsokára lejár a munkaidő és indulok haza ), azt majd valaki még megmondja neked, hogy hogyan kell
[ Szerkesztve ]
-
bpx
őstag
válasz Vasinger! #1551 üzenetére
static void Main(string[] args)
{
int i;
string s = "K ov ác s Kálmán, 9999 Budapest, Rigó út 41.";
// a bemenet három részre bontható, melyeket a ", " karaktersorozat (1 vessző és 1 space) határol
string[] ss = s.Split(new string[] { ", " }, StringSplitOptions.None);
// első rész: vezetéknév + keresztnév
// feltesszük hogy a keresztnév egyben van, tehát az utolsó space után jön, így azt kell keresni
i = ss[0].LastIndexOf(' ');
// vezetéknév, space-eket kicseréli üres stringre, nagybetűs
Console.WriteLine(ss[0].Substring(0, i).Replace(" ", "").ToUpper());
// keresztnév, nagybetűs
Console.WriteLine(ss[0].Substring(i + 1).ToUpper());
// középső rész: irányítószám város (közöttük szóköz)
string[] cim1 = ss[1].Split(' ');
Console.WriteLine("{0} {1}", cim1[0], cim1[1]);
// utolsó rész, három részből áll: név típus házszám.
// felbontható három részre, a középső rész figyelmen kívül hagyható, helyette UTCA írható
string[] cim2 = ss[2].Split(' ');
Console.WriteLine("{0} UTCA {1}", cim2[0].ToUpper(), cim2[2]);
}mivel nincs valami pontosan specifikálva a feladat, a minimumra törekedtem, csak azt csináltam meg, amit említettél, és csak olyan bemenetre működik, amit példaként írtál (space lehet a vezetéknévben)
minimális változás a bemeneten, és már nem is működik, legyen vele valami dolgod neked is
(gondolok itt ilyenre pl. hogy vessző után nincs space, vagy az utca neve több tagból áll, pl. Petőfi Sándor utca 1.) -
bpx
őstag
válasz Vasinger! #1548 üzenetére
azt azért jó lenne tudni, hogy pontosan milyen formában jöhet a bemenet, mert a leírásnál arról szó sem volt, hogy a vezetéknévben "space-ek is lehetnek", csak úgy közben derült ki (van még más meglepetés is esetleg? )
illetve a példa amit írtál, nem illeszkedik a leírásra (2 felesleges szóköz)egyébként én inkább splittel szavakra bontanám, minthogy a substring/indexof kombóval szenvedjek
[ Szerkesztve ]
-
bpx
őstag
van az ADO.NET, ami nagyon röviden kb. annyi, hogy összeraksz egy SQL utasítást, és azt végrehajtod (vagy tárolt eljárást hívsz vele, stb.) (Java világból a JDBC-hez hasonlít)
ha pl. lekérdezés volt, kapsz egy eredményhalmazt, amiből ki lehet bányászni a dolgokat
példavagy ott a LinQ, aminél az adatbázistáblákat (sorokat) le lehet képezni objektumokká (és vissza), és magukon az objektumokon lehet programkódból egy SQL-hez nagyon hasonló szintaktikával mindenféle dolgot végrehajtani, de ehhez sztem többet kell olvasni, nem elég egy egyszerű példa [link]
-
bpx
őstag
-
bpx
őstag
igen, nyilván úgy kell
pl. 1. feladathoz 1 textbox amibe majd a 'mm' értéket lehet írni, mellé egy gomb, alá meg 2 másik textbox-
gomb eseménykezelőjébe (dupla klikk a gombon a szerkesztéshez) pedig:textBox2.Text = (Int32.Parse(textBox1.Text) / 1000.0).ToString();
textBox3.Text = (Int32.Parse(textBox1.Text) / 10.0).ToString();2. feladat
megint egy textbox + gomb, ennek az eseménykezelőjébe:
string mgh = "aáeéiíoóöőuúüű";
string gyum = textBox4.Text;
MessageBox.Show(mgh.Contains(gyum[0].ToString().ToLower()) ? "maganhangzo" : "massalhangzo");(messageboxban dobja fel a választ)
3. feladat
leraksz mondjuk egy listbox-ot, és a form Load eseményébe (duplaklikk a formon a szerkesztéshez):
for (int i = 12; i < 256; i++)
listBox1.Items.Add(i + ":\t" + (char)i);aztán lehet ezt még kozmetikázni, pl. a texboxok mellé label, hogy mit kell beírni/mi lesz ott, gombok szövegének átírása, 1. feladatban a 2 "kimeneti" textbox szerkesztésének letiltása, stb...
-
bpx
őstag
nem a legszebb, de legalább rövid
// 1. feladat
int tav;
Console.Write("Tavolsag mm-ben: ");
int.TryParse(Console.ReadLine(), out tav);
Console.WriteLine("{0} m, {1} cm, {2} mm", tav/100.0, tav/10.0, tav);
// 2. feladat
string mgh = "aáeéiíoóöőuúüű";
Console.Write("Gyumolcs: ");
string gyum = Console.ReadLine();
Console.WriteLine(mgh.Contains(gyum[0].ToString().ToLower()) ? "maganhangzo" : "massalhangzo");
// 3. feladat
for (int i = 12; i < 256; i++)
Console.Write("{0}: {1}\t", i, (char)i);
Console.WriteLine(); -
bpx
őstag
válasz ArchElf #1299 üzenetére
nem is kellettek ide napok
bme msdnaa -
-
bpx
őstag
válasz Vasinger! #1207 üzenetére
i változó totál felesleges, nem is használja semmi, és ebben a formában az IndexOf a "0,1" string-et keresi, aminek hát semmi értelme...
string s2 = s[0].ToString().ToUpper() + s.Substring(1);
veszi az első karaktert amit nagybetűsre cserél, majd a maradékot érintetlenül
-
bpx
őstag
válasz Briganti #1198 üzenetére
szerintem arra gondolt, hogy a query stringet hivatalosan nem így szokás "összeollózni" változóbehelyettesítéssel, hanem van egy kész query stringed, amiben jelölöd hogy mik a paraméterek, majd a megfelelő függvényekkel megadod, hogy melyik paraméter helyére melyik változót értéke kerüljön (ami azért jobb így, mert le lesz ellenőrizve, hogy mi kerül oda, és ezáltal véd az sql-injection ellen)
no meg valamennyire olvashatóbb is lesz szerintem
[ Szerkesztve ]
-
bpx
őstag
válasz Vasinger! #1167 üzenetére
ezügyben már írtál ide egyszer^^
beírod a szöveget, a program feldolgozza, kiírja az eredményt, majd kilép, mert nincs más dolga - ez olyan gyorsan történik, hogy nem látsz belőle semmit, csak azt hogy kilép- indíthatod debug nélkül (Ctrl + F5), és akkor a végén még vár egy bármilyen billentyűleütésre
- vagy beírsz a program legvégére egy Console.Readline()-t és akkor még vár egy enterre mielőtt kilépne[ Szerkesztve ]
-
bpx
őstag
válasz Vasinger! #1164 üzenetére
1.
string nev ="Dr. " + Console.Readline();2.
string szoveg = Console.ReadLine();
for (int i = 0; i < szoveg.Length; )
{
if (szoveg[i] == ' ')
{
szoveg = szoveg.Remove(i, 1);
continue;
}
i++;
}
Console.WriteLine("{0} karakter", szoveg.Length);3.
string nev = Console.ReadLine();
nev = nev.Substring(nev.LastIndexOf(' ') + 1); -
bpx
őstag
válasz Vasinger! #1162 üzenetére
1. beolvasás Console.ReadLine()-nal
stringeken működik a + operátor, azzal össze lehet fűzni őket2. pl. egy ciklussal végigmész a karaktereken egyesével (a string-et lehet indexelni, ami egy karaktert ad vissza - szoveg[0]), és ha szóköz, akkor törlöd (string.Remove())
végén meg string.Length megadja a string hosszát3. megkeresed az utolsó szóközt (string.LastIndexOf(' '), így a dupla vezetéknevekre is működik), és a string utána levő részét veszed (string.SubString())
[ Szerkesztve ]
-
bpx
őstag
én csak azt láttam, hogy az eventben, amit használtál nem lehet kideríteni, hogy melyik billentyűt nyomták le
hogy hogyan lehet char-ból virtuális key-t csinálni? az jó kérdés, ezt a részt nem ismerem annyira, lehet hogy van vmi pofonegyszerű megoldás .NET-ben, amiről nem tudok
lehet pl. olyat, hogy csinálsz egy asszociatív adatszerkezetet (Dictionary, HashTable, ami épp tetszik), amiben előre eltárolod a konstansokat, és a kapott char-ral címzed
-
bpx
őstag
ne a TextChanged event-et használd, hanem a KeyPress-t
annak van KeyPressEventArgs e argumentuma, ahol az e.KeyChar-ral megkapod hogy mi volt a lenyomott karakter (csak valós karakterekre működik, char típust ad vissza, neked kell belőle Key-t "varázsolni" - ha ctrl,alt,shift, stb vezérlőkarakterek is kellenek, akkor KeyDown/KeyUp eventek, és e.KeyData) -
bpx
őstag
válasz ArchElf #1060 üzenetére
a működés logikája az helyes, template nélkül működik rendesen
ez inkább szintaktikai kérdés
amit nem értek, hogy a ChannelListenernél a TChannel-re meg van adva hogy az egy class, IChannel, akkor ha paraméterként átadom a példányt, akkor miért kapok olyan hibaüzenetet, hogy a TChannelt nem tudja IChannelre konvertálni -
bpx
őstag
adott az alábbi kód/osztályok:
abstract class UdpTransportManager
{
...
public static UdpTransportManager LookUp(UdpChannelListener<IChannel> channelListener)
{ ... }
....
}
public class UdpChannelListener<TChannel> : ChannelListenerBase<TChannel> where TChannel : class, IChannel
{
...
protected override void OnOpen(TimeSpan timeout)
{
...
UdpTransportManager transportManager = UdpTransportManager.LookUp(this);
...
}
...
}na most itt a LookUp hívásakor, nekem azt mondja, hogy a TChannel-t nem tudja IChannel-re konvertálni
ezzel most így mit lehet kezdeni/hol a hiba?explicit kasztolással nyilván lefordul, de úgy nem működik
[ Szerkesztve ]
-
bpx
őstag
először meghívja a 2 paraméteres konstruktort (az ami a this mögött van), utána meg az eredetit amit a példányosításnál hívtál (1 paraméteres)
most így hirtelen nem tudok értelmes gyakorlati példát mondani, de pl. akkor érdemes használni, ha egy osztálynak több konstruktora is van, többféleképp is lehet példányosítani, és a konstruktorok egy bizonyos részig ugyanazt csinálják
ekkor érdemes kivenni ezt a közös részt külön, és ahelyett hogy többször kellene ugyanazt leírni, elég csak a : this-el hivatkozni ráde egyébként ez le sem fordul, mert a 10.0 az double
[ Szerkesztve ]
-
bpx
őstag
osztályokhoz olvasd el ezt: [link]
feladathoz:
class SzovegKezelo
{
string szoveg;
int hossz;
public SzovegKezelo()
{
szoveg = "Hello";
hossz = szoveg.Length;
}
public int SzovegHossz()
{
return hossz;
}
}
class Program
{
static void Main(string[] args)
{
SzovegKezelo szk = new SzovegKezelo();
Console.WriteLine(szk.SzovegHossz());
}
}
Ú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!
Állásajánlatok
Cég: Axon Labs Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest