Új hozzászólás Aktív témák
-
cattus
addikt
válasz
kkdesign
#8751
üzenetére
Felteszem mostanában kezdtél programozni, így én nem igazán ajánlanék még Linq-s megoldást, az egy ilyen bonyolultságú feladatra ágyúval verébre kategória.
Gondold végig, mi a probléma és hogyan lehetne megoldani. Leírom az én gondolatmenetemen (kódot szándékosan nem, jobb, ha azt magad vezeted le):
Hozz létre egy változót, amiben tárolod az eddigi leghosszabb sorozat hosszát (kezdetben 0, legyen a neve mondjuk max_lenght). Végig kell iterálni a tömbön. Minden számra meg kell nézni, hogy 0-e, vagy nem. Ha nem nulla, akkor ugye ahogy te is gondoltad, növelsz egy számlálót (legyen a neve mondjuk current_lenght, kezdetben 0 ez is). Ha nullát találsz, akkor megnézed, hogy a most talált sorozatod hosszabb-e, mint az eddigi. Ha igen, akkor felülírod a max_lenght-et, és nullázod a current_lenght-et.
-
moseras
tag
válasz
kkdesign
#8751
üzenetére
Hello,
Nem teljesen tiszta, hogy mit is akarsz pontosan, valami ilyenre gondoltál ?
static int convert(List<int> l1)
{
int ret = 0;
foreach (var e in l1)
{
ret *= 10;
ret += e;
}
return ret;
}
static void Main(string[] args)
{
var szamok = new List<int>() { 0,0,1,5,7,3,0,0,1,2,3,0,0,5,8,7,4,5,0,1,2,5,8,9 };
// Az eredeti számsorozat
Console.WriteLine($"Az eredeti számsorozat: { string.Join("", szamok) }");
// A nem 0 értékű számjegyek száma
var c1 = szamok.Count(x => x != 0);
Console.WriteLine($"A nem 0 értékű számjegyek száma: { c1 }");
var temp = new List<int>();
var leghosszabb_szamok = new List<int>();
int maxx = 0;
foreach (var item in szamok)
{
if (item != 0)
{
temp.Add(item);
}
else
{
if (temp.Count > 0 && temp.Count >= maxx)
{
leghosszabb_szamok = leghosszabb_szamok.Where(n => Math.Floor(Math.Log10(n) + 1) >= maxx).ToList();
leghosszabb_szamok.Add(convert(temp));
maxx = temp.Count();
}
temp.Clear();
}
}
if (temp.Count > 0 && temp.Count >= maxx)
{
leghosszabb_szamok = leghosszabb_szamok.Where(n => Math.Floor(Math.Log10(n) + 1) >= maxx).ToList();
leghosszabb_szamok.Add(convert(temp));
}
// A leghosszabb számjegyű szám(ok)
Console.WriteLine($"A leghosszabb számjegyű szám(ok): { string.Join(", ", leghosszabb_szamok) }");
// A leghosszabb számjegyű szám(ok) jegyeinek száma
Console.WriteLine($"A leghosszabb számjegyű szám(ok) jegyeinek száma: { maxx }");
}Eredmény:
Az eredeti számsorozat: 001573001230058745012589
A nem 0 értékű számjegyek száma: 17
A leghosszabb számjegyű szám(ok): 58745, 12589
A leghosszabb számjegyű szám(ok) jegyeinek száma: 5Ha jól értem, akkor neked kellene
- az eredeti sorozat nem 0 elemeinek száma
- a leghosszab jegyű szám(ok) külön listába gyűjtve
- a leghosszab jegyű szám(ok) jegyeinek számaImi.
-
válasz
kkdesign
#4010
üzenetére
Exception-re, ha nem tudod pontosan mit kell elkapni:
az a legyegyszerűbb, hogy csinálsz egy általános Exception catch-et és debuggerrel megnézed, hogy pontosan milyen kivételt dob...Amúgy meg ne sima parse-ot használj, hanem tryparse-ot és akkor nem kell kivételkezelés sem...
-
Ezekiell
veterán
válasz
kkdesign
#4000
üzenetére
Hú, hát ha ennyire alapok hiányoznak, akkor szerintem kezdd először az elmélettel:
Az int (Int32) egy típus, ami numerikus egész értékeket tud tárolni. Természetesen van ennek egy határa is: -2,147,483,648 és 2,147,483,647 között tud tárolni.
Ha ennél nagyobb számok kellenek, akkor a Decimal/BigInteger típusok a barátaid - de egyelőre legyen elég az int, és inkább az alapokat vedd át. Ajánlom Reiter István jegyzetét!
A FormatException pedig pont az, amit keresel: akkor dobja, ha nem számot írtál be, pl betűt.
-
-
kkdesign
senior tag
válasz
kkdesign
#4008
üzenetére
mégis lenne még gondom mert nem elég a dolog... kellene egy olyan kivételkezelés, hogy típusra, Egyet tettem overflowra, az addig jó, de kell egy ami nem minden hibát kap el, hanem akkor kapja el, ha nem szám, ergo ha nem int.
szerk: NotFiniteNumberException ezt találtam, ezzel jó lesz? mert el elkapja csak kérdés azért-e... -
Ezekiell
veterán
válasz
kkdesign
#3991
üzenetére
Double.TryParse kell neked, vagy:
Nem kell kivételkezelés, egy sima if is megteszi:
if (Regex.IsMatch("124124125,1", @"^[1-9,]-*[0-9,\.]+$"))
{
// helyes szám
} else {
// nem helyes szám
}Ez a reguláris kifejezés C#-ban. Az alábbi oldalon tudod tesztelni a kifejezéseket: Rubular. A neked szükséges regexp a kódban van.
-
Jester01
veterán
válasz
kkdesign
#3991
üzenetére
Ajánlom inkább a Double.TryParse metódust.
-
kkdesign
senior tag
Ú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!
- MasterDeeJay: Egy nem átlagos Asus videókártya (GTX950M 2GB GDDR3)
- Idő előtt felbukkant a Galaxy A57 egy európai webshopban
- Automata kávégépek
- Autós topik
- Milyen billentyűzetet vegyek?
- Több mint 2 millióan próbálták ki a Pragmata demóját
- Samsung Galaxy S23 Ultra - non plus ultra
- Horgász topik
- Víz- gáz- és fűtésszerelés
- Xbox Series X|S
- További aktív témák...
- 500GB Sata SSD-k / Western Digital / Samsung / Crucial / Beszámítás OK!
- ASUS ROG Strix RTX 4090 OC 24GB GDDR6X Videókártya! BeszámítOK!
- Apple iPhone 14 Pro Max / 128GB / Kártyafüggetlen / 12Hó Garancia / Akku: 100%
- Asus geforce rtx 5090 rog astral lc oc 32gb gddr7 512bit
- Samsung Galaxy A56 / 8/256GB / Kártyafüggetlen / 12Hó Garancia
- GYÖNYÖRŰ iPhone 14 Pro Max 128GB Deep Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS3791
- Xiaomi 17 Ultra Starlit Green 512GB használt karcmentes garancia 2029.03.05.-ig + Photographer Kit
- Csere-Beszámítás! Playstation 5 Lemezes kiadás!
- BESZÁMÍTÁS! Asrock 970 Pro3 970 chipset alaplap garanciával hibátlan működéssel
- Új HP 15 Victus FHD IPS 144Hz i5-12500H 12mag 16GB 512GB SSD Nvidia RTX 4050 6GB Win11 Garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

