Nybörjare behöver hjälp med klass Circle (C#)

Permalänk

Nybörjare behöver hjälp med klass Circle (C#)

Hej!

Har fått i uppgift att skapa en klass som ska föreställa en Cirkel. Programmet förutsätter att du redan vet diametern, så den behöver inte göra några uträkningar där. Uppgiften ska ge mig omkretsen med hjälp av: diameter * pi, getCircumference ska vara med för att uppgiften ska bli godkänd.
Problemet jag har är att resultaten jag får ut är helt felaktiga (vad jag ser iallfall).
Syftet med uppgiften är att lära sig använda sig utav en klass för inmatningar/utmatningar.

Programkoden ser ut så här:

namespace Övning_4_Uppgift_2
{
class Program
{
static void Main(string[] args)
{
Circle newCircle = new Circle();

Console.WriteLine("Vänligen skriv in Diametern du vill få ut omkretsen utav? ");
newCircle.setDiameter(Console.Read());

Console.WriteLine("Omkretsen är " + newCircle.getCircumference());
Console.ReadKey();
}
}
}

Dold text

Klass koden ser ut så här:

namespace Övning_4_Uppgift_2
{
class Circle
{
private double diameter;
private double pi = Math.PI;

public void setDiameter(double di)
{
diameter = di;
}
public double getDiameter()
{
return diameter;
}
public double getCircumference()
{
return diameter * pi;
}
}
}

Dold text

Värt att veta är att jag provade både att sätta variabel pi till både: Math.PI och 3.1416
Men båda ger mig konstiga svar. Kan någon vänlig själ hjälpa mig vad jag gjort fel? Säkert något enkelt.

Tack på förhand!

Edit: Resultatet jag får om jag skriver in att diametern är 1 är; 153.938 + en massa siffror.

Permalänk
Medlem

Du ska nog ta och kolla vad "Console.Read" egentligen returnerar därför att ascii dec för "1" är 49 och 49 * Pi är det resultat du får.

Permalänk

Tack.

Har nog börjat närma mig felet. Jag hade skrivit Read() när jag faktiskt trodde jag skrivit ReadLine(), väljer jag här att skriva ReadLine(); returnerar den felkod:
Error 2 Argument 1: cannot convert from 'string' to 'double' 15 35 Övning 4 Uppgift 2

Dock har jag inte löst det ännu, utan blir nu mer förvirrad.

Permalänk
Medlem

ett snabbt tips är ju att Googla på felmeddelandet: "cannot convert from 'string' to 'double'".

EDIT:
och/eller kolla vilken datatyp Read()/ReadLine() returnerar samt vilken datatyp du vill skicka in i din klass.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk

Jag ger det ett sista försök att få lite vägledning.
Hur kan jag tracka vad Read()/ReadLine() returnerar för data VS?

Har googlat felmeddelandet men ej hittat något.

Permalänk

Här kan du läsa mer om de olika metoderna.

http://msdn.microsoft.com/en-us/library/system.console.read.a...

Visa signatur

- Man kan ju citera, eller skriva till tomma intet. -

Permalänk
Hedersmedlem
Skrivet av mlindhoma:

Jag ger det ett sista försök att få lite vägledning.
Hur kan jag tracka vad Read()/ReadLine() returnerar för data VS?

Har googlat felmeddelandet men ej hittat något.

Read:

http://msdn.microsoft.com/en-us/library/system.console.read.a...

ReadLine:

http://msdn.microsoft.com/en-us/library/system.console.readli...

Notera att Read returnerar en int men du har inte värdet 1 om du skriver en etta utan det är ett ASCII-värde som representerar tecknet '1'.
Här har du en ASCII-tabell som visar värden för olika tecken.

http://www.asciitable.com/

Det du kanske vill göra är att läsa in dina värden och sen omvandla det till riktiga ints me värdet du förväntar dig. Det finns det inbyggda metoder för.

Permalänk

Löste problemet genom att ändra i klassen till

public void getDiameter(string di)
{
diameter = double.Parse(di);
}

Så konverteringen skedde i klassen. Tack för hjälpen

Permalänk
Medlem

1. Varför lagrar du pi som en variabel? Behövs inte, det är åtkomligt direkt via Math.Pi, användningsexempel:
Math.Pi * Math.Pi * radie = summa

2. Varför lagras diameter som en variabel? Det kan vara en funktion istället med return-typen double, användningsexempel:
Diameter för kvadrat:

public double Diameter(double b, double h) { return b * h; }

I följd kan du enklare använda koden genom en andra funktion:

B = bas, H = höjd

public double Circumference(double b, double h) { return Diameter(d, h) * pi }

dead-post men ändå

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40