मुझे C # में किसी अन्य वर्ग से कॉलिंग विधियों के साथ एक समस्या हो रही है। मैं ऐसा लंबे समय से नहीं कर रहा हूं (सटीक होने के लिए 3 सप्ताह) और कॉलिंग के तरीकों के पीछे के विचार नहीं मिलते हैं। मैंने इसे आसान बनाने की कोशिश के लिए सब कुछ सार्वजनिक घोषित कर दिया है, लेकिन यह अभी मेरे लिए काम नहीं कर रहा है। सभी में किसी भी मदद की बहुत सराहना की जाएगी। यहाँ प्रश्न में कोड है, मैं एक सरल विधि का उपयोग करना चाहता हूं यदि विभिन्न सरल आकृतियों के क्षेत्र की गणना करने के लिए आउटपुट चरण में, लेकिन मुझे "यह एक वैध विकल्प नहीं है"
namespace Area_Calculator
{
public class Area
{
public static int Square(int side)
{
int i, A;
Console.WriteLine("Please enter the length of the side of the square");
i = Convert.ToInt16(Console.ReadLine());
A = i * i;
return A;
}
public static int Rectangle(int width, int height)
{
int i, j, A;
Console.WriteLine("Please enter the width of the rectangle");
i = Convert.ToInt16(Console.ReadLine());
Console.WriteLine("Please enter the height of the rectangle");
j = Convert.ToInt16(Console.ReadLine());
A = i * j;
return A;
}
public static double Triangle(int width, int height)
{
double i, j, A;
Console.WriteLine("Please enter the width of the triangle");
i = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Please enter the height of the triangle");
j = Convert.ToDouble(Console.ReadLine());
A = (.5 * i * j);
return A;
}
public static double Circle(int radius)
{
int i;
double A;
Console.WriteLine("Please enter the radius of the circle");
i = Convert.ToInt16(Console.ReadLine());
A = (i * Math.PI);
return A;
}
}
class Program
{
static void Main(string[] args)
{
int x, i, j;
i = 0;
j = 0;
Console.WriteLine("Please select what type of shape you wish to find the area of:\n1. Square\n2. Rectangle\n3. Triangle\n4. Circle\n");
x = Convert.ToInt16(Console.ReadLine());
Area r = new Area();
if (x == 1)
{
Area.Square(i);
}
if (x == 2)
{
Area.Rectangle(j, i);
}
if (x == 3)
{
Area.Triangle(j, i);
}
if (x == 4)
{
Area.Circle(i);
}
else
{
Console.WriteLine("That is an invalid choice");
}
Console.ReadKey();
}
}
}
6 जवाब
आपका मुख्य मुद्दा है, दूसरों ने क्या उल्लेख किया है, अगर बयानों के बारे में। एक और बात यह है कि आप क्षेत्र की गणना करते हैं लेकिन इसे कभी भी प्रिंट नहीं करते हैं।
if (x == 1)
{
Console.WriteLine(Area.Square(i));
}
else if (x == 2)
{
Console.WriteLine(Area.Rectangle(j, i));
}
else if (x == 3)
{
Console.WriteLine(Area.Triangle(j, i));
}
else if (x == 4)
{
Console.WriteLine(Area.Circle(i));
}
else
{
Console.WriteLine("That is an invalid choice");
}
आप वर्तमान में हमेशा देखेंगे कि "यह एक अमान्य विकल्प है" जब तक x 4 नहीं है ... क्योंकि अंतिम if
/ `बाकी सभी से डिस्कनेक्ट किया गया है।
आप इसे इस तरह else if
उपयोग करने के लिए बदल सकते हैं:
if (x == 1)
{
...
}
else if (x == 2)
{
...
}
else if (x == 3)
{
...
}
else if (x == 4)
{
...
}
else
{
...
}
... लेकिन switch
कथन का उपयोग करना सरल होगा:
switch (x)
{
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
case 4:
...
break;
default:
...
break;
}
यह बेहतर है कि मैं x
पर एक साधारण चयन के आधार पर, "डिफ़ॉल्ट रूप से" शाखा के साथ अगर x
ज्ञात मूल्यों में से कोई भी नहीं है, तो "मैं इन शाखाओं में से एक को निष्पादित करना चाहता हूं।" "
प्रारंभ में, आपको अपने स्टेटमेंट को थोड़ा बदलना होगा, जैसे नीचे:
if (x == 1)
{
Area.Square(i);
}
else if (x == 2)
{
Area.Rectangle(j, i);
}
else if (x == 3)
{
Area.Triangle(j, i);
}
else if (x == 4)
{
Area.Circle(i);
}
else
{
Console.WriteLine("That is an invalid choice");
}
ऐसा करने पर, आपको वह संदेश मिलेगा जो आपको सभी मामलों में पता चलता है, जहां x
4 नहीं है, बाकी मामलों में भी 1, 2 और 3।
यदि x 4 के बराबर है, तो आपका कोड जाँच रहा है, अन्यथा अन्य ब्लॉक में कोड का उपयोग कर रहा है।
यह हर बार चलाया जाएगा जब तक x = 4!
इसके बजाय यह प्रयास करें:
x = Convert.ToInt16(Console.ReadLine());
Area r = new Area();
if (x == 1)
{
Area.Square(i);
}
else if (x==2)
{
Area.Rectangle(j, i);
}
else if (x == 3)
{
Area.Triangle(j, i);
}
else if (x==4)
{
Area.Circle(i);
}
else
{
Console.WriteLine("That is an invalid choice");
}
या इससे भी बेहतर:
x = Console.ReadLine();
switch x
{
case "1":
Area.Square(i);
break;
case "2":
Area.Rectangle(j, i);
break;
case "3":
Area.Triangle(j, i);
break;
case "4":
Area.Circle(i);
break;
default:
console.WriteLine("That is an invalid choice");
break;
}
समस्या आपके if
कथन के साथ है, आपको if
के बजाय else if
का उपयोग करने की आवश्यकता है:
if (x == 1)
{
Area.Square(i);
}
else if (x==2)
{
Area.Rectangle(j, i);
}
else if (x == 3)
{
Area.Triangle(j, i);
}
else if (x==4)
{
Area.Circle(i);
}
else
{
Console.WriteLine("That is an invalid choice");
}
समस्या का उपयोग करते समय यदि यह है कि यह बहुत अंतिम हो गया है और else
सत्य था, तो यह "यह एक अमान्य विकल्प है" मुद्रित होगा।
और आपके कार्यान्वयन पर कुछ नोट्स ...
आपके मुख्य कार्यक्रम में, r
ऑब्जेक्ट, r
का अनावश्यक होना, क्योंकि आप कहीं भी r
का उपयोग नहीं करते हैं।
Area
विधियों में से सभी मान (जो आप पास करते हैं) में लेते हैं, लेकिन फिर उन्हें पूरी तरह से अनदेखा करते हैं और फिर से मूल्यों के लिए पूछते हैं। मैं या तो विधियों से पैरामीटर निकालूंगा, या उपयोगकर्ता को मुख्य कार्यक्रम में पूछूंगा और मूल्यों में पास करूंगा। प्रत्येक अलग गणना के लिए इनपुट लॉजिक को if
स्टेटमेंट के अंदर डाला जा सकता है। अंतिम, आप फ़ंक्शन के रिटर्न मान के साथ कुछ भी नहीं करते हैं, इसलिए आप उपयोगकर्ता को क्षेत्र प्रदर्शित नहीं करते हैं। उदाहरण के लिए, आपको इसे लिखने के लिए अपने कार्यों को संपादित करने की आवश्यकता है:
Console.WriteLine("The square area is {0}", Area.Square());
यदि कथन के अंदर, या क्योंकि आप गणना में उपयोगकर्ता इनपुट कर रहे हैं, तो आप प्रत्येक Area
विधि में एक समान रेखा रख सकते हैं।
enum AreaEnum
{
Square,
Rectangle,
Triangle,
Circle,
};
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please select what type of shape you wish to find the area of:\n1. Square\n2. Rectangle\n3. Triangle\n4. Circle\n");
int x = Convert.ToInt16(Console.ReadLine());
AreaEnum myValueAsEnum = (AreaEnum)x;
Calculate(myValueAsEnum);
}
static double Calculate(AreaEnum a)
{
int x, i, j;
i = 0;
j = 0;
Area area = new Area();
switch (a)
{
case AreaEnum.Square:
{
return Area.Square(i);
}
case AreaEnum.Rectangle:
{
return Area.Rectangle(j, i);
}
case AreaEnum.Triangle:
{
return Area.Triangle(j, i);
}
case AreaEnum.Circle:
{
return Area.Circle(i);
}
default:
{
Console.WriteLine("That is an invalid choice");
return 0;
}
}
}
}
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।