2014-05-05 4 views
-2

Я довольно новичок в Java, новичок в попытке понять OOP, поэтому не смейтесь о моем непонимании, пожалуйста.Преобразователь температуры Java OOP

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

Может ли кто-нибудь дать мне какие-нибудь советы, если я даже пойду в правильном направлении?

Это то, что у меня есть до сих пор, и имейте в виду, что это в первую очередь моя первая попытка на OOP, так что это, вероятно, похоже на беспорядок.

import java.io.*; 

class tempConvert 
{ 

//declaring variables 
int c;  //variable for "Celcius" 
int f;  //variable for "Fahrenheit" 




//method to convert celcius to fahrenheit 
public void celToFahr 
{ 
    InputStreamReader inStream = new InputStreamReader (System.in); 
    BufferedReader temp = new BufferedReader (inStream); 
    String cel; 
    System.out.println ("Please input temperature in celcius:"); 
    cel = temp.readLine (); 
    c = Integer.parseInt (cel); 

    f = (9.0/5.0) * c + 32; 

    System.out.println ("The temperature in Fahrenheit is " + f + " degrees."); 
} 




//method to convert fahrenheit to celcius 
public void fahrToCel 
{ 
    BufferedReader temp = new BufferedReader (inStream); 
    String fahr; 
    System.out.println ("Please input temperature in fahrenheit:"); 
    fahr = temp.readLine (); 
    f = Integer.parseInt (fahr); 

    c = (5.0/9.0) * (f - 32); 

    System.out.println ("The temperature in Celcius is " + c + " degrees."); 
} 



    } 
+3

Я не думаю, что это хороший способ, чтобы определить, от температуры, что шкалы он находится в. Например, если я ввожу 0, что это такое? Что насчет 32? Вам понадобится какой-то способ определить, какой тип это –

+2

. Стоит отметить, что в этом коде нет концепций ООП. – Cruncher

+1

IMO. Я бы попросил руководство на более «регулярном» форуме программирования Java с секцией «new to java» чем на этом ориентированном на Q & A сайте. – Gimby

ответ

0

Вот концепция ООП вы можете использовать: типов значений. Типы значений - это объекты, которые содержат значение как примитивные обертки Integer, Double и т. Д. И другие классы, такие как BigDecimal.

Теперь, вот три идеи для вашего типа значений: 1) Один класс, который имеет два поля для представления значения и масштаба; 2) Разный класс для каждой шкалы температур; 3) Один класс, который внутренне всегда представляет температуру с использованием той же шкалы и внешне преобразует ее в другие шкалы. Выбирая один из этих проектов, поразмыслите над сложностью методов преобразования, которые вам придется писать, и сложностью клиентского кода, который будет использовать небольшой API, который вы создаете, особенно если вы когда-либо хотели добавить поддержку для большего количества температурных шкал.

0

ВЫХОД output

температуры по умолчанию: 0.0C ИЛИ 32.0F

1.Convert Цельси до Fareiheit

2.Convert Fareiheit в градусах Цельсия

3.Update температура по умолчанию

Введите температуру в градусах Цельсия, чтобы преобразовать в Фаренгейт

60.0C = 92.0F

температуры по умолчанию: 0.0C ИЛИ 32.0F

1.Convert Цельсите в Fareiheit

2.Convert Fareiheit to Celcius

3.Температура обновления по умолчанию

Введите температуру в Фаренгейта для преобразования в градусах Цельсия

-10

-10.0F = -23.333333333333336C

температуры по умолчанию: 0.0C ИЛИ 32.0F

1.Convert Celcius to Fareiheit

2.Convert Fareiheit в градусах Цельсия

температуры 3.Update по умолчанию

Введите температуру в градусах Цельсия

температуры по умолчанию: 25.0C ИЛИ 57.0F

1.Convert Celcius to Fareiheit

2.Convert Fareiheit в градусах Цельсия

температуры 3.Update по умолчанию


Temperature.java

public interface Temperature { 
    public double getTempInFarenheit(double celcius); 
    public double getTempInCelcius(double farenheit); 
    public double getCurrentTemp(); 
    public double setDefaultTemp(double defaultCelcius); 
    } 

TemperatureImpl.java

public class TemperatureImpl implements Temperature { 

    private double defaultTemp=0.0; 

