עזרה ב-C# - הדפסה לא נכונה, לא מצליח לגלות את הבעיה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה ב-C# - הדפסה לא נכונה, לא מצליח לגלות את הבעיה


wow

Recommended Posts

אני אמור לכתוב תרגיל עם מתודות שעושות כל מיני פעולות על תאריכים, סיימתי לכתוב את המתודות ועכשיו אני רוצה לבדוק אותם אז אני מתחיל בהדפסה של התאריך שהכנסתי כסטרינג והתאריך שמודפס לי תמיד 0\0\0


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace T270
{
public class Date
{
public int Day;
public int Month;
public int Year;
//print date method
public void PrintDate()
{
Console.WriteLine(Day + "/" + Month + "/" + Year);
}
//set date method
public void SetDate(int dd, int mm, int yy)
{
if (Day <= 30 && Day > 0 && Month > 0 && Month <= 12 && Year >= 0)
{
this.Day = dd;
this.Month = mm;
this.Year = yy;
}
}
//convert date to string method
public string toString()
{
return Day + "/" + Month + "/" + Year;
}
//returns the date of the next day method
public Date nextDate()
{
Date nextDate = new Date();
nextDate.Day = this.Day;
nextDate.Month = this.Month;
nextDate.Year = this.Year;
if (nextDate.Day == 30)
{
nextDate.Day = 1;
if (nextDate.Month == 12)
{
nextDate.Month = 1;
nextDate.Year++;
}
else
{
nextDate.Day++;
}
}
else
{
nextDate.Day++;
}
return nextDate;
}
//returns true if both dates are equal method
public bool IsEqual(Date DateEqual)
{
if (this.Day == DateEqual.Day && this.Month == DateEqual.Month && this.Year == DateEqual.Year)
{
return true;
}
else
{
return false;
}
}
public int DaysFromZero()
{
return (this.Year - 1) * 360 + (this.Month - 1) * 30 + (this.Day - 1);
}
//returns true if object's date is later method
public bool isLater(Date DateLater)
{
return this.DaysFromZero() > DateLater.DaysFromZero();
}
//returns the difference in days between the 2 dates method
public int Difference(Date DateDif)
{
return this.DaysFromZero() - DateDif.DaysFromZero();
}
//return true if the values are legal as dates method
public bool isLegalDate(int Day, int Month, int Year)
{
if (Day <= 30 && Day > 0 && Month > 0 && Month <= 12)
{
return true;
}
else
{
return false;
}
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter Date: ");
Date Date1 = new Date();
Date1.SetDate(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()));
string DateToString = "";
DateToString = Date1.ToString();
Console.WriteLine(Date1.toString());

Console.ReadLine();
}
}
}

קישור לתוכן
שתף באתרים אחרים

אני חושב שהבעיה נמצאת בפעולה הזאת:

    public void SetDate(int dd, int mm, int yy)
{
if (Day <= 30 && Day > 0 && Month > 0 && Month <= 12 && Year >= 0)
{
this.Day = dd;
this.Month = mm;
this.Year = yy;
}
}

אתה בודק בתנאי את Day, Month וYear במקום את dd,mm וyy..

קישור לתוכן
שתף באתרים אחרים

זה מה שאני עושה בד"כ (עכשיו לא עשיתי משום מה)

