2014-09-30 3 views
1

Для моего задания я использую JOptionPane, чтобы попросить пользователя ввести 3 стороны треугольника. Затем программа должна использовать JOptionPane, чтобы рассказать им тип треугольника (равносторонний, правый, острый, тупый и равнобедренный, но равнобедренные треугольники также либо правильные, тупые или острые), это и рассчитать площадь.JOptionPane in if statements

Когда он равносторонний, он возвращается, говоря мне, что он равносторонний, но он также говорит мне, что он равнобедренный 3 раза. Хотя у меня есть только равнобедренные JOptionPane с другими типами треугольников.

Другая проблема заключается в том, что, когда она правильная, острая или туповатая, она пропускает JOptionPane, рассказывая мне, какой тип это и просто говорит мне, что это равнобедренные.

package assignment.ii; 
import javax.swing.JOptionPane; 
import java.lang.*; 
public class AssignmentII 

    { 

public static void main(String[] args) { 

    int a = Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter a side of the triangle ")); 
    int b = Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter a side of the triangle ")); 
    int c = Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter a side of the triangle ")); 
    double s = (.5*(a+b+c)); 

    if(a==b){ 
      if (b==c) 
       JOptionPane.showMessageDialog(null, "The triangle is a equilateral triangle"); 

    }else if (((a*a)+(b*b)) == (c*c)) { 
       JOptionPane.showMessageDialog(null, "The triangle is a right triangle"); 
       if (a==b) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");  
       if (b==c) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");  
       if (a==c) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle"); 

    }else if (((a*a)+(b*b))<(c*c)){  
       JOptionPane.showMessageDialog(null, "The triangle is an obtuse triangle"); 
       if (a==b) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");  
       if (b==c) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");  
       if (a==c) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle"); 

    }else if (((a*a)+(b*b))>(c*c))    
       JOptionPane.showMessageDialog(null, "The triangle is an acute triangle"); 
       if (a==b) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");  
       if (b==c) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");  
       if (a==c) 
       JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle"); 
    double d; 
    d = ((s)*(s - a)*(s - b)*(s - c)); 

    JOptionPane.showMessageDialog(null, "The area of the triangle is: " + Math.sqrt(d)); 


    } 
    } 
+1

В вашем самом последнем 'else if' отсутствуют оба фигурных скобки. Когда 'a == b', но' b! = C', ничего не будет проанализировано. –

+0

** FYI **: Вам ** не нужно «импортировать java.lang. *;» В ваш код, как это будет сделано компилятором в любом случае. –

+0

Принимаете ли вы, что третья запись (c) является гипотенузой? Возможно, вам придется изучить входные данные, чтобы определить, какой из них является самым большим, прежде чем проверять его против теоремы о пифагоре. – crig

ответ

3

Вы, безусловно, не имеете ключевое слово «else» перед словами «если», которые сравнивают стороны треугольников. Попробуйте это:

if (a==b) JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");
else if (b==c) JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");
else if (a==c) JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");

Или более кратко:

if (a==b || b==c || c==a) JOptionPane.showMessageDialog(null, "The triangle is a Isosceles triangle");

Другая проблема заключается в том, что if (a==b) { if (b==c) { } } не то же самое, как

if ((a==b) && (b==c)) { }

В первом случае , i f a == b, но b! = c, тогда во втором случае ничего не будет выполнено, ваш код пропустит следующий оператор else if.

0

Другой способ организовать это в менее запутанной усадьбе - это проверить каждый атрибут отдельно. Создайте отдельные методы, чтобы определить каждую вещь, которую вам нужно знать. Тогда все случаи не все смешиваются вместе. Что-то вроде:

int angle = getTriangleAngle(a,b,c); 
boolean isocelesTriangle = isIsocelesTriangle(a,b,c); 
boolean equalateralTriangle = isEqualateralTriangle(a,b,c); 
int area = calcTriangleArea(a,b,c); 

Тогда вы можете пойти о построении выходной строки из этих значений.