2014-11-08 4 views
0

Моя задача - вычислить следующие свойства заданного треугольника: длины всех сторон, углы во всех углах, периметр и площадь. У меня есть класс Треугольника и класс тега Треугольника. Я ДУМАЮ, что правильно закодировал периметр и область? Но я начинаю думать вместо того, чтобы устанавливать постоянную переменную сторону для моего периметра. Я должен использовать длины всех сторон, чтобы найти мой периметр. То, что я застрял, - это найти длины и углы. По какой-то причине, когда я запускаю свой класс тестера, все они выходят в 1.0. Любой совет будет принят во внимание! Спасибо!Поиск длины и углов треугольника

import java.util.Scanner; 

public class Triangle 
    { 
     Scanner in = new Scanner(System.in); 

     /** 
     * Variables 
     */ 
     double x1; 
     double x2; 
     double x3; 
     double y1; 
     double y2; 
     double y3; 
     double lengthA; 
     double lengthB; 
     double lengthC; 
     double angleA; 
     double angleB; 
     double angleC; 
     double area; 
     double perimeter; 
     double base; 
     double height; 
     double p; 

     /** 
     Constructs x and y coordinates 
     @param x1, x2, x3 to x1, x2, x3 
     @param y1, y2, y3 to y1, y2, y3 
    */ 
    public Triangle(double x1, double x2, double x3, double y1, double y2, double y3) 
    { 
     this.x1 = x1; 
     this.x2 = x2; 
     this.x3 = x3; 
     this.y1 = y1; 
     this.y2 = y2; 
     this.y3 = y3; 
    } 

     /** 
     *Find lengths of all sides 
     */ 
     public double getLengthA() 
     { 
      lengthA = Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2)); 
      return lengthA; 
     } 

     public double getLengthB() 
     { 
      lengthB = Math.sqrt(Math.pow((x3 - x2), 2) + Math.pow((y3 - y2), 2)); 
      return lengthB; 
     } 

     public double getLengthC() 
     { 
      lengthC = Math.sqrt(Math.pow((x1 - x3), 2) + Math.pow((y1 - y3), 2)); 
      return lengthC; 
     } 

     /** 
     * Find angles at all corners 
     @return angles at all corners 
     */ 
     public double getAngleA() 
     { 
      angleA = lengthA + lengthB + lengthC - (lengthB * lengthC); 
      return angleA; 
     } 

     public double getAngleB() 
     { 
      angleB = lengthB + lengthA + lengthC - (lengthA * lengthC); 
      return angleB; 
     } 

     public double getAngleC() 
     { 
      angleC = lengthC + lengthA + lengthB - (lengthA * lengthB); 
      return angleC; 
     } 


     /** 
     * Constant Variables 
     */ 
     public Triangle() 
     { 
      base = 5; 
      height = 15; 
     } 

     /** 
     * Find perimeter of triangle 
     */ 
     public double getPerimeter() 
     { 
      perimeter = lengthA + lengthB + lengthC; 
      return perimeter; 
     } 

     public double getHalfPerimeter() 
     { 
      p = perimeter/2; 
      return p; 
     } 

     /** 
     * Find area of triangle 
     */ 
     public double getArea() 
     { 
      double area = Math.sqrt(p * (p - lengthA) * (p - lengthB) * (p - lengthC)); 
      return area; 
     } 
} 

Вот мой тестер класс:

import java.util.Scanner; 

import javax.swing.JOptionPane; 


public class TriangleSimulator 
{ 
public static void main (String[] args) 
{ 
    Scanner in = new Scanner(System.in); 


String input = JOptionPane.showInputDialog("Enter X coordinate for the first corner of the triangle: "); 
double x1 = Double.parseDouble(input); 
input = JOptionPane.showInputDialog("Enter Y coordinate for the first corner of the triangle: "); 
double y1 = Double.parseDouble(input); 
input = JOptionPane.showInputDialog("Enter X coordinate for the second corner of the triangle: "); 
double x2 = Double.parseDouble(input); 
input = JOptionPane.showInputDialog("Enter Y coordinate for the second corner of the triangle: "); 
double y2 = Double.parseDouble(input); 
input = JOptionPane.showInputDialog("Enter X coordinate for the third corner of the triangle: "); 
double x3 = Double.parseDouble(input); 
input = JOptionPane.showInputDialog("Enter Y coordinate for the third corner of the triangle: "); 
double y3 = Double.parseDouble(input); 

Triangle t = new Triangle(x1, x2, x3, y1, y2, y3); 

System.out.println("Length A is: " + t.getLengthA()); 
System.out.println("Length B is: " + t.getLengthB()); 
System.out.println("Length C is: " + t.getLengthC()); 
System.out.println("Angle A is: " + t.getAngleA()); 
System.out.println("Angle B is: " + t.getAngleB()); 
System.out.println("Angle C is: " + t.getAngleC()); 
System.out.println("Area: " + t.getArea()); 
System.out.println("Perimeter: " + t.getPerimeter()); 

in.close(); 
} 
} 

