2014-09-10 4 views
-2

Я знаю, что здесь уже есть вопросы о треугольниках, но я пробовал искать и не могу найти решение моей проблемы.Поиск области треугольника и типа

Я работаю на домашнее задание, где мне нужно, чтобы обеспечить длины сторон треугольника (который пользователь может обеспечить в любом порядке.

я найти тип треугольника (справа , равнобедренные и т. д.), за исключением скалывания, так как это не было в инструкциях. Мне также нужно найти область треугольника.

У меня более ста строк, но все еще не работает. 't любые ошибки, которые мешают ему компилировать, он просто не работает должным образом при выполнении.

Любая помощь будет очень признательна.

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 (isesceles)'. Обратите внимание на [мой ответ] (http://stackoverflow.com/questions/21356277/java-if-statement-after-while-loop-not-working/21356308#21356308) на другой вопрос здесь. – csmckelvey

+0

«Нет ошибок, чтобы сделать это там, где он не будет скомпилирован, он просто не работает должным образом при выполнении». Stack Overflow - не ваша личная команда отладки. Начните с объяснения, что пойдет не так, что вы пытались, и какой * конкретной * проблемы вы испытываете в ее исправлении или понимании. – Shashank

+0

извините, если я неправильно использовал сайт. Я просто сделал учет, потому что я так много боролся. и спасибо за отзыв Takendarkk. –

ответ

-1

Этот вид сбоку, шаги на ваш вопрос полностью - я действительно не вырыл в свой код и поэтому не знаю, почему это не удается, но вы можете быть в состоянии обмануть немного и использовать математику для найдите область, используя Heron's formula, и упростите свой код.

Формула Heron позволит вам предоставить длину трех сторон любого треугольника (справа, равностороннее или скальне) и вычислить область, не зная ничего о углах.

Поскольку это звучит как домашнее задание, я не уверен, что это решение разрешено или нет вашим учителем, но, возможно, стоит изучить его.

формула Герона определяется как

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

... где а, Ь и с являются длины боковых и s определяется как:

s = (a + b + c)/2

Я буду оставьте это упражнением для вас, чтобы выяснить, как реализовать формулу (если вы решите ее использовать). В качестве подсказки модуль Math имеет метод sqrt, который вы можете использовать.

+0

Ты спасатель жизни. Мне нужно было так плохо, я работаю над этим часами. Я знал, что я уже думал об этом, но я не знал, как это сделать. –

Смежные вопросы