C#-ban mi a hibám a programnál?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Random r = new Random();
int[] tomb = new int[1];
for (int a = 0; a < 1; ++a)
{
tomb[a] = r.Next(10000);
}
for (int a = 0; a < 1; ++a)
{
if (tomb[a] >1000 && tomb[a] <10000)
{
tomb[a] = r.Next(1,120);
Console.WriteLine("Az ön harciereje:"+tomb[a]);
}
if (tomb[a] >300 && tomb[a]<1000 )
{
tomb[a] = r.Next(125,1200);
Console.WriteLine("Az ön harciereje:"+tomb[a]);
}
if (tomb[a] > 100 && tomb[a] < 300)
{
tomb[a] = r.Next(1200, 5500);
Console.WriteLine("Az ön harciereje:"+tomb[a]);
}
if (tomb[a] > 10 && tomb[a] < 100)
{
tomb[a] = r.Next(5500, 12000);
Console.WriteLine("Az ön harciereje:"+tomb[a]);
}
if (tomb[a] > 2 && tomb[a] < 10)
{
tomb[a] = r.Next(12000, 70000);
Console.WriteLine("Az ön harciereje:"+tomb[a]);
}
if (tomb[a]<2)
{
tomb[a] = r.Next(100000, 10000000);
Console.WriteLine("Az ön harciereje:"+tomb[a]);
}
}
Console.ReadKey();
}
}
}
Inkább continue vagy else-k
Mondjuk igy 1 elemu tombnél a break is jó, de gondolom a későbbiekben nem egy elem lesz benne.
hanyagold a breaket meg a hasonló szarságokat. a megoldás egyszerű, a tomb[a] értéket kap az elején (tomb[a] = r.Next(10000);), majd a továbbiakban mikor teljesül rá egy feltétel, új értéket kap (pl
if (tomb[a] > 100 && tomb[a] < 300)
{
tomb[a] = r.Next(1200, 5500);
Console.WriteLine("Az ön harciereje:" + tomb[a]);
}) itt történik az első konzolra írás, de mivel a tomb[a] új értéket kapott, ezt tovább fogja vizsgálni és amennyiben emiatt teljesül egy másik feltétel akkor ismét új értéket fog kapni és ismét konzolra írás fog történni.
amúgy egy ilyen feladatra elég fölösleges tömböt foglalni és az egy elemű tömbhöz sincs sok értelme a ciklust írni. sima intekkel meg tudnád valósítani, csak külön változóba tárold az "esélyt" és a "harci pontot".
még egyszerűbben is meg tudod oldani, ha a sima "if"-ek helyett "else if"-eket használsz. ilyenkor az első feltétel teljesülése után az elágazás végére fog ugrani a program és kimarad a többi rész. a fentieket pedig csak az elvi probléma megoldására említettem.
using System;
class Program
{
static void Main()
{
Random r = new Random();
int power = r.Next(10000);
if (power > 1000 && power < 10000)
power = r.Next(1, 120);
else if (power > 300 && power < 1000)
power = r.Next(125, 1200);
else if (power > 100 && power < 300)
power = r.Next(1200, 5500);
else if (power > 10 && power < 100)
power = r.Next(5500, 12000);
else if (power > 2 && power < 10)
power = r.Next(12000, 70000);
else if (power < 2)
power = r.Next(100000, 1000000);
Console.WriteLine("Az ön harciereje:" + power);
Console.ReadKey();
}
}
Az eredeti kódod kicsit átláthatóbban.
Megjegyezném, hogy van pár érték, amiket nem vizsgálsz, például amikor a generált szám pont a határon van, gondolom ez nem szándékos.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!