2010-08-22 2 views
3

Итак, я изучаю Java, и я надеялся немного помочь в том, как совершенствовать/улучшать небольшое приложение, которое я сделал, чтобы вычислить площадь треугольника.Изучение/пересмотр Java

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 

     System.out.println("What's the base?"); 
      int base = in.nextInt(); 
      System.out.println(); 

     System.out.println("What's the height?"); 
      int height = in.nextInt(); 
      System.out.println(); 

      int area = base * height/2; 

     System.out.println("The area of the triangle is: " +area+ "."); 

    } 

} 

Учтите, я БРЕНД НОВЫЙ для программирования на Java или любого языка в этом отношении. Если вы не возражаете, можете ли вы подробно объяснить, как я могу улучшить это/сделать его более легким процессом?

Большое спасибо!

+1

Шаг 1: прочитайте [условные обозначения кода] (http://www.oracle.com/technetwork/java/codeconvtoc-136057.html). Ваш отступ выключен, а оператор '+' не полностью окружен пробелами. – BalusC

+0

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

+0

Шаг 2: подумайте о типах, в 'int area = base * height/2;' what if 'base = 5' и' height = 7' –

ответ

1

area не должно быть типа int. Сделайте это double.
Edit:

double area = base * height/2.0; 

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

Если результат слишком много знаков после запятой, форматировать его:

System.out.println("The area of the triangle is: " +new DecimalFormat("0.000").format(area)); 
+0

Не имеет значения, если вы не изменяете/не переводите один из операндов в double. –

+0

Спасибо за ответы! Я прошел через них и редактировал свой код в меру своих возможностей. Я изменил на float и добавил десятичное форматирование. Как бы мне это сделать, если они ... ну 7, например, это не будет выглядеть как «7.000» при использовании + нового формата DecimalFormat («0.000»). (Area)? Как бы мне это сделать, чтобы после каждого расчета перезапустить программу? – Matthew

+0

Используйте формат, например '0. ###', если вы не хотите отображать 0 цифр. –

2

Существует не много есть, чтобы упростить и совершенно. Единственное, что я хотел бы изменить, - это линия, которая вычисляет область. Возможно, используйте float, чтобы избежать округления до int.

float area = (float)(base * height)/2; 

Для этого вопроса, вы могли бы изменить входные данные для поплавков, а также:

float base = in.nextFloat(); 
... 
float height = in.nextFloat(); 

А затем изменить расчетную линию:

float area = base * height/2; 

так как теперь у вас нет для ввода входов.

float даст вам single-precision с плавающей запятой. Если вы хотите безумную точность, используйте double.

+1

'double' не является« сумасшедшей »точностью; это должна быть ваша нормальная точность по умолчанию. Вы должны предпочесть 'double' для' float' в большинстве сценариев. – polygenelubricants

+0

Возможно, вы, как правило, правы, но по какой-то причине есть два плавающих типа. У каждого из них есть компромисс в точности, размере памяти и скорости. Эти вещи необходимо учитывать при каждом использовании. Вы всегда должны знать, какую степень точности требуется вашему приложению, но если речь идет о хранении и производительности, измерьте его. –

+0

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

2

Разбить его на объекты.
В этом примере показано правильное использование синтаксиса, но пока вы еще не продемонстрировали знание объектов.
Рассмотрите возможность записи класса Треугольника и выполните вычисление области как функцию-член.
Дальше вы можете изучить polymorphism.
Рефакторинг класса Треугольник, извлекая вычисление области в общий интерфейс под названием Shape.
Все классы, которые реализуют Shape, должны предоставить метод, предписанный интерфейсом для вычисления области.
Напишите новый класс Square, который реализует интерфейс Shape.

1

Вы можете сделать это более OO, имея класс Shape и Triangle подкласс. В расчетной области можно использовать Strategy pattern. Надеюсь это поможет.