עבור לתוכן

עזרה בC# בבקשה. עריכה: -שאלה חדשה-

Featured Replies

פורסם

אני מנסה לכתוב תוכנה של מכונת הימורים (שלושה מספרים רנדומליים, אם שווים זוכים בכסף)

ונתקלתי ב-2 בעיות:

1. שלושת המספרים יוצאים אותו דבר לדוגמא 9,9,9 5,5,5.

2. אם אני מוסיף return(sum) בסוף הוא כותב לי שגיאה.

הנה הקטע:

    public static void gamble(int sum)
{
Random a = new Random();
Random b = new Random();
Random c = new Random();

int d = a.Next(10);
int e = b.Next(10);
int f = c.Next(10);

Console.WriteLine("{0} {1} {2}", d, e, f);

if (d == e && d == f)
{
Console.WriteLine("Congratulations! You won 20 NIS!");
sum = sum + 20;

}
else
{ Console.WriteLine("Too bad, you didn't win, try again"); }
}

תודה

פורסם

1. צור רק אובייקט random אחד, ותשתמש רק בו. יותר מזה - מומלץ שיהיה איבר סטטי בקלאס, ולא רק בטווח של הפונקציה (ככה שלא ייווצר מחדש בכל קריאה לפונקציה).

2. זה כי לא הגדרת את הפונקציה להחזיר int, אלא void.

פורסם
  • מחבר

1. תודה רבה הצליח לי!

2. לא הבנתי כ"כ אתה יכול לפרט קצת יותר? אני דיי חדש בכל הקטע הזה. אתה מתכוון לכתוב במקום static void

static int?

ניסיתי את זה וזה רשם לי שגיאה אחרת:

not all code paths return a value

פורסם

אכן, צריך להחליף ל-static int. אבל, אתה צריך לוודא שבכל מקרה, יוחזר ערך מהפונקציה. אסור שתגיע לסוף של הפונקציה בלי להגיע לשורת return.

קח לדוגמה:

public static int f(int x)
{
if (x > 0)
return 1;
}

במקרה הזה, אם x<=0, אז הפונקציה לא תפעיל את ה-return, ואז לא יוחזר ערך - וזו שגיאה (אם הגדרת שהפונקציה מחזירה ערך, היא חייבת להחזיר ערך).

אני מניח שעשית return רק באחד מהענפים של ה-if ולא בשניהם.

פורסם
  • מחבר

תודה רבה, עובד!

באמת לא הוספתי אחרי הIF, הוספתי רק אחרי הELSE.[br]פורסם בתאריך: 11.05.2008 בשעה 18:07:16


אוקיי נתקלתי בבעיה חדשה:

אחרי שאני מהמר פעם אחת זה כבר יוצא, ולא שואל אותי אם אני רוצה להמר שוב.

אני לא מצליח לגרום לפעולה לחזור על עצמה.

פורסם

אתה צריך לעשות את זה בלולאה ב-main, כמובן.

מה יש ב-main שלך?

פורסם
  • מחבר


char g;
int sum = 100;
Console.WriteLine("Welcome to the gamble machine!");
Console.WriteLine("You have {0} NIS", sum);
Console.WriteLine("Do you want to gamble? Y/N");
g = char.Parse(Console.ReadLine());
{
if (g == 'y')
{ gamble(sum); }

if (g == 'n')
{
Console.WriteLine("Ok, come back next time!");
Console.ReadKey();
}

אני חושב שאני אמור לעשות את זה עם while אבל אני פשוט לא מצליח.

ד"א לכולם הפורום לא זז?

זה בלתי נסבל 5 דקות לוקחות לטעון עמוד

פורסם

אתה רק צריך לעטוף את קטע הקוד שקורא לתוך g, וה-if שאחריו, בתוך:

while (g == 'y')

(שים לב שאתה צריך לתת ערך התחלתי של 'y' ל-g בשביל שזה יעבוד)

פורסם
  • מחבר

תודה.

משום מה עדיין יש לי את הבעיה הראשונה (not all code paths return a value)

הנה הקוד המלא:

    public static int gamble(int sum)
{

Random a = new Random();
int d = a.Next(10);
int e = a.Next(10);
int f = a.Next(10);

Console.WriteLine("{0} {1} {2}", d, e, f);

if (d == e && d == f && d == 7)
{
Console.WriteLine("Congratulations! You won 100 NIS!");
sum = sum + 100;
return sum;
}
if (d == e && d == f)
{
Console.WriteLine("Congratulations! You won 30 NIS!");
sum = sum + 30;
return sum;
}
if (d == e || d == f || e == f)
{
Console.WriteLine("Congratulations! You won 10 NIS!");
sum = sum + 10;
return sum;
}
if (d != e && d != f)
{
Console.WriteLine("Too bad, you didn't win, try again");
return sum;
}
}

public static void Main()
{
int sum = 100;
char g='y';
Console.WriteLine("Welcome to the gamble machine!");
Console.WriteLine("Rules: You start the game with 100 NIS. Every gamble costs you 5 NIS.");
Console.WriteLine("If all of the three numbers are the same, you win 20 NIS.");
Console.WriteLine("If only 2 numbers are the same, you win 10 NIS.");
Console.WriteLine("If all three numbers are 7 you win 100 NIS.");
Console.WriteLine("You have {0} NIS", sum);
Console.WriteLine("Do you want to gamble? Y/N");
while (g == 'y')
{
g = char.Parse(Console.ReadLine());
if (g == 'y')
{
gamble(sum-5);
}
}
}

פורסם

קודם כל, שים לב שתמיד יש מצב שאף אחד מה-ifים לא יוצא אמת (יכול להיות שלוגית אין לך מצב כזה, אבל הקומפיילר לא יודע את זה). במקרה כזה, לא תיכנס לאף אחד מהם, והפונקציה לא תגיע ל-return. חוץ מזה, כל ה-returnים שלך מחזירים בדיוק אותו הדבר - יותר פשוט לעשות return אחד בלבד (אחרי כל ה-ifים), ולהשמתש ב-else if במקום ה-ifים.

חוץ מזה, שים לב שאת השורה האחרונה שאתה מדפיס ב-main, כדאי להדפיס בכל איטרציה של הלולאה.

ועוד טעות שיש לך - כשאתה עושה sum = sum + 100 בתוך הפונקציה, אז זה לא משפיע על הערך שלו מחוץ לפונקציה. בשביל זה אתה צריך להעביר אותו באמצעות ref, או לחילופין להשתמש ב-main בערך המוחזר מהפונקציה.

פורסם
  • מחבר

אוקיי התוכנה עובדת. אבל יש לי עוד בעיה אחת:

סכום הכסף תמיד מתאפס ל100 אחרי כל הימור.

פורסם
  • מחבר
בשביל זה אתה צריך להעביר אותו באמצעות ref, או לחילופין להשתמש ב-main בערך המוחזר מהפונקציה.

אני עוד לא יודע מה זה ref (רק השנה התחלנו ללמוד C# ואנחנו לא כל כך מתקדמים בחומר X:) ולא הבנתי את החלק השני של המשפט.

פורסם
  • מחבר

תודה רבה!

המשחק עובד מעולה.

:yelclap:

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים