2012-03-13 2 views
1

ОК, поэтому мое задание Я должен написать класс, в котором хранится температура, которую пользователь дает, и проверяет ее с заданными параметрами, чтобы убедиться, что Ethy/Oxygen/Water либо замерзают, либо кипятят и затем отобразите его в конце, какие из них будут замерзать/кипения при температуре, которую они ввели. У меня есть большинство классов и тестера, но я получаю несколько ошибок в моем коде. Я не прошу никому дать мне ответ, но если бы вы могли сказать мне, что я делаю неправильно, я бы очень признателен. Вот мой код класса:Проблемы с методами класса java

public class FreezingBoilingPoints { 

    private int temperature; 

    public FreezingBoilingPoints(int temp) { 
     temperature = temp; 
    } 

    public void setTemperature(int temp) { 
     temperature = temp; 
    } 

    public int getTemperature() { 
     return temperature; 
    } 

    private Boolean isEthylFreezing(int temperature) { 
     if (temperature <= -173) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isEthylBoiling(int temperature) { 
     if (temperature >= 172) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isOxygenFreezing(int temperature) { 
     if (temperature <= -362) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isOxygenBoiling(int temperature) { 
     if (temperature >= -306) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isWaterFreezing(int temperature) { 
     if (temperature <= 32) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isWaterBoiling(int temperature) { 
     if (temperature >= 212) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public String showTempinfo() { 
     if (isEthylFreezing()) { 
      System.out.println("Ethyl will freeze"); 
     } 

     if (isEthylBoiling()) { 
      System.out.println("Etheyl will boil"); 
     } 

     if (isOxygenFreezing()) { 
      System.out.println("Oxygen will freeze"); 
     } 

     if (isOxygenBoiling()) { 
      System.out.println("Oxygen will Boil"); 
     } 

     if (isWaterFreezing()) { 
      System.out.println("Water will freeze"); 
     } 

     if (isWaterBoiling()) { 
      System.out.println("Water will boil"); 
     } 
    } 
} 

и код для моего тестера ниже:

import java.util.Scanner; 

public class FreezingBoilingTester { 
    public static void main(String[] args) { 
     int temperature; 

     FreezingBoilingPoints temp1 = new FreezingBoilingPoints(0); 

     Scanner scan = new Scanner(System.in); 
     System.out.println("Please enter a temperature: "); 
     temperature = scan.nextInt(); 

     System.out.println(showTempinfo()); 
    } 
} 

ответ

1

1) не пропускайте временные методы внутри, потому что у вас уже есть это значение в переменной-члене.

2) вы можете изменить if (condition), затем true else false в return (condition), и это будет тот же результат, что и для удобочитаемости.

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

public final class FreezingBoilingPoints { 

    private int temperature; 

    public FreezingBoilingPoints(int temp) { 
     temperature = temp; 
    } 

    public void setTemperature(int temp) { 
     temperature = temp; 
    } 

    public int getTemperature() { 
     return temperature; 
    } 

    private boolean isEthylFreezing() { 
     return (temperature <= -173); 
    } 

    private boolean isEthylBoiling() { 
     return (temperature >= 172); 
    } 

    private boolean isOxygenFreezing() { 
     return (temperature <= -362); 
    } 

    private boolean isOxygenBoiling() { 
     return (temperature >= -306); 
    } 

    private boolean isWaterFreezing() { 
     return (temperature <= 32) ; 
    } 

    private boolean isWaterBoiling() { 
     return (temperature >= 212); 
    } 

    public String showTempinfo() { 
     StringBuilder result = new StringBuilder(); 

     if (isEthylFreezing()) { 
      result.append("Ethyl will freeze"); 
      result.append("\n"); 
     } 

     if (isEthylBoiling()) { 
      result.append("Etheyl will boil"); 
      result.append("\n"); 
     } 

     if (isOxygenFreezing()) { 
      result.append("Oxygen will freeze"); 
      result.append("\n"); 
     } 

     if (isOxygenBoiling()) { 
      result.append("Oxygen will Boil"); 
      result.append("\n"); 
     } 

     if (isWaterFreezing()) { 
      result.append("Water will freeze"); 
      result.append("\n"); 
     } 

     if (isWaterBoiling()) { 
      result.append("Water will boil"); 
      result.append("\n"); 
     } 

     return result.toString(); 
    } 
} 

Главная:

import java.util.Scanner; 

public class FreezingBoilingTester 
{ 
    public static void main(String[] args) 
    { 

    Scanner scan = new Scanner(System.in); 
    System.out.println("Please enter a temperature: "); 
    int temperature = scan.nextInt(); 

    FreezingBoilingPoints temp1 = new FreezingBoilingPoints(temperature); 
    System.out.println(temp1.showTempinfo()); 
    } 
} 

обновленный: вы можете использовать конкатенации строк:

String result = ""; 

if (condition) { 
    result += "new result"; 
    result += "\n"; 
} 

, но это не рекомендуется в срок исполнения, так как каждая + = операция будет создайте еще один объект String в памяти, содержащий новый результат.

+0

ok yours действительно помог мне больше всего, но я не могу использовать метод StringBuilder в своей программе, потому что мы еще не узнали об этом. Как мне получить его, чтобы вернуть его без использования построителя строк? – Andrew

+0

проверить обновленный ответ, во всяком случае не делайте этого в реальном мире :) –

0

Проблема заключается в том, что ваши частные методы принимают в temperature и все же, вы не пропуская один in для вашего метода showTempinfo(). Попробуйте удалить входные параметры и использовать temp, установленные в классе. Кроме того, вам необходимо как-то установить temp, прежде чем позвонить showTempinfo().

Надеюсь, это поможет.

0

В вашем showTempinfo() вы пытаетесь сделать isEthylFreezing().

Но он не может работать ... isEthylFreezing ждет для междунар ... но это ничего не получает ...

+0

для публичного String showTempinfo() его говорит, что «незаконное начало выражения» и что для него требуется полутол. Это единственные ошибки, которые я получаю сейчас. – Andrew

0

Вы не передавая входные данные, которые пользователь дает вам в конструкторе ваш класс FreezingBoilingPoints. Вы инициализируете этот класс с помощью 0 и затем запрашиваете температуру у пользователя. Между температурой, которую предоставил пользователь, и классом, который вы используете для тестирования, нет никакой связи.

0

Вам необходимо создать объект FreezingBoilingPoints в основном методе, а затем вызвать showTempinfo() на нем. Кроме того, ваши методы private calc должны использовать переменную-член; нет необходимости принимать его в качестве параметра.

0

Вам необходимо передать пользовательский ввод, temperature, в ваш конструктор FreezingBoilingPoints. Кроме того, метод showTempInfo() специфичен для экземпляра. Например, вам нужно создать экземпляр объекта, temp1, путем передачи пользовательского ввода с помощью конструктора, а затем вызвать temp1.showTempInfo()

0

Здесь мы идем:

1) Все ваши «это ...» методы ожидают для параметр int, однако, когда вы их вызываете, вы ничего не пропускаете. Удалите параметр int либо из реализации метода, либо из вызовов метода

2) Вам не хватает закрывающей скобки для метода isWaterBoiling;

3) Вы указали метод showTempinfo как возвращающий String, но вы ничего не возвращаете для этого метода. Либо добавьте команду return, либо удалите «String» из подписи метода.

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