ответ

3

Ты показываешь JOptionPanes, побуждающие пользователя для ввода, но вы не получает входной сигнал и вы, таким образом, не используя input, чтобы установить состояние вашего треугольника, создав объект треугольника по умолчанию, используя его конструктор без параметров. Поймите, что в программировании Java нет волшебства, и ваш объект Triangle не будет волшебно знать, какие цифры пользователь ввел и соответствующим образом изменил. Вместо этого вы получите эту информацию в свой Треугольник.

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

например.

String input = JOptionPane.showInputDialog("Enter X coordinate for the first corner of the triangle: "); 
double x1 = Double.parseDouble(input); 
input = JOptionPane.showInputDialog("Enter Y coordinate for the first corner of the triangle: 
double y1 = Double.parseDouble(input); 
//.... etc repeat... 

Triangle triangle = new Triangle(x1, x2, x3, y1, y2, y3); 

Редактировать

Этого конструктор игнорирует значение передается в:

общественного треугольнике (двойная x1, двойная x2, двойная x3, двойная y1, двойная y2, двойной у3) { x1 = 0; x2 = 0; x3 = 0; y1 = 0; y2 = 0; y3 = 0; }

Конструктор, такой как тот, который вам понадобится, должен принимать значения, переданные, и использовать эти значения для установки полей класса. Например здесь:

public class Foo { 
    private int bar; // the bar field 

    public Foo(int bar) { 
     this.bar = bar; 
    } 
} 

Обратите внимание, что я использую this.bar выше, так что Java знает, что я хочу, чтобы установить поле бар со значением проведенного параметра бара (бар безthis). Вам нужно будет сделать что-то подобное только с 6 параметрами, а не с одним.

Тогда вы делаете все ваши расчеты в отдельном блоке кода называется блок инициализатор:

{ 
    /** 
    * Find lengths of all sides 
    */ 
    lengthA = Math.pow(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2) * .05, lengthA); 
    lengthB = Math.pow(Math.pow((x3 - x2), 2) + Math.pow((y3 - y2), 2) * .05, lengthB); 
    lengthC = Math.pow(Math.pow((x1 - x3), 2) + Math.pow((y1 - y3), 2) * .05, lengthC); 
} 

Этот код вызывается перед тем ваш конструктор, и поэтому, даже если вы установите поля Треугольники правильно , этот код не будет работать. Вы не хотите использовать блоки инициализации, и вы можете забыть, что я даже упомянул их, кроме как сказать вам, что вы не используете их.Вместо этого сделайте свои расчеты внутри вашего конструктора, и сделайте так после установка всех ваших полей.

Обратите внимание, что я намеренно не опубликовал решение вашей проблемы, потому что я твердо уверен, что большинство из нас нуждается в том, чтобы понять понятия, лежащие в основе любых проблем, которые у нас есть, а затем использовать это понимание для создания наших собственных решений кода ,

Самое главное, прочтите ваши тексты, не лучше, ваши тексты, потому что ошибки, которые вы делаете, связаны с основополагающими концепциями и показывают, что вы еще не понимаете эти понятия и прибегали к угадыванию. Это никогда не сработает, так как вам нужно понять все это и хорошо понять, если вы сможете продвигаться в этом курсе.

Удачи вам!


Edit 2
Для Тома запустить это:

public class TestInitializerBlock { 
    public TestInitializerBlock() { 
     System.out.println("Inside of constructor"); 
    } 

    { 
     System.out.println("Inside of initializer block"); 
    } 

    public static void main(String[] args) { 
     new TestInitializerBlock(); 
    } 
} 
+0

Я сделал мои изменения еще раз. Теперь мои вычисления выходят как 0.0 – Courtney

+0

@Courtney Вы должны использовать свои новые методы. Например, этот 'System.out.println (« Длина A: «+ t.lengthA») должен быть обновлен до 'System.out.println (« Длина A: »+ t.getLengthA())'. – Tom

+0

Я сделал это. Теперь все длины и углы составляют 1,0, периметр - 3,0, а площадь - 0,0. Я ввел несколько номеров за каждый прогон и все тот же расчет. – Courtney

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