Reputation: 21
How can I create a new instance of Boeing737 and use it later in the program. For example I want to be able to create 5 Boeings, do I have to define them like
Boeing737 boeing1 = new Boeing737(name: "Boeing737" + Console.ReadLine(),fuel: int.Parse(Console.ReadLine()) , tons: 0);
Boeing737 boeing2 = new Boeing737(name: "Boeing737" + Console.ReadLine(),fuel: int.Parse(Console.ReadLine()) , tons: 0);
and so on... Or is there easier way? Other question, to WHAT can I assign all the properties of boeing1 for example?
Here is my current code:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Insert the type of boeing that u are using");
Boeing737 boeing = new Boeing737(name: "Boeing737" + Console.ReadLine(),fuel: int.Parse(Console.ReadLine()) , tons: 0);
Console.WriteLine("{0} has {1} tons of fuel and weights {2}", boeing.Name, boeing.Fuel, boeing.Tons);
Console.ReadKey();
}
}
public class Planes
{
public Planes(string name, int fuel, int tons)
{
Name = name;
Fuel = fuel;
Tons = tons;
}
public int Tons;
public int Fuel;
public string Name { private set; get; }
}
class Boeing737 : Planes
{
public Boeing737(string name, int fuel, int tons) : base(name, fuel, tons)
{
Tons = 700;
}
}
}
Upvotes: 0
Views: 419
Reputation: 21
What about using C# Arrays.
namespace ConsoleApps_examples { class Program { static void Main(string[] args) { //Console.WriteLine("Insert the type of boeing that u are using");
//string sname = Console.ReadLine();
//int ifuel = int.Parse(Console.ReadLine());
Console.WriteLine(" here are 5 different type of boeing:");
string sname = "";
int ifuel = 0;
int i;
int[] fuellist = new int[5] { 99, 98, 92, 97, 95 };
var nameslist = new string[5] { "XXA1", "XXA2", "XXA3","XXA4","XXA5"};
//var arr3 = new string[] { "one", "two", "three" };
for (i = 0; i < 5; i++)
{
ifuel = fuellist[i];
sname = nameslist[i];
Boeing737 boeing = new Boeing737(name: "Boeing737" + sname, fuel: ifuel, tons: 0);
Console.WriteLine("{0} has {1} tons of fuel and weights {2}", boeing.Name, boeing.Fuel, boeing.Tons);
}
//Boeing737 boeing = new Boeing737(name: "Boeing737" + sname, fuel: ifuel, tons: 0);
Console.ReadKey();
}
}
public class Planes
{
public Planes(string name, int fuel, int tons)
{
Name = name;
Fuel = fuel;
Tons = tons;
}
public int Tons;
public int Fuel;
public string Name { private set; get; }
}
class Boeing737 : Planes
{
public Boeing737(string name, int fuel, int tons) : base(name, fuel, tons)
{
Tons = 700;
}
}
}
this is the output: List of 5 types of Boeing planes:
Upvotes: 0
Reputation: 23675
Well, let's start by improving your code a little bit:
// the class represents a single object, give it a
// singular name
public class Plane
{
// get before set, it's not mandatory but give yourself
// some basic coding rules to improve code maintainability
// and readability
// avoid public members, implementing properties is always
// a good choice for future extensions and manipulations
public int Fuel { get; private set; }
public int Tons { get; private set; }
public string Name { get; private set; }
public Plane(string name, int fuel, int tons)
{
Name = name;
Fuel = fuel;
Tons = tons;
}
}
// if your inheritance stops here, you could set a
// sealed attribute
public sealed class Boeing737 : Plane
{
// no need to set the property twice, you are already
// calling the base constructor, pass him the fixed
// tons value of 700...
public Boeing737(string name, int fuel) : base(name, fuel, 700)
{
}
}
Now, concerning instantiation, go for a the generic List<T>
type, which is very easy to manage and will expand itself when you add more objects:
List<Boeing737> boeings = new List<Boeing737>
{
new Boeing737("A", 5),
new Boeing737("B", 5),
new Boeing737("C", 5),
new Boeing737("D", 5)
};
If you want to create a List
that can contain different type of planes, stick to the upper level type:
List<Plane> planes = new List<Plane>
{
new Boeing737("A", 5),
new Boeing737("B", 5),
new Boeing737("C", 5),
new Boeing737("D", 5),
new AirplaneX("D", 10, 350)
};
List
can also be used together with LINQ to facilitate its manipulation and filtering (more info here). For example, sort by weight:
var planesSortedTons = planes.OrderBy(x => x.Tons).ToList();
Select only the planes with Fuel > 10
:
var planesFuel10 = planes.Where(x => x.Fuel > 10).ToList();
On a side note, if you want to fill a huge list of data through console input, you need to build an infinite loop (for example a while (true)
) and populate list by addition:
static void Main(string[] args)
{
List<Boeing737> boeings = new List<Boeing737>();
String input;
while (true)
{
Consol.WriteLine("Enter name:");
input = Console.ReadLine();
if (input.ToLowerInvariant() == "stop")
break;
String name = input.Trim();
Consol.WriteLine("Enter fuel:");
input = Console.ReadLine();
if (input.ToLowerInvariant() == "stop")
break;
Int32 fuel;
try
{
fuel = Int32.Parse(input.Trim());
}
catch
{
Console.WriteLine("Wrong input, stopping!");
break;
}
boeings.Add(new Boeing737(name, fuel));
}
}
Upvotes: 2
Reputation: 189
I would create a list of Boeing737 and I would not take the straight input from the console.
List<Boeing737> boeingList = new List<Boeing737>();
boeingList.add(new Boeing737() { param=value...});
Then later on you can access them by index, name, loop through them, etc.
I would also look into Linq
Upvotes: 1
Reputation: 1
Use array initialization:
var boeings = new []
{
new Boeing737("name", 123, 1000),
new Boeing737("name", 123, 1000),
new Boeing737("name", 123, 1000),
new Boeing737("name", 123, 1000),
};
Upvotes: 0