- Telekom mobilszolgáltatások
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Mobil flották
- Okosóra és okoskiegészítő topik
- Google Pixel 9 Pro XL - hét szűk esztendő
- Akciófigyelő: Jelentősen olcsóbban nyit az Ulefone új mindenese
- India felől közelít egy 7550 mAh-s Redmi
- VoLTE/VoWiFi
- One mobilszolgáltatások
- Samsung Galaxy Watch7 - kötelező kör
Új hozzászólás Aktív témák
-
dqdb
nagyúr
a command.CommandText nem a behelyettesített értéket adja vissza
Az a property a beállított parancsot adja vissza, amiben paraméterek szerepelnek konkrét értékek helyett. A paraméterek behelyettesítése a szerveren fog megtörténni a már parse-olt SQL parancs felhasználásával, így a komplett parancs olyan szöveges formában, ahogyan te szeretted volna, sosem létezik. -
fatal`
titán
Így azt küldöd be az SqlQuerynek hogy 't.Nev' mint érték (stringként), arra meg gondolom nem talál rekordot.
Ez paraméterrel nem működik (így nem lenne értelme a paraméternek), különben így lehetne SQL Injectiont csinálni.
NULL-ra meg egyébként sem működik, mert a WHERE x = NULL feltétel az mindig hamis lesz, ilyenkor az IS NULL-t kell használni SQL-ben.
-
sztanozs
veterán
lehet, hogy aposztroffal együtt van letárolva a név a mezőben.
Amúgy szerintem így nem működik a null értékre. Az sql query nem az lesz, hogySELECT t.ID, t.Nev, t.NettoAr, t.Raktarkeszlet, a.Kulcs, k.Nev as Kategoria FROM Termek t LEFT OUTER JOIN AFA a on t.AFAID = a.ID LEFT OUTER JOIN Kategoria k on t.ID = k.ID WHERE t.Nev = t.Nev
hanemSELECT t.ID, t.Nev, t.NettoAr, t.Raktarkeszlet, a.Kulcs, k.Nev as Kategoria FROM Termek t LEFT OUTER JOIN AFA a on t.AFAID = a.ID LEFT OUTER JOIN Kategoria k on t.ID = k.ID WHERE t.Nev = "t.Nev"
-
Alexios
veterán
Mert ha Add(i,j)-ként akarod hozzáadni, akkor két( a példából kiindulva gondolom int) paramétert akarsz átadni, ahelyett, hogy egy kétdimenziós tömböt adnál - ami már más overload lenne. Szóval ha mindenképp így akarod tárolni az elemeket akkor pl. lista.Add(new int[i,j])
-
Karma
félisten
Most hogy mondod, van egy hiba az eredeti bemásolt kódodban is: ha eltérő hosszúságú a két szám, akkor indexelési hiba lesz a vége. A PadLeft metódussal "fel tudod tölteni" nullákkal a rövidebbet, hogy egyenlő hosszúak legyenek.
Egyébként javaslom a debugger használatát, amikor az exception történik és felrobban a program, meg tudod nézni, mik voltak az egyes változókban.
-
lord.lakli
őstag
-
cattus
addikt
A (carry ? 1 : 0) az if-else rövidített alakja. Ebben az esetben tehát a sum értéke egyel növekszik, ha a carry igaz, 0-val, ha hamis.
-
Karma
félisten
A carry összeadásnál a túlcsordulást jelenti. A program az általános iskolai összeadást valósítja meg, tehát a legkisebb helyiértéktől kezdve, egyesével összeadja a számjegyeket, és ha az összeg nagyobb 9-nél, a következő helyiérték plusz eggyel nő. Ezt tárolja a carry változóban.
-
Dinter
addikt
Egy verseny nevezéseit feldolgozó szoftvert kellett csinálni. 4 kategóriában nevezhettek, 3 fős csapatot alkottak, meg kellett adni a megyét, az iskolát. Létrehoztam egy Nevezesek osztályt és hozzá a property-ket. A nevezes() példányokat egy listában tároltam. A feladat az volt, hogy minden megyében megkeresni az 1-es kategóriákban azokat az iskolákat, ahonnan a legtöbben neveztek, ha pedig ugyanannyian, akkor lehessen közülük választani.
Ez most pszeudokódban leírva hogy nézne ki? Én csak egy külön listába tudtam kiszedni a megyéket, aztán az iskolákat, majd úgy gondoltam, hogy létrehozok egy int[] tömböt, ahol számolom, hogy melyik iskolából hány nevezés van ( az iskolák indexe és az tömb indexe ugyanaz) és ha a külön listába kigyűjtött iskola neve megegyezik a nevezésekben eltárolt iskola nevével, akkor a tömb ahhoz az eleméhez hozzáadok egyet, ami az iskola indexe, aztán már csak egy max keresés.
Amúgy mi a suliban Visual Studiot használunk(C#), az összes többiben meg kb. Code:: Blocks-ot használnak, melyik a jobb?
-
sztanozs
veterán
Az egy formon belüli tevékenységeket én nem tenném amúgy külön osztályba - főleg ha form manipulációt is tartalmaz a függvény.
Amit te csinálsz az az, hogy létrehozol még egy Form1-et és azon módosítasz.
Azt kellene csinálnod, hogy átadon a Regisztralas függvényben a már létező Form1 objektum hivatkozását, és azon dolgoznál.regisztracio.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DANET
{
class Regisztracio
{
public static void Regisztralas(frm Form1)
{
frm.regpanel.Visible = true;
}
}
} -
Dinter
addikt
Más problémám van,, mivel egy felhasználóhoz tartozó adat 4 sorban van, csak 4 új soronként kell létrehoznom új felhasznalo-t, illetve az adatokat is ez alapján tárolni. A tárolást még meg is tudom oldani ha egy for ciklussal végigmegyek, és a maradék alapján állapítom meg, hogy mi, viszont a létrehozását nem tudom hogy kéne.
-
Karma
félisten
-
haromegesz14
aktív tag
-
vlevi
nagyúr
Össze kell joinolni a két listát.
[link]
Csináltam egy mórickaprogit, ami ugyanezt csinálja.class Program
{
class Dolgozo
{
public String nev;
public int ID;
}
class Projekt
{
public int dolgozoID;
public int projekt;
}
static void Main(string[] args)
{
List<Dolgozo> dolgozok = new List<Dolgozo>();
dolgozok.Add(new Dolgozo { nev = "Béla", ID=1 });
dolgozok.Add(new Dolgozo { nev = "József", ID=2 });
dolgozok.Add(new Dolgozo { nev = "István", ID=3 });
dolgozok.Add(new Dolgozo { nev = "Lajos", ID=4 });
List<Projekt> projektek = new List<Projekt>();
projektek.Add(new Projekt { dolgozoID = 1, projekt = 10 });
projektek.Add(new Projekt { dolgozoID = 3, projekt = 5 });
projektek.Add(new Projekt { dolgozoID = 4, projekt = 7 });
var projektlista = from dolg in dolgozok
from proj in projektek
where dolg.ID == proj.dolgozoID
orderby proj.projekt
select new { dolg.ID, dolg.nev, proj.projekt }
;
foreach (var item in projektlista)
{
Console.WriteLine(item.ID+" "+item.nev+" "+item.projekt);
}
Console.ReadKey();
}
}A lényeg középen van, a projektlista-ban
var projektlista = from dolg in dolgozok
from proj in projektek
where dolg.ID == proj.dolgozoID
orderby proj.projekt
select new { dolg.ID, dolg.nev, proj.projekt }
; -
kingabo
őstag
Gondolom, ha a listában sima intek lennének simán menne a rendezés, ugye? Ha igen, akkor a rendezésnél használt feltétel úgy módosul, hogy nem a lista adott elemeit hasonlítod össze(2 int), hanem a két elem 1-1 propertijét: Projects.Count.
A te megoldásodnak is működnie kéne, valszeg valamit rosszul írtál meg. Igaz rettentően bonyolult és sok a fölösleges munka. Ettől függetlenül gyakorlásnak jó lehet.
-
Karma
félisten
A feltételezésed nettó tárgyi tévedés, semmi ilyen fekete mágia nem történik. Valószínűleg elcsúsztak az indexek a feltételben, és a sornak nincs ötödik eleme.
Kérlek kezdd el végre használni a Visual Studio debugger funkcióját, tégy egy breakpointot a problémás sorra, és meg tudod nézni hogy melyik változóban milyen értékek vannak.
-
Karma
félisten
Akkor tehát az volt a hiba, amire gondoltam. Ha más változónevet használsz a foreachben, akkor nem lesz ütközés, és hiba se.
Ezt a versenyt nem ismerem, de mivel sehol se írják konkrétan, szerintem a szöveges felületet is el kellene fogadniuk. Azért megkérdeznék róla egy másik versenyzőt, egy szervezőt vagy neadjisten egy infótanárt.
-
-
Karma
félisten
Húha. A belinkelt kódodban egyetlen Dolgozo példányt hozol létre, amit valamiért "dolgozok" nevű változóba raksz, és ennek tragikus következményei vannak a folytatásra nézve. Ha debuggerrel megnéznéd a listádat, akkor azt látnád, hogy bár annyi eleme van a listának, mint ahány sorod volt a szövegfájlban, mindegyik elem ugyanaz (a legutolsó rekord a fájlban).
Minden sorhoz új Dolgozo példányra van szükséged, lásd itt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace dolgozok
{
struct Dolgozo
{
public int id;
public string nev;
public string pw;
public bool vezeto;
}
class Program
{
static void Main(string[] args)
{
List<Dolgozo> lista = new List<Dolgozo>();
string line;
using (StreamReader sr = new StreamReader("dolgozok.txt"))
{
while ((line=sr.ReadLine())!=null)
{
var sor = line.Split(':');
Dolgozo dolgozo = new Dolgozo();
dolgozo.id = Convert.ToInt32(sor[0]);
dolgozo.nev = sor[1];
dolgozo.pw = sor[2];
dolgozo.vezeto = Convert.ToInt32(sor[3]) == 0;
lista.Add(dolgozo);
}
}
Console.ReadKey();
}
}
}A nevezéktanba és a kisbetű-nagybetű dolgokba nem akartam belenyúlni, de lenne mit javítani azon a fronton. És egyébként az elején létrehozott string[4]-re sincs semmi szükség, mert a Split mindig újat hoz létre.
---
Az ide másolt kódban el tudnád mondani, mégis milyen indíttatásból csináltál hatos ciklusokat; és miért kéred be ennyiszer a nevet és a jelszót? A sorrend kicsit rossz, de ha a fejedben helyrerakod a lépések sorozatát, szerintem gyorsan rájössz a megoldásra. For ciklus nem lesz benne, és indexekkel se kell játszadoznod – a kérdés ugyanis az, hogy "van-e olyan Dolgozo a lista-ban, akinek a neve és a jelszava egyezik a megadott értékekkel?".
Athlon64+: Én úgy látom, az OP kérdés minden része le lett fedve.
De majd szól, ha valami kimaradt. -
Karma
félisten
"ezzel a módszerrel mindenképp egyből be kell töltenem egy másik stringbe, és a stringet splitelem?"
Itt azért fékezzünk egy kicsit. Azzal, hogy egy lokális változót vezetsz be a stringnek, még nem "töltesz" semmit sehová, és véletlenül sem lesz kettő stringed. Egyetlen példány létezik belőle, amit a ReadLine visszaadott, függetlenül attól, hogy hány néven nevezed.
A vlevi és martonx által leírt megoldás a helyes alapvetően.
Ha mindenképp meg akarnád spórolni azt a string változót, akkor a C# 6-os null-safe invocationnel meg lehet oldani tömörebben, de szerintem ennek nincs előnye ebben az esetben, viszont nehezebben olvasható.
while ((var sor = sr.ReadLine()?.Split(':')) != null)
{
// ...valami a sorral (String[])...
} -
-
Dinter
addikt
Azt hiszem rájöttem. Amikor másodszor is használom a while-lon belül (előtte a feltételben), akkor a következő sorra ugrik. Van valami módja, hogy a ReadLine tartalmát egyből spliteljem(a feltételben hibát ad), vagy ezzel a módszerrel mindenképp egyből be kell töltenem egy másik stringbe, és a stringet splitelem? Vagy simán átírom a feltételt !sr.EndOfStream-re Az a kérdésem továbbra is áll, hogy melyik módszer a legjobb?
-
Alexios
veterán
Azért csak az utolsó marad mert itt:
sorok=sor.Split(' ').ToList();
Mindig felülírod a sorok listát egy új listával.
A split metódus egy tömböt hoz létre ami a felosztás utáni stringeket tartalmazza. Ebből a ToList-el csinálsz egy string típusú listát, lényegében a tömböt alakítod át listává. A sorok=sor.Split kóddal nem hozzá adod a listához új értékként, hanem azt mondod hogy a sorok erre a listára mutasson. Vagy csinálsz egy listát ami List<string> típust fogad és abba rakod bele a .Add metódussal, vagy szebb megoldásként csinálhatsz pl. egy osztályt amibe beolvasod az árfolyamokat és ezeket rakod a listába. -
sztanozs
veterán
Én csinálnék egy Struct-ot, ami a kereszteződéseket jelöli (négy irány, melyik szabad), utána pedig egy A*-ot kell ráereszteni.
De mindenféle trükközés nélkül - ezt az infót eltárolva (honnan hova tilos) is lehet a*-ot számolgatni, nem kell felépíteni az egész hálózatot...
-
kingabo
őstag
A StreamReadert és minden IDisposable-t using blokkban használd!
Nem látok a kódodban sehol sem egy ciklust sem. Ahova írni akartad volna ott a streamből kiolvasol mindent, majd "eldobod", majd ezek után megint olvasni akarsz a stream vége után...
Ha nem azt csinálja a progi amit kéne, akkor vagy debug, vagy nézd végig, hogy mit írtál. Ne azt nézd, hogy mit akartál írni, hanem, hogy mi írtál!
szerk: lassu voltam.
Jester01: van EndOfStream is, azzal közelebb áll az eredeti gondolat menethez. -
Jester01
veterán
Az olv.ReadToEnd(); az beolvassa a fájl összes hátralévő sorát egy stringbe,amit nem használsz fel. A readLine() utána már nem ad semmit.
Neked valami olyasmi kellhet például, hogystring line;
while((line = olv.ReadLine()) != null)
{
int x=int.Parse(line);
vanOr[x] = true;
} -
Nem, enumeratorral.
class MainClass
{
static int [,,] nestedArray= new int[10,10,10];
public static void Main (string[] args)
{
Random r = new Random ();
for (int i = 0; i < 10; ++i)
for (int j = 0; j < 10; ++j)
for (int k = 0; k < 10; ++k)
nestedArray [i,j,k] = r.Next ();
var e = nestedArray.GetEnumerator ();
while (e.MoveNext ())
Console.Write (" {0}",e.Current);
}
} -
zuzu000
őstag
static int[] MibőlMennyi(string[] szavak, char[] karakterek)
{
int[] mimennyi = new int[karakterek.Length];
for (int i = 0; i < szavak.Length; i++)
{
for (int i2 = 0; i2 < karakterek.Length; i2++)
{
if ((szavak[i].Count(x => x == karakterek[i2]) > mimennyi[i2]))
mimennyi[i2]++;
}
}
return mimennyi;
}szavak[0] = "abcd"
szavak[1] = "abb"
karakterek = a,b,c,d
Meg szeretném számolni, hogy miből hány darab van, és egy int[] tömbbe betenni a mennyiségeket. De valamiért a mimennyi[] így néz ki : 1,1,1,1,0,0,0,.. stb.
Tehát mintha minden karakterből csak egyet talált volna, ami szavak[0]-ra jó is, de b-ből kettő van szavak[1]-ben. -
Karma
félisten
A változók fogalmának fuss neki még egyszer. Futásidőben ez nem fog így működni - Jester01-nél a pont, hogy listára vagy dictionaryre lesz szükséged. A kettő közötti választás feladatfüggő.
Kiegészíteném azzal, hogy a string[]-ökkel való zsonglőrködés helyett sokkal jobban jársz, ha csinálsz egy osztályt a felhasználóknak, és minden későbbi lépésnél ezt használod alapként. A stringfétis, ahogy egy néhai kollégám hívta, veszélyes gyakorlat. Inkább ne hagyd magadban kialakulni.
Szóval a következő lépéseket javaslom egy nagyon naiv megoldáshoz(*):
1) Csinálj egy User osztályt négy adattaggal.
2) Írj egy olyan metódust valahova, ami egy beolvasott sorból User példányt csinál (ezen belülre rakhatod a Split hívást és az adattagok feltöltését).
3) Írj egy olyan metódust, ami paraméterként kap egy StreamReadert, while ciklusban (amíg van mit olvasni), a ReadLine metódussal felolvas egy sort, az előzőleg megírt metódussal Usert gyárt belőle, és berakja egy List<User>-be. A végén visszaadja ezt a listát.
4) Ezt a metódust meghívod a fájllal, és máris előállt minden felhasználó adata.(*): Nem tudom, hogy folytatódik a feladat. Ha csak a belépéshez kell a fájl tartalma, akkor jobban megérheti egy olyan konstrukció, ami nem nyalja fel memóriába a listát egyszerre, hanem mindig csak az aktuális, egy sornyi Usert ellenőrzi, és ha illeszkedik a név/jelszó párra, visszaadja.
-
Karma
félisten
A legegyszerűbb és legbizonytalanabb az, ha \t tab karakterekkel választod el az oszlopokat (pl. string.Join metódussal összefűzve), aztán kiírod soronként.
Ha ismered előre az oszlopokat, akkor a string.Formatnak oszloponként meg tudod adni, hogy hány karakterre paddelje ki az értéket, és balra vagy jobbra igazítva szeretnéd. {0, X} vagy {0, -X}
Ha nem ismered őket, a string.PadLeft és a .PadRight segíthet.
-
Szabesz
őstag
Az eddigiek alapján egy memória zabáló vírust akarsz írni. Ragyogó.
Ráadásul taskngr.exe a már foglalt.
-
Karma
félisten
Akkor ideje végre leírnod, hogy mit is szeretnél pontosan. Először memóriát akartál foglalni, lett is rá megoldás, aztán bejött a MemoryFailPoint, nem volt jó, még egy foglalás, nem volt jó...
Egyébként meg hót egyszerű a MemoryFailPoint használata: csak a konstruktornak meg kell adnod, hogy mennyi memóriát szeretnél biztosítani, aztán ha végeztél, Dispose (vagy használhatsz using blokkot is). Természetesen try blokkba kell tenned, hogy az exceptiont lekezelhesd, ha nem állna rendelkezésre ekkora heapszelet.
De ez mind le van írva az MSDN-en, még csak nem is érthetetlenül.
-
amargo
addikt
Azért nincs benne olyan sok new kulcs szó. Meg aztán a kommentek is beszédesek.
Azért Jester01 segítségével már meg lehet találni.
A programból egy részlet, ami elég beszédes, hogy miért akar valamit távolt tartani a GC-től:// A real thread would use the byte[],
// but to be an illustrative sample,
// explicitly keep the byte[] alive to help exhaust the memory.
GC.KeepAlive([B]bytes[/B]); -
amargo
addikt
Sokszor egyszerűbb lenne, ha nem kellene találgatni.
MemoryFailPoint -
sztanozs
veterán
Akkor a tömb a változó-iadik elemet adja vissza a tömbből. Ha ez több, vagy kevesebb, mint a tömb legkisebb (alapértelmezetten 0) vagy legnagyobb (alapértelmezetten az elemek száma-1), akkor hibát dob (kevésbe "kényes" fejlesztői nyelvek esetén beg buffer overflow lesz az eredmény)
-
fatal`
titán
using System;
class Program
{
public static void Main(string[] args)
{
int[] tomb = new int[10];
Random r = new Random();
for (int i = 0; i < tomb.length; i++)
{
tomb[i] = r.Next(1, 1000);
}
int min = tomb[0];
int max = tomb[0];
int minIndex = 0;
int maxIndex = 0;
for (int i = 1; i < tomb.length; i++)
{
if (tomb[i] < min)
{
min = tomb[i];
minIndex = i;
}
if (tomb[i] > max)
{
max = tomb[i];
maxIndex = i;
}
}
}
} -
xxSanchez
őstag
Akkor írja ki, ha szöveget írnál a programodba és ettől lefagy? Rakd be Try közé, vagy simán csak a számokat engedélyezd.
int szorzas = 0;
string szorzo = String.Empty;
do
{
Console.Write("Üdvözöllek. Ez egy szorzótábla. Írj be egy számot, és én kiírom neked a szorzatokat 10-ig: ");
szorzo = Console.ReadLine();
try
{
szorzas = int.Parse(szorzo);
}
catch
{
Console.WriteLine("Csak számokat írj");
}
} while (szorzo.Length == 0 || szorzas == 0);
for (int i = 0; i <= 10; ++i)
{
Console.WriteLine("{0}×{1}={2}", i, szorzo, i * szorzas);
}
Console.ReadKey(); -
kispx
addikt
Ismétli önmagát, mert végtelen ciklust írtál:
} while (szorzo.Length == 0 || [B]szorzas == 0[/B]);
A szorzas nevű változónak csak kezdőértéket adtál, a programban ezen az egy értékadástól eltekintve nem módosul az értéke. Tehát az értéke mindig 0.
Emiatt a ciklusfeltétel értéke mindig igaz lesz:
igaz || igaz == igaz
hamis || igaz == igazTehát a ciklus sosem fejeződik be.
-
Karma
félisten
Hát igen, null referencián nem könnyű hosszot mérni. Inicializáld a változóidat! Mondjuk String.Empty-vel a szamot, a szorzast meg nullával.
Nem feltétlen így csinálnám a while ciklust, de abba nem akarok beleszólni. Na jó, mégis: a szamra semmi szükséged kívül, elég ha a szorzas látszik a while cikluson kívül. (Amit egyébként szorzonak is hívhatnál.)
És a do while is teljesen jogos.
Convert.ToInt32() helyett meg int.TryParse()-ra szavaznék. Egy kicsit más a szintaxisa, de legalább nem tud robbanni, és nem drótozol be vele változóméretet se.
Csak nálam nem működik Chrome alatt a Monospace?
-
kispx
addikt
A linkelt honlapról az idevágó rész:
Console.Write("Az egész változó értéke: ");
egész = Convert.ToInt32(Console.ReadLine());helyett
string [B]x[/B] = Console.ReadLine()
//leellenőrizzük, hogy a hossza nem nulla, ha igen akkor hiba
egész = Convert.ToInt32[B](x)[/B];
// leellenőrizzük, hogy 0-át irt be, ha igen akkor hiba
Ú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!
- AKCIÓ! Apple MacBook Pro 16 M4 Pro - M4 Pro 24GB 512GB SSD garanciával hibátlan működéssel
- Geforce GTX 1050, 1050 Ti, 1060, 1650, 1660 - GT 1030 - Low profile is (LP)
- AKCIÓ! AMD Ryzen 9 3900X 12 mag 24 szál processzor garanciával hibátlan működéssel
- Jogtiszta Microsoft Windows / Office / Stb.
- LG 27GR93U-B - 27" IPS - UHD 4K - 144Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDR 400
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest