如何从签名实现操作 [英] How to implement operations from signatures
问题描述
我在实现一些以分钟和秒为单位将分数转换为度数的操作时遇到问题.
这是我正在使用的 UML 类:
类:
角度
字段:
-MINUTES_PER_DEGREE:final int = 60-SECONDS_PER_MINUTE:final int = 60-SECONDS_PER_DEGREE:final int = 3600-DEGREE_SYMBOL:final char = '\u00B0'-度数:int-分钟:整数-秒:双倍
方法:
+add(left: Angle, right: Angle): Angle+subtract(left: Angle, right: Angle): Angle+角度()+角度(分数:双)+角度(度:整数,分:整数,秒:双)+getDegrees(): int+getMinutes(): 整数+getSeconds(): 双倍+getAngleInFractionalDegrees(): 双倍+setDegrees(degrees: int): void+setMinutes(分钟:int):无效+setSeconds(秒:双):无效+setAngle(度数:整数,分:整数,秒:双):无效+setAngleToFractionalDegrees(fractionalDegrees: double): 无效+addAngle(角度:角度):无效+addDegrees(degrees: int): void+addMinutes(minutes: int): 无效+addSeconds(seconds: double): void+subtractAngle(角度:角度):无效+subtractDegrees(degrees: int): void+subtractMinutes(分钟:整数):无效+subtractSeconds(seconds: double): void+toString(): 字符串
这是我到目前为止所做的.注释掉的部分是我遇到的问题.我的问题主要围绕加减法.我不确定我是否正确使用了 UML 或者我还缺少什么.
类角{私有静态最终 int MINUTES_PER_DEGREE = 60;私有静态最终 int SECONDS_PER_MINUTE = 60;私有静态最终 int SECONDS_PER_DEGREE = 3600;私有静态最终字符 DEGREE_SYMBOL = '\u00B0';私人整数学位;私人整数分钟;私人双秒;//public static Angle add(Angle left, Angle right)//{//角度 add = left.getAngle + right.getAngle;//返回添加;//}////公共静态角度减法(左角度,右角度)//{////角度减法 = left.getAngle - right.getAngle;//返回减法;//}公共角度(){}公共角度(双分数){}公共角度(整数度,整数分钟,双秒){}公共 int getDegrees(){返回 this.degrees;}public int getMinutes(){返回 this.minutes;}公共双 getSeconds(){返回 this.seconds;}公共双 getAngleInFractionalDegrees(){//返回 this.Angle;}public void setDegrees(int degree){this.degrees = 度数;}public void setMinutes(int 分钟){this.minutes = 分钟;}public void setSeconds(双秒){this.seconds = 秒;}public void setAngle(整数度,整数分钟,双秒){//不知道该放什么}公共无效 setAngleToFractionalDegrees(双小数分数){//这不起作用,因为fractionalDegrees 未定义//this.fractionalDegrees =fractionalDegrees;}}
这是 UML 类的
实际上应该是直截了当的,第一种方法只是快速组合一次设置所有属性:
public void setAngle(int度,int分,双秒){setDegrees(度);设置分钟(分钟);设置秒(秒);}
next 方法需要从小数值转换为整数,像这样(数学可能有问题,但方法是正确的):
public void setAngleToFractionalDegrees(double fractionalDegrees){final int degree = (int) Math.floor(fractionalDegrees);final int 分钟 = (int) Math.floor((fractionalDegrees - degree) * 60.0);最后双秒 = (fractionalDegrees - 度数 - (分钟/60.0)) * 3600.0;setAngle(度,分,秒);}
I'm Having problems implementing some operations converting fractional to degrees in minutes and seconds.
Here's the UML Class I am working with:
Class:
Angle
Fields:
-MINUTES_PER_DEGREE:final int = 60
-SECONDS_PER_MINUTE:final int = 60
-SECONDS_PER_DEGREE:final int = 3600
-DEGREE_SYMBOL:final char = '\u00B0'
-degrees: int
-minutes: int
-seconds: double
Methods:
+add(left: Angle, right: Angle): Angle
+subtract(left: Angle, right: Angle): Angle
+Angle()
+Angle(fractionalDegrees:double)
+Angle(degrees: int, minutes: int, seconds: double)
+getDegrees(): int
+getMinutes(): int
+getSeconds(): double
+getAngleInFractionalDegrees(): double
+setDegrees(degrees: int): void
+setMinutes(minutes: int): void
+setSeconds(seconds: double): void
+setAngle(degrees: int, minutes: int, seconds: double): void
+setAngleToFractionalDegrees(fractionalDegrees: double): void
+addAngle(angle: Angle): void
+addDegrees(degrees: int): void
+addMinutes(minutes: int): void
+addSeconds(seconds: double): void
+subtractAngle(angle: Angle): void
+subtractDegrees(degrees: int): void
+subtractMinutes(minutes: int): void
+subtractSeconds(seconds: double): void
+toString(): String
And here's what I have done so far. The portions commented out are what I am having issue with. Mostly my issues surround the add and subtract. I'm not sure if I am using the UML properly or what else I am missing.
class Angle
{
private static final int MINUTES_PER_DEGREE = 60;
private static final int SECONDS_PER_MINUTE = 60;
private static final int SECONDS_PER_DEGREE = 3600;
private static final char DEGREE_SYMBOL = '\u00B0';
private int degrees;
private int minutes;
private double seconds;
// public static Angle add(Angle left, Angle right)
// {
// Angle add = left.getAngle + right.getAngle;
// return add;
// }
//
// public static Angle subtract(Angle left, Angle right)
// {
//
// Angle subtract = left.getAngle - right.getAngle;
// return subtract;
// }
public Angle()
{
}
public Angle(double FractionalDegrees)
{
}
public Angle(int degrees, int minutes, double seconds)
{
}
public int getDegrees()
{
return this.degrees;
}
public int getMinutes()
{
return this.minutes;
}
public double getSeconds()
{
return this.seconds;
}
public double getAngleInFractionalDegrees()
{
// return this.Angle;
}
public void setDegrees(int degrees)
{
this.degrees = degrees;
}
public void setMinutes(int minutes)
{
this.minutes = minutes;
}
public void setSeconds(double seconds)
{
this.seconds = seconds;
}
public void setAngle(int degrees, int minutes, double seconds)
{
// Not sure what to put here
}
public void setAngleToFractionalDegrees(double fractionalDegrees)
{
// This doesn't work because fractionalDegrees undefined
// this.fractionalDegrees = fractionalDegrees;
}
}
EDIT: Here's a picture of the UML Class:
actually is should be straight forward, first method is just quick combination to set all properties at once:
public void setAngle(int degrees, int minutes, double seconds)
{
setDegrees(degrees);
setMinutes(minutes);
setSeconds(seconds);
}
next method requires conversion from fractional values to integer ones, like this (math could have problems, but approach is correct):
public void setAngleToFractionalDegrees(double fractionalDegrees)
{
final int degrees = (int) Math.floor(fractionalDegrees);
final int minutes = (int) Math.floor((fractionalDegrees - degrees) * 60.0);
final double seconds = (fractionalDegrees - degrees - (minutes / 60.0)) * 3600.0;
setAngle(degrees, minutes, seconds);
}
这篇关于如何从签名实现操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!