java - 编写一个程序,提示输入三角形的边长并报告三个角
问题描述
编写一个程序,提示输入三角形的边长并报告三个角。
我没有得到等于180的角度,并且在某些情况下,我得到NaN的某些角度值。
我的代码如下所示
public static int getSideA() {
System.out.println("What is the length of side a?");
Scanner console = new Scanner(System.in);
int a = console.nextInt();
return a;
}
public static int getSideB() {
System.out.println("What is the length of side b?");
Scanner console = new Scanner(System.in);
int b = console.nextInt();
return b;
}
public static int getSideC() {
System.out.println("What is the length of side C");
Scanner console = new Scanner(System.in);
int c = console.nextInt();
return c;
}
public static void giveSides(int a, int b, int c) {
double angleA = Math.toDegrees(Math.acos((a^2 - b^2 - c^2) / (-2.0 * c * b)));
double angleB = Math.toDegrees(Math.acos((b^2 - a^2 - c^2) / (-2.0 * a * c)));
double angleC = Math.toDegrees(Math.acos((c^2 - a^2 - b^2) / (-2.0 * a * b)));
System.out.println("The three angles are: " + angleA + " " + angleB + " " + angleC);
}
public static void main(String[] args) {
int a = getSideA();
int b = getSideB();
int c = getSideC();
giveSides(a, b, c);
}
解决方案
问题在于这三行:
double angleA = Math.toDegrees(Math.acos((a^2 - b^2 - c^2) / (-2.0 * c * b)));
double angleB = Math.toDegrees(Math.acos((b^2 - a^2 - c^2) / (-2.0 * a * c)));
double angleC = Math.toDegrees(Math.acos((c^2 - a^2 - b^2) / (-2.0 * a * b)));
^2
并不意味着“平方”。它的意思是“按位异或 2”。您需要使用a*a
或Math.pow(a, 2)
表示“平方”。
所以这三行应该是:
double angleA = Math.toDegrees(Math.acos((a*a - b*b - c*c) / (-2.0 * c * b)));
double angleB = Math.toDegrees(Math.acos((b*b - a*a - c*c) / (-2.0 * a * c)));
double angleC = Math.toDegrees(Math.acos((c*c - a*a - b*b) / (-2.0 * a * b)));
此外,这些getSideX
方法可以合并为一个,并且可以将扫描仪提取到类级别:
static Scanner console = new Scanner(System.in);
public static int getSide(String name) {
System.out.println("What is the length of side " + name + "?");
int a = console.nextInt();
return a;
}
您的main
方法现在如下所示:
public static void main(String[] args) {
int a = getSide("A");
int b = getSide("B");
int c = getSide("C");
giveSides(a, b, c);
}
推荐阅读
- python - 使用 scikit-image resize 和 OpenCV resize 函数重现相同的输出
- tensorflow - 如何从 Wiki-words-250-with-normalization 中检索单词
- python - 有效地在两个列表之间找到“重复”,其中 dict-elements 仅比较 dict-fields 的子集
- android - 如何在android中为大屏幕制作响应式布局
- html - 正方形内的正方形与 CSS
- c# - 从具有运行时泛型类型的泛型方法中检索集合
- google-analytics - 收集请求中未发送用户 ID
- google-bigquery - BigQuery JSON 提取
- python - Python - 从图像 url 而不是本地文件位置检测暗网对象
- python - 像直方图一样填充 2D ndarray 的最快方法