    public double Temperature(double defaultTemp){ 
     return this.defaultTemp=defaultTemp; 
    } 

    @Override 
    public double getTempInFarenheit(double celcius) { 
     return ((double)(9/5)*(celcius+32.0)); 
    } 

    @Override 
    public double getTempInCelcius(double farenheit) { 
     return ((double)5/9*(farenheit-32.0)); 
    } 

    @Override 
    public double getCurrentTemp() { 
     return defaultTemp; 
    } 

    @Override 
    public double setDefaultTemp(double defaultCelcius){ 
     return this.defaultTemp = defaultCelcius; 
    } 
} 

Main.java

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

     TemperatureImpl temp = new TemperatureImpl(); 

     while(true){ 
      System.out.println("Default temperatures: "+temp.getCurrentTemp()+"C OR "+temp.getTempInFarenheit(temp.getCurrentTemp())+"F"); 
      System.out.println("1.Convert Celcius to Fareiheit"); 
      System.out.println("2.Convert Fareiheit to Celcius"); 
      System.out.println("3.Update default temperature"); 
      Scanner sc = new Scanner(System.in); 
      int input = sc.nextInt(); 
      switch (input) { 
      case 1: System.out.println("Enter temperature in Celcius to convert into Farenheit"); 
       double celcius = sc.nextDouble(); 
       System.out.println(celcius+"C = "+temp.getTempInFarenheit(celcius)+"F"); 
       break; 
      case 2: System.out.println("Enter temperature in Farenheit to convert into Celcius"); 
      double fareinheit = sc.nextDouble(); 
      System.out.println(fareinheit+"F = "+temp.getTempInCelcius(fareinheit)+"C"); 
      break; 
      case 3: System.out.println("Enter temperature in celcius"); 
      temp.setDefaultTemp(sc.nextDouble()); 
       break; 
      default: 
       System.out.println("Invalid input.");; 
      } 

     } 
    } 
} 
+0

Не отправляйте один и тот же ответ несколько раз. Вы уже разместили это здесь http://stackoverflow.com/a/36969922/1743880. – Tunaki

0

Я написал все это снова и снова, так как сказано в комментариях вы не писали в ООП:

Это основная часть ООП, класс что создает объекты температуры.

упаковка com.example.tomer2;

public class temp { 
    double c; // for celcius 
    double f; // for farenheit 
    boolean isfarenheit; 

    public temp(double temp , boolean isfarenheit) { 
     if(isfarenheit){ 
      this.f = temp; 
      this.c = this.farenToCelc(temp); 
     } 
     else{ 
      this.c = temp; 
      this.f = this.celciusToFar(temp); 
     } 
    } 

    private double celciusToFar(double celcius){ 
     return ((double)(9/5)*(celcius+32.0)); 
    } 

    public double farenToCelc(double farenheit) { 
     return ((double)5/9*(farenheit-32.0)); 
    } 


} 

Вот класс с основной функцией:

package com.example.tomer2; 

public class temp { 
    double c; // for celcius 
    double f; // for farenheit 
    boolean isfarenheit; 

    public temp(double temp , boolean isfarenheit) { 
     if(isfarenheit){ 
      this.f = temp; 
      this.c = this.farenToCelc(temp); 
     } 
     else{ 
      this.c = temp; 
      this.f = this.celciusToFar(temp); 
     } 
    } 

    private double celciusToFar(double celcius){ 
     return ((double)(9/5)*(celcius+32.0)); 
    } 

    public double farenToCelc(double farenheit) { 
     return ((double)5/9*(farenheit-32.0)); 
    } 


} 

Я не делал полные тесты для этого.

0

Использование полей инкапсуляции,

Public class Temp{ 
    private double cel; 
    private double far; 

    public double getCel(){ 
    return ((far-32)*5/9); 
    } 
    public void setCel(double cel){ 
    this.cel=cel; 
    } 
    public void getfar(){ 
    return ((cel*9/5)+32); 
    } 
    public void setfar(dofaruble far){ 
    this.cel=cel; 
    } 

}

Основной метод:

class A{ 
public static void main(String []args){ 
    Temp obj=new obj(); 
    obj.setcel(12.4); 
    obj.setfar(34.5); 
    System.out.println("Celcious"+obj.getcel()); 
    System.out.println("fahrenheit"+obj.getfar()); 
} 

}

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