אגב יש לי בעיה במתודה NextDate ואני לא מוצא אותה, היא לא מדפיסה לא את התאריך של היום הבא,אני עובד עם הדיבגר ורואה שהערכים הנכונים נכנסים אליה אבל בסופו של דבר ל-return נכנס סתם משהו (T270.Date)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace T270
{
public class Date
{
public int Day;
public int Month;
public int Year;


//set date method
public void SetDate(int dd, int mm, int yy)
{
if (dd <= 30 && dd > 0 && mm > 0 && mm <= 12 && yy >= 0)
{
this.Day = dd;
this.Month = mm;
this.Year = yy;
}
}


//this method get number of days start from 1/1/00 and return the date
public void SetDate(int daysFromZero)
{
this.Year = daysFromZero / 360 + 1;
daysFromZero = daysFromZero % 360;
this.Month = daysFromZero / 30 + 1;
daysFromZero = daysFromZero % 30;
this.Day = daysFromZero + 1;
}


//convert date to string method
public string toString()
{
return Day + "/" + Month + "/" + Year;
}


//returns the date of the next day method
public Date NextDate()
{
Date NextDate = new Date();


NextDate.Day = this.Day;
NextDate.Month = this.Month;
NextDate.Year = this.Year;


if (NextDate.Day == 30)
{
NextDate.Day = 1;


if (NextDate.Month == 12)
{
NextDate.Month = 1;
NextDate.Year++;
}
else
{
NextDate.Day++;
}


}
else
{
NextDate.Day++;
}


return NextDate;
}


//returns true if both dates are equal method
public bool IsEqual(Date DateEqual)
{
if (this.Day == DateEqual.Day && this.Month == DateEqual.Month && this.Year == DateEqual.Year)
{
return true;
}
else
{
return false;
}
}


//calculate how many days passed sinse 1/1/00
public int DaysFromZero()
{
int DaysFromZero = (this.Day - 1) + (this.Month - 1) * 30 + (this.Year - 1) * 360;
return DaysFromZero;
}


//returns true if object's date is later method
public bool isLater(Date DateLater)
{
return this.DaysFromZero() > DateLater.DaysFromZero();
}


//returns the difference in days between the 2 dates method
public int Difference(Date DateDif)
{
return this.DaysFromZero() - DateDif.DaysFromZero();
}


//return true if the values are legal as dates method
public bool isLegalDate(int Day, int Month, int Year)
{
if (Day <= 30 && Day > 0 && Month > 0 && Month <= 12)
{
return true;
}
else
{
return false;
}
}


//return the date in new format
public string ToLongString()
{
string StringMonth = "";


switch (this.Month)
{
case 1:
StringMonth = "Jan";
break;


case 2:
StringMonth = "Feb";
break;


case 3:
StringMonth = "Mar";
break;


case 4:
StringMonth = "Apr";
break;


case 5:
StringMonth = "May";
break;


case 6:
StringMonth = "Jun";
break;


case 7:
StringMonth = "Jul";
break;


case 8:
StringMonth = "Aug";
break;


case 9:
StringMonth = "Sep";
break;


case 10:
StringMonth = "Oct";
break;


case 11:
StringMonth = "Nov";
break;


case 12:
StringMonth = "Dec";
break;

default:


StringMonth = "0";
break;
}


return Day + "/" + StringMonth + "/" + Year;
}
}


class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter Date: ");


Date Date1 = new Date();


Date1.SetDate(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()));
string DateToString = "";
DateToString = Date1.toString();
Console.WriteLine("The Date Is: " + Date1.toString());
Console.WriteLine("The Date In Other Format: " + Date1.ToLongString());
Console.WriteLine("Muner Of Days Passed Since 1/1/00: " + Date1.DaysFromZero());
Console.WriteLine("The Next Day Is: " + Date1.NextDate());


Console.ReadLine();
}
}
}

קישור לתוכן
שתף באתרים אחרים

אני מניח שמדובר בהדפסה הרביעית. שים לב שאתה מנסה להדפיס שם אובייקט מטיפוס Date. בשביל לשרשר אובייקט למחרוזת (שזה מה שאתה עושה שם) הקומפיילר קורא לפונקציה ToString של האובייקט. כברירת מחדל, הפונקציה הזו מחזירה איזשהו ערך דיפולטי כלשהו. שים לב שב-Date שלך, לא דרכת על הפונקציה הזו (יש לו toString, אבל כיוון ש-#C היא case sensitive זו נחשבת לפונקציה אחרת).

קישור לתוכן
שתף באתרים אחרים

לא ממש הלך לי, יצרתי עוד משתנה Date2 והכנסתי את מה שהיה ב-Date1 ל-Date2 ועל Date2 עשיתי NextDate ואז toString ולא ממש הלך, זה ה-Main שלי:

      Console.WriteLine("Enter Date: ");


Date Date1 = new Date();


Date1.SetDate(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()));
string DateToString = "";
string DateToString2 = "";


Date Date2 = new Date();


Date2 = Date1;
Console.WriteLine("The Next Day Is: " + Date2.NextDate());
DateToString2 = Date2.toString();



DateToString = Date1.toString();
Console.WriteLine("The Date Is: " + Date1.toString());
Console.WriteLine("The Date In Other Format: " + Date1.ToLongString());
Console.WriteLine("Muner Of Days Passed Since 1/1/00: " + Date1.DaysFromZero());


Console.ReadLine();

קישור לתוכן
שתף באתרים אחרים

רגע תן לי להבין יש לי בוא נגיד ב-Date2 את הערכים באובייקט כמו ב-Date1, אני מפעיל עליו קודם כל את NextDate שיקדם את הערכים לתאריך החדש ואז אני מפעיל עליו (Date2) את toString ?

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...