2014-09-10 2 views
-2

여기에 이미 삼각형에 대한 Java 질문이 있지만 알고 보았습니다. 내 문제에 대한 해결책을 찾을 수 없습니다.삼각형의 면적 및 유형 찾기

나는 사용자가 임의의 순서로 제공 할 수있는 삼각형 (의 변의 길이를 제공해야 할 숙제에서 일하고 있어요.

나는 한 오른쪽 (삼각형의 유형을 찾기 위해 , 이등변, 기타 등등). 지시에 없었기 때문에 scalene을 제외하고. 삼각형의 영역을 찾아야한다.

나는 100 라인 이상을 가지고 있지만, 여전히 작동하지 않는다. 컴파일 할 때 오류가 발생하지 않으며 실행시 제대로 작동하지 않습니다.

도움이 될만한 점이 많습니다. 정말 코드에 파고하지 않은 것이 실패 왜 그렇게 모르겠지만, 당신은 약간의 속임수와 수학에 사용할 수 있습니다 -

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 + "."); 
     } 
    } 
} 
+1

첫 번째로 보게되는 것은 비교 대신 할당 연산자를 사용하는 if 문을 사용하는 것입니다. 예를 들어'if (isosceles = true)'는 아마도'if (isosceles == true)'이거나 아니면'if (isosceles)'일 가능성이 있습니다. [내 대답] (http://stackoverflow.com/questions/21356277/java-if-statement-after-while-loop-not-working/21356308#21356308)에서 다른 질문을 확인하십시오. – csmckelvey

+0

"컴파일 할 곳을 만들 때 오류가 발생하지 않고 실행될 때 제대로 작동하지 않습니다." 스택 오버플로는 개인 디버깅 팀이 아닙니다. 무엇이 잘못되었는지, 무엇을 시도했는지, 그리고 그 문제를 고치거나 이해하는 데있어 특별한 문제가 무엇인지 설명하십시오. – Shashank

+0

내가 웹 사이트를 잘못 사용하면 죄송합니다. 내가 너무 많이 고심하고 있었기 때문에 나는 단지 설명을했다. 팁 Takendarkk에 감사드립니다. –

답변

-1

이런 종류의 전적으로 귀하의 질문에 측면-단계 Heron's formula을 사용하여 해당 지역을 찾고 코드를 간소화하십시오.

헤론의 공식을 사용하면 삼각형 (오른쪽, 등변 또는 scalene)의 3면 길이를 제공하고 각도에 대해 알지 못해도 영역을 계산할 수 있습니다.

숙제처럼 들리므로,이 해결책이 선생님에게 허용되는지 여부는 확실하지 않지만 조사할만한 가치가있을 수 있습니다.

s = (a + b + c)/2

I 정액 :

헤론의 공식은 A, B, C는 측면 길이이며, S는 다음과 같이 정의된다

A = sqrt(s(s - a)(s - b)(s - c))

...로서 정의된다 수식을 구현하는 방법을 알아내는 연습 문제로 남겨 두십시오 (사용하기로 결정한 경우). 힌트로 Math 모듈에는 sqrt 메서드가 있습니다.

+0

당신은 생명의 은인입니다. 나는 그렇게 나빠야했다. 나는 이것을 몇 시간 동안 해왔다. 나는 내가 그것을 생각하는 것 위에있다라는 것을 알고 있었다. 그러나 나는 방법을 모르고 있었다. –