2015-11-11 2 views
-1

Я хочу создать метод набора, чтобы вставить максимальную температуру для определенного места, и я хочу, чтобы температура была типа Double, метод проверяет, является ли введенный номер > = до 100 или < = до 100 , если да, то он будет вставлен в поле максимальной температуры. else Я должен бросить определенное пользователем исключение, которое скажет мне, что введенное мной число не соответствует допустимым пределам!Как использовать определенные пользователем исключения в java внутри другого метода

Я написал Exception и метод таким образом:

public class OutOfSensibleLimits extends Exception 
{ 
private Double max; 
public OutOfSensibleLimits(Double max) 
    { 
this.max = max; 
    } 
public Double getMax() 
{ 
return max; 
} 
public String toString() 
    { 
return "The maximum Tempreture you entered: '" + maxTemp + 
"' is out of sensible limits."; 
    } 
} 



public void setMaxTemp(Double max){ 

    if (max >= -100 || max <= 100) 
    { 
     maxTemp = max; 
    } 
    else throw new OutOfSensibleLimits(); 
     } 

, и это дает мне сообщение об ошибке, что я делаю неправильно?

+0

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

+0

.......... привет? –

ответ

2

Проблема:

  1. Это не так, как исключения работы - вам нужно вызвать соответствующий супер конструктор с соответствующей строкой, если вы хотите, чтобы показать строку, и
  2. Вы не вызывая собственный конструктор исключения. Вы написали его, чтобы принять Double, и вы не проходите в Double (вы ничего не передаете).
  3. Метод toString не нужен и запутан, поскольку он никогда не будет вызван, и строка никогда не будет видна.
  4. Укажите, пожалуйста, "and it gives me an error,...", но не сообщайте нам об ошибке. Я предполагаю, что компилятор жалуется, что вы не вызываете конструктор своего класса правильно, но, пожалуйста, не оставляйте нас догадывающимися - показать полное сообщение об ошибке.
  5. Ваш setMaxTemp использует неправильный логический оператор: if (max >= -100 || max <= 100). Это всегда true. Вместо этого вы хотите использовать &&.

Предложения:

  • Да, проходят в два раза конструктор
  • И затем использовать это дважды, чтобы создать соответствующее сообщение об ошибке, в/исключение, которое передается в конструктор супер в.
  • Избавьтесь от полей класса исключения и метода toString().
  • Самое главное, я настоятельно рекомендую вам сначала прочитать Exception tutorial перед тем, как попробовать что-нибудь еще.
  • Также упрощайте, поскольку вы делаете вещи слишком сложными. Класс Exception может быть просто конструктором, и все.
  • Убедитесь, что метод, который может генерировать исключение, объявляет, что он выбрасывает это исключение.

Например:

public class TestSensibleLimits { 
    private Double maxTemp; 

    public void setMaxTemp(double max) throws OutOfSensibleLimits { 
     if (max >= -100 && max <= 100) { // use && not || 
      maxTemp = max; 
     } else 
      throw new OutOfSensibleLimits(max); 
    } 

    public Double getMaxTemp() { 
     return maxTemp; 
    } 

    public static void main(String[] args) { 
     TestSensibleLimits test = new TestSensibleLimits(); 
     try { 
      test.setMaxTemp(200); 
     } catch (OutOfSensibleLimits e) { 
      e.printStackTrace(); 
     } 
    } 

} 

@SuppressWarnings("serial") 
public class OutOfSensibleLimits extends Exception { 
    private static final String FORMAT = "The maximum Temperature you " 
      + "entered: %.2f is out of sensible limits."; 

    public OutOfSensibleLimits(Double max) { 
     super(String.format(FORMAT, max)); 
    } 
} 
+0

Что означает стенд String.format? –

+0

@ MaramAl-Zu'bi: [String # format (...) entry entry] (http://docs.oracle.ком/JavaSE/8/документы/API/Java/языки/String.html # Формат-java.util.Locale-java.lang.String-java.lang.Object ...-). –

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