【问题标题】:Finding the area of a triangle and the type求三角形的面积和类型
【发布时间】:2014-11-03 14:35:27
【问题描述】:

我知道这里已经有关于三角形的 Java 问题,但我尝试过查找,但找不到解决问题的方法。

我正在做一个家庭作业,我需要提供三角形边的长度(用户可以按任何顺序提供。

除了不等边角外,我必须找到三角形的类型(右、等腰等),因为说明中没有。我还必须找到三角形的面积。

我有超过一百行,但仍然无法正常工作。没有任何错误阻止它编译;它只是在执行时无法正常工作。

任何帮助将不胜感激。

import javax.swing.JOptionPane;

public class TriangleChecker {

    public static void main(String[] args) {

        Boolean triangle, right, equilateral, isosceles;
        triangle = false;
        right = false;
        equilateral = false;
        String side1, side2, side3;
        double s1, s2, s3, perimeter, areai, bi, hi, fhi, be, he, fhe, areae, br, hr, arear;
        System.out.println("Hello welcome to the Triangle Checker");
        side1 = JOptionPane.showInputDialog("Please enter side 1 of the triangle.");
        side2 = JOptionPane.showInputDialog("Please enter side 2 of the triangle.");
        side3 = JOptionPane.showInputDialog("Please enter side 3 of the triangle.");
        s1 = Double.parseDouble(side1);
        s2 = Double.parseDouble(side2);
        s3 = Double.parseDouble(side3);
        if ((s1 > s2 + s3) || (s2 > s1 + s3) || (s3 > s1 + s2)) {
            triangle = false;
        }
        else {
            triangle = true;
        }
        if ((s1 > s2 && s1 > s3) && (s1*s1 == s2*s2 + s3*s3)) {
            right = true;
        }
        else if((s2 > s1 && s2 > s3) && (s2*s2 == s1*s1 + s3*s3)) {
            right = true;
        }
        else if((s3 > s1 && s3 > s2) && (s3*s3 == s1*s1 + s2*s2)) {
            right = true;
        }
        else {
            right = false;
        }
        if((s1 == s2) && (s1 == s3)) {
            equilateral = true;
            right = false;
            isosceles = false;
        }
        else {
            equilateral = false;

        }
        if((s1 == s2) && (s1 != s3)) {
            isosceles = true;
        }
        else if((s1 == s3) && (s1 != s2)) {
            isosceles = true;
        }
        else if((s2 == s3) && (s1 != s3)) {
            isosceles = true;
        }
        else {
            isosceles = false;
        }
        if((isosceles = true) && (s1 == s2)) {
            bi = (s3/2);
            hi = ((s1*s1) - (bi*bi));
            fhi = Math.sqrt(hi);
            areai = bi * fhi;
        }
        else if((isosceles = true) && (s1 == s3)) {
            bi = (s2/2);
            hi =((s1*s1) - (bi*bi));
            fhi = Math.sqrt(hi);
            areai = bi * fhi;
        }
        else if((isosceles = true) && (s2 == s3)) {
            bi = (s1/2);
            hi = ((s2*s2) - (bi*bi));
            fhi = Math.sqrt(hi);
            areai = bi * fhi;
        }

        else { 
            bi = 0;
            hi = 0;
            fhi = 0;
            areai = bi * fhi;
        }
        if(equilateral == true) {
            be = (s1/2);
            he = ((s2*s2) - (be*be));
            fhe = Math.sqrt(he);
            areae = be*he;
        }
        else {
            be = 0;
            he = 0;
            fhe = 0;
            areae = 0;
        }
        if((right = true) && (s1 < s2) && (s1 < s3) && (s2 < s3)) {
            br = (s1/2);
            hr =(s2);
            arear = br*hr;
        }
        else if((right = true) &&(s1 < s2) && (s1 < s3) && (s3 < s2)) {
            br = s1/1;
            hr = s3;
            arear = br*hr;
        }
        else if((right = true) && (s2 < s1) && (s2 < s3) && (s1 < s3)) {
            br = s2/2;
            hr = s1;
            arear = br*hr;
        }
        else if((right = true) && (s2 < s1) && (s2 < s3) && (s3 < s1)) {
            br = s2/2;
            hr = s3;
            arear = br*hr;
        }
        else if((right = true) && (s3 < s1) && (s3 < s2) && (s1 < s2)) {
            br = s3/2;
            hr = s1;
            arear = br*hr;
        }
        else if((right = true) && (s3 < s1) && (s3 < s2) && (s2 < s1)) {
            br = s3/2;
            hr = s2;
            arear = br*hr;
        }
        else {
            br = 0;
            hr = 0;
            arear = 0;
        }


        perimeter = s1 + s2 + s3;
        if(triangle = true) {
            System.out.println("This is a triangle.");
        }
        else {
            System.out.println("This does not equal a triangle.");
            System.exit(0);
        }
        if (right == true) {
            equilateral = false;
            isosceles = false;
        }
        else if (equilateral == true) {
            right = false;
            isosceles = false;
        }
        else {
            equilateral = false;
            right = false;
        }
        if(right = true) {
            System.out.println("This is a right triangle.");
        }
        else {
            System.out.println("This is not a right triangle.");
        }
        if (equilateral = true) {
            System.out.println("This is an equilateral triangle.");
        }
        else {
            System.out.println("This is not an equilateral triangle.");
        }
        if (isosceles = true) {
            System.out.println("This is an isosceles triangle.");
        }
        else {
            System.out.println("This is not an isosceles triangle.");
        }
        if ((arear == 0) && (areae == 0)) {
            System.out.println("The area of the triangle is " + areai + ".");
        }
        else if ((areai == 0) && (arear == 0)) {
            System.out.println("The area of the triangle is " + areae + ".");
        }
        else {
            System.out.println("The area of the triangle is " + arear + ".");
        }
    }
}

【问题讨论】:

  • 我看到的第一件事是大量使用赋值运算符而不是比较的 if 语句。例如if (isosceles = true) 应该是if (isosceles == true) 或者更好的是if (isosceles)。在此处查看 my answer 以了解有关此问题的不同问题。
  • “没有任何错误使它无法编译它只是在执行时无法正常工作。” Stack Overflow 不是您的个人调试团队。首先解释哪里出了问题、您尝试过什么,以及您在修复或理解它时遇到了哪些具体问题。
  • 对不起,如果我滥用了该网站。我刚刚注册了一个帐户,因为我很挣扎。并感谢 Takendarkk 的提示。

标签: java types geometry area


【解决方案1】:

这种方式完全避开了你的问题——我还没有真正深入研究你的代码,所以不知道它为什么会失败,但你可以稍微作弊并使用数学来找到该区域Heron's formula 并让您简化代码。

Heron 的公式可让您提供任何三角形(直角、等边或不等边)的 3 条边的长度,并在不知道任何角度的情况下计算面积。

由于这听起来像是家庭作业,我不确定你的老师是否允许这种解决方案,但它可能值得研究。

Heron 公式定义为

...其中 a、b 和 c 是边长,s 定义为:

我将把它作为一个练习留给你,让你弄清楚如何实现这个公式(如果你决定使用它)。作为提示,Math 模块有一个您可以使用的sqrt 方法。

【讨论】:

  • 你是救生员。我非常需要它,我已经为此工作了几个小时。我知道我想多了,但我不知道该怎么做。
猜你喜欢
  • 2014-12-06
  • 1970-01-01
  • 2023-01-30
  • 2021-06-05
  • 2021-12-21
  • 2015-05-12
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多