Erre gondoltam...
static void Main(string[] args)
{
int n;
try
{
n = 10;
}
catch
{
// valami
}
Console.WriteLine(n);
}
Error : Use of unassigned local variable 'n'
-.-
Erre gondoltam...
static void Main(string[] args)
{
int n;
try
{
n = 10;
}
catch
{
// valami
}
Console.WriteLine(n);
}
Error : Use of unassigned local variable 'n'
-.-
static void Main(string[] args)
{
int? n;
try
{
//n = 10;
n = int.Parse(Console.ReadLine());
}
catch
{
n = null;
// valami
}
if (n == null)
Console.WriteLine("Valami hiba történt.");
else
Console.WriteLine(n);
}
int? -> nullable integer (olyan int, ami nem csak szám-értéket, de null-t is felvehet)
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
De ha a cath-ben nem állítom null-ra akkor elszáll ? ?
-.-
Persze, mert a fordító figyel arra, hogy mindenféleképp kapjon értéket.
Ugyanezért nem jó a következő funkció sem
int RosszFunkcio(bool b)
{
int n;
if (b)
{
n = 10;
}
return n;
}
Mivel az if mindkét ága nincs kidolgozva (else ág), így elképzelhető, hogy az n nem kap értéket (mert a függvényt false értékkel hívtuk meg).
Ezért sír a fordító, hogy:
Error 1 Use of unassigned local variable 'n'
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
Nagyon szépen köszönöm neked, hogy elmagyaráztad !
-.-
Valamit nagyon felre ertesz.. Keresdmeg Reiter Istvan konyvet es olvasd el parszol vedd vegig a feladatokat.
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
Mit értettem félre ? = )
Csupán annyira voltam kíváncsi,hogyha csak a try-ágban adok értéket akkor mi a hiba oka.
És segítőkészen el is lett magyarázva : )
Egyébként megfogadom a tanácsod ! Elolvasom!
Köszi !
-.-
Azt értetted félre, hogy az elolvasással kellett volnakezdeni
Én kérek elnézést!
Ok... === )
-.-
Sziasztok!
Nem túl régóta foglalkozom a c#-al így gyakorlásképp kitaláltam magamnak egy feladatot amit konzolon akarok kivitelezni.
Egy nagyon egyszerű bevásárló program lenne, van 4 darab termék amit a kosárba lehet pakolni, minden kiválasztás után lehetőségünk van új termék hozzáadásához, és dönthetünk arról hogy befejezzük-e a vásárlást vagy sem.
Röviden ennyi, de amivel gondom van az a következő:
A termékek előtt egy szám áll (1-4) és egy switch case szerkezettel adom meg hogy mit választok. A probléma az, hogy készítettem egy kosár nevű string-et, amibe beírja a választott terméket, ez működik is egy terméknél, de ha választok egy másik terméket is, akkor az nem hozzáadja, hanem felülírja az előzőt.
Itt a kód részlet, ha ez nem elég bemásolhatom az egész kódot is de hosszú lenne:
string kosar= "Termékekek: ";
switch (valasztas)
{
case 1: kosar += "Egér, ";
break;
case 2: kosar += "Hangfal, ";
break;
case 3: kosar += "Billentyűzet, ";
break;
case 4: kosar += "Monitor, ";
break;
}
A "valasztas" változóba kérem be a számot 1-4 ig és azt szeretném, hogy a kosár nevű stringhez minden egyes alkalommal fűzze hozzá az aktuálisan választott elemet, de csak felülírja a már kiválasztott elemet.
Nem tudom ezt meg lehet-e oldani így switch case-ben vagy sem, de ha igen akkor megköszönnék egy kódrészletet vagy magyarázatot!
Helló!
Megpróbálok segíteni, de lehet engem is leoltanak
Annyi biztos, hogy stringhez hozzáfűzni a String.Builder.Append -el lehetséges.
Tehát ne stringet hozz létre neki, hanem egy stringbuildert.
Szerintem a hamarosan kapsz még segítséget
-.-
Csináltam egy gyors példát, hogy hogyan kell használni a StringBuildert:
StringBuilder fuzz = new StringBuilder();
fuzz.Append("alma");
Console.WriteLine(fuzz);
Console.WriteLine("Adja meg egy terméket : ");
string t = Console.ReadLine();
fuzz.Append(t);
Console.WriteLine(fuzz);
Ha utána akarod fűzni , akkor Append, ha elé akkor meg Insert-et hívsz.
Remélem segített.
[ Szerkesztve ]
-.-
Marha egyszerű: a switch ág előtt mindig létrehozol egy kosarat és ahhoz teszed hozzá. A main fv előtt deklaráld privát adattagként.
(#2811) ubid:
"Annyi biztos, hogy stringhez hozzáfűzni a String.Builder.Append -el lehetséges."
Ahogy írtal úgy is lehet stringeket összefűzni.
[ Szerkesztve ]
A jó szándékod dicséretes, kár hogy nem a valódi hibát javítottad ki.
Azaz stringet is lehet összefűzni, miért ne lehetne.
Én kérek elnézést!
rossz helyed deklaráltad a változódat, ezért íródik felül. Ha már gyakorolsz, gyakorold a debug-ot, és akkor nem fogsz triviálist kérdezni.
Én kérek elnézést!
Miért nem a valódi hibát javítja ? : )
A baja az volt, hogy nem fűzte hozzá a string-et , hanem lecserélte.
Ez is egy lehetséges megoldása, mint most már én is tudom, nem ez a legegyszerűbb.
-.-
Azért, mert ha ugyanígy oldja meg StringBuilder-rel (switch előtt inicializálja a korár változót), akkor is ugyanígy fog működni.
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
Értem ! Köszi !
Ezt valaki el tudja magyarázni, hogy pontosan miért történik így ?
-.-
Így működik:
string kosar= "Termékekek: ";
int valasztas;
string rl;
while((rl = Console.ReadLine())!="")
{
if (!inint.TryParse(rl, out valasztas)) continue;
switch (valasztas)
{
case 1: kosar += "Egér, ";
break;
case 2: kosar += "Hangfal, ";
break;
case 3: kosar += "Billentyűzet, ";
break;
case 4: kosar += "Monitor, ";
break;
case else:
break;
}
}
Az előző azért nem működik, mert a string kosar= "Termékekek: "; mindig újra inicializálja a kosar változót. Amúgy mivel a kód többi része nem is látható, nem is tudom elképzelni, hogy volt többször lefuttatható a switch rész.
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
köszi!
Már csak ezzel az egy sorral nem vagyok tisztába.
if (!inint.TryParse(rl, out valasztas))
A tryparse-ot ismerem. De ez az inint nem világos.
Meg ha már itt tartunk akkor az out paraméterrel se vagyok kibékülve. (arról már olvastam, de nem világos a használta,hogy mikor kell )
-.-
Közben kérdeznék még egyet.
Google-ba kerestem, de nem találtam rá értelmes leírást :
Érték típusoknál mikor érdemes vagy kell használni suffix-et ?
-.-
ubid kérdéseire a válaszok engem is érdekelnének.
ArchElf:
"Amúgy mivel a kód többi része nem is látható, nem is tudom elképzelni, hogy volt többször lefuttatható a switch rész."
goto címke paranncsal
Tehát ha azt választja a felhasználó hogy igen újra akar választani a termékek közül akkor arra van egy switch i vagy n elágazás és ha i-t nyom akkor goto címkét használok.
A hibát egyébként megoldottam, tényleg rossz helyen volt a változó deklarálva, csak nem vettem észre. Pedig szinte mindig szoktam használni a debugot de ez esetben ez kimaradt a használata.
Még lenn még egy kérdésem, ha már ezt így megoldottuk:
int valasztas;
valasztas = int.Parse(Console.ReadLine());
Itt kérem be azt a számot ami a termékek száma. Magyarul amit választani akarok.
Az lenne kérdésem, hogy itt szükséges parse-olni vagy megoldhatnám parse nélkül?
A fontosabb dolog amire a választ kérném, mivel nem használtam még sok kivételkezelést, így nem igazán vagyok otthonos benne.
Szóval a fenti int.Parse-os sornál szeretném lekezelni a kivételt mivel ha beírom neki hogy 100 az oké arra van egy if utasítás de ha beírok neki mondjuk 50 db 9est akkor dob egy overflow exception-t. Ebből azt akarnám kihozni hogy ha ilyen nagy számot ír be akkor ne exceptiont dobjon hanem csak egy üzenetet hogy "túl nagy a megadott szám".
Mindenképp kivételkezeléssel szeretném megoldani hogy ennek a használatával is jobban tisztában legyek!
Ja és köszönöm mindenkinek aki eddig válaszolt!!
A túlterhelésre megoldás lehet például, hogy :
checked-el leellenörződ, hogy belefér e.
pl :
int ten = 10;
int sum = 2147483647 + ten;
Console.WritLine(sum);
//Output : -2147483639
Ezt nyilván túlcsordul.
Erre megoldás így néz ki :
Console.WritLine(checked(214748647 +ten));
checked
{
int o = 214748647 +ten;
Console.WriteLine(o);
}
Így kiváltódik a hiba : OverflowException
Ezt a hibát érdemes egy try-cath blokkal elkapni.
Tehát belerakod az a kódsort amit le akarsz kezelni egy try blokkba.
static int CheckedMethod()
{
int z = 0;
try
{
z = checked(maxIntValue + 10);
}
catch (System.OverflowException e)
{
Console.WriteLine("Hohóóó túlcsordult.: " + e.ToString());
}
return z;
}
-.-
gondolom az inint elírás
Én kérek elnézést!
Á, dehogy. Ezt eleve nem túlterhelésnek hívják, másfelől nem szükséges feltalálni a spanyol viaszt. A tryparse nem egy nagy dolog, tessék használni.
A te megoldásod teljesen feleslegesen bonyolítja túl a kódot. Ha ezt megszokod, esetleg egy nagyobb projektnél átláthatatlan lesz a sok hackeléstől az egész.
Igen már rájöttem hogy nem úgy hívják csak már nem tudtam szerkeszteni...
Mire gondolsz egyébként ?
mert azt a példát pont nem magamtól írtam. hanem msdn-ről
-.-
A tryparse hibájánál elég kiszállni és felhívni a felhasználó figyelmét, hogy ne legyen hülye. Én erre nem írnék külön ilyeneket, hogy int.max és még +10... persze meglehet, hogy van olyan eset, ahol ezt kellene csinálni, én még nem találkoztam ilyennel.
Ez igaz, de én arra írtam példát, hogy mivan, hogyha egy érték típust túlcsordul, tehát a max értéknél többet teszünk bele.
Mert ha jól értelmeztem neki valami ilyesmi gondja volt.
De valóban igazad van ; )
-.-
Sosem láttam életből vett példát az int túlcsordulására. Értsd: ennyire hülye ügyféllel sem volt még dolgom.
[ Szerkesztve ]
Transport Tycoonban nekem sikerült a túlcsordulni, igaz meg kellett érte dolgozni.
[ Szerkesztve ]
Biztos igazad van : ) mert én se.
Bár még annyi ideje nem is foglalkozok vele, hogy ilyenre lett volna esélyem : )
-.-
Sziasztok!
Na, ennek sem kellett volna nekiülnöm kb. 7-kor...
Tudom, nagyon hülye kérdés, de vajh miért nem írja ki azt, hogy hány darab páratlan szám van a kiírásban?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace max4_GYAK
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Random r = new Random();
int[] veletlentar;
/*int elemszam;*/
private void buttonOK_Click(object sender, EventArgs e)
{
if (textBox_veletlenBe.Text != "")
{
int elemszam = Convert.ToInt32(textBox_veletlenBe.Text);
if (elemszam >= 1 && elemszam <= 300)
{
veletlentar = new int[elemszam];
for (int i = 0; i < veletlentar.Length; i++)
{
int veletlen = r.Next(100, 500);
veletlentar[i] = veletlen;
listBox_eredmenyKi.Items.Add(i + ". vektorelem -> "+ veletlentar[i]);
}
}
}
}
private void buttonOKrb_Click(object sender, EventArgs e)
{
if (radioButtonParatlan.Checked)
{
for (int i = 0; i < veletlentar.Length; i++)
{
if (veletlentar[i] % 2 == 0)
{
labelParatlParos.Text = veletlentar[i] + " db páratlan számot sorsolt ki a program";
}
}
}
listBox_eredmenyKi.Items.Clear();
}
Köszi a segítséget!
Üdv. core2
debug?
Én kérek elnézést!
(#2835) Peter Kiss válasza Neil Watts (#2833) üzenetére
Most páros kell vagy páratlan?
private void buttonOKrb_Click(object sender, EventArgs e)
{
if (radioButtonParatlan.Checked)
{
int q = 0;
for (int i = 0; i < veletlentar.Length; i++)
{
if (veletlentar[i] % 2 == 0) //páratlan vagy páros kell?
{
q++;
}
}
labelParatlParos.Text =q + " db páratlan számot sorsolt ki a program";
}
listBox_eredmenyKi.Items.Clear();
}
(#2836) Neil Watts válasza Peter Kiss (#2835) üzenetére
ehh, köszi!
Nem írtam át, így félreérthető, de köszi
Nem félreérthető volt, hanem rossz.
A te megoldásodban minden páros számra kiírta a textboxba (felülirva az előző szöveget), hogy az adott szám páros.
1. private void buttonOKrb_Click(object sender, EventArgs e)
2. {
3. if (radioButtonParatlan.Checked)
4. {
5. for (int i = 0; i < veletlentar.Length; i++)
6. {
7. if (veletlentar[i] % 2 == 0)
8. {
9. labelParatlParos.Text = veletlentar[i] + " db páratlan számot sorsolt ki a program";
10. }
11. }
12. }
13. listBox_eredmenyKi.Items.Clear();
14. }
Ha kellene egy kis manuális debug:
3. radioButtonParatlan.Checked -> feltételezhetjük, hogy páratlan számokíat keresel
7. if (veletlentar % 2 == 0) -> itt viszont a párosakra ugrik be az if ágra (kettövel osztva nincs eredmény az páros. Ami neked kellett volna az a != 0.
9.c labelParatlParos.Text = veletlentar(i) + " db páratlan számot sorsolt ki a program"; -> itt az aktuális elemé értékét írja ki - még csak nem is a sorszámát, vagy a számosságot (ezt javította Athlon64+).
+1 nem értem a fixációt a tömbökkel; rendes gyűjteményekkel (Collection), sokkal könnyebben/értelmesebben lehet dolgozni, mert flexibilisek és egy csomó már előre elkészített funkciót is biztosít.
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
tudom, ezt próbáltam tudtotokra adni, véletlenül rossz kódot másoltam be, elnézést.
Hello,
Szeretném a segítségeteket kérni. A C# aforge részét kellene elsajátítanom és van rá kb 3 napom. Eléggé lehetetlen egy feladatnak minősül, de gondoltam itt vannak olyan emberek akik jobban google-znak mint Én és több infóval rendelkeznek. Egy szimpla "egér követi a kamera képén mozgó beadott tárgyat" programot szeretnék összekreálni. Legyetek szívesek kisegíteni, nagyon hálás lennék. Előre is köszönöm
Hali!
Lenne egy kérdésem.
Globális tömböt szeretnék létrehozni, de valahogy a framework 3.5-tel nem
megy , még régen a 2.0-ásal simán lehetett. Windows Form application.
Tehát nyomógombokat rakok ki, majd 2 katt rajtuk, ekkor lehet írni a kódot és
itt kellene látni a tömbömet.
VS 2010, C#, 3.5 Fw
Chris
Intel Pentium Dual Core E6600, 2 Gb Kingstone DDR3, Asus P5G41_Lx, IBM 80 Gb Hdd
static?
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
Köszi a választ, jó lett a satic-al.
public static class GlobalVar
{
public static string GlobalString = "gfdgdsg";
static int[] szelvenyev = new int[5000];
static int[] szelvenyhet = new int[5000];
static int[] szelvenyszam1 = new int[5000];
static int[] szelvenyszam2 = new int[5000];
static int[] szelvenyszam3 = new int[5000];
static int[] szelvenyszam4 = new int[5000];
static int[] szelvenyszam5 = new int[5000];
static int szamindex;
public static int Szamindex
{
get
{
return szamindex;
}
set
{
szamindex = value;
}
}
Még egy kérdésem lenne:
public Form1()
{
GlobalVar.Szamindex = 50;
FileStream fs = new FileStream("Otos.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs);
string s = "";
while (s != null)
{
s=sr.ReadLine();
}
sr.Close();
fs.Close();
Az Otos.txt- fájl ban Tabulátorokkal vannak elválasztva a szamok.
Nekem olyan kéne, hogy a beolvasott sort feldarabolja. s=sr.ReadLine();
Intel Pentium Dual Core E6600, 2 Gb Kingstone DDR3, Asus P5G41_Lx, IBM 80 Gb Hdd
String[] darabolt = s.Split('\t')
string[] sl = s.Split('\t');
Amúgy mi ez a sok 5000 elemű tömb? Te is használj List<int>-et helyette (vagy struct-ot, Dataset-et, a struktúrált adatokkal dolgozol)...
ehh, elmentem időközben teát csinálni
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
"Amúgy mi ez a sok 5000 elemű tömb?"
Memória teszt.
Köszi a segítséget, működik minden rendesen, beolvassa a számokat.
FileStream fs = new FileStream("Lottootos.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs);
string s = sr.ReadLine();
int i = 0;
while (s != null)
{
String[] sorolvas = s.Split(',');
GlobalVar.Szamindex = i;
GlobalVar.Globalstring = s;
GlobalVar.Szelvenyev = Int32.Parse(sorolvas[0]);
GlobalVar.Szelvenyhet = Int32.Parse(sorolvas[1]);
GlobalVar.Szelvenyszam1 = Int32.Parse(sorolvas[2]);
GlobalVar.Szelvenyszam2 = Int32.Parse(sorolvas[3]);
GlobalVar.Szelvenyszam3 = Int32.Parse(sorolvas[4]);
GlobalVar.Szelvenyszam4 = Int32.Parse(sorolvas[5]);
GlobalVar.Szelvenyszam5 = Int32.Parse(sorolvas[6]);
s = sr.ReadLine();
i = i + 1;
}
GlobalVar.Tombhossz = i - 1;
sr.Close();
fs.Close();
Egyébként a tabulátort nem fogatta el nekem (a \t re persze nem jöttem rá)
Úgyhogy vesszőre cseréltem a TAB-ot, így jobb is.
Hunfatal-nak is köszönöm a választ.
Memteszt:-) Az 5000 tömb a lottószelvényeknek van, az eddig kihúzott lottószámokat takarja, ami idáig 2867, de úgy gondoltam legyen 5000-ig.
Akkor számoljunk 5000 Int tomb az 4*5000 byte = 20 k
140 k-használtam el, hát igen a C64-en nemigen írnám meg a progit.
Jobban szeretem az ilyen sima tömböket a gép csak végigszalad rajta és gyorsan
végez.
Chris
[ Szerkesztve ]
Intel Pentium Dual Core E6600, 2 Gb Kingstone DDR3, Asus P5G41_Lx, IBM 80 Gb Hdd
Egy listán ugyanolyan gyorsan végigszalad és sokkal normálisabban néz ki a kód. Nem véletlenül vannak a collectionök. Én tömböt csak akkor használok, ha valaminek fix mérete van.
"Egy listán ugyanolyan gyorsan végigszalad"
Valamiről lemaradtam
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!