2017-02-01 2 views
0

Почему этот код не генерирует исключение? Пытались много вещей, но когда я проверить его с классом JUnit, как это, например, он не будет сгенерировано исключение:Конструктор не бросает новое исключение?

Vehicle e = new Vehicle('C', 'G', "A1234"); 
// Constructor 
public Vehicle(char kType, char dType, String regNr) { 
    String temp0 = regNr.substring(0, 2); 
    String temp = regNr.substring(2); 
    boolean finish = false; 

    if ("" + kType == "C") { 
     for (char c : temp0.toCharArray()) { 
      if (Character.isDigit(c)) { 
       throw new IllegalArgumentException("3"); 
      } 
     } 

     if (temp.length() == 5) { 
      finish = true; 
     } else { 
      finish = false; 
      throw new IllegalArgumentException("4"); 
     } 

     try { 
      Integer.parseInt(temp); 
     } catch (NumberFormatException nfe) { 
      finish = false; 
      throw new IllegalArgumentException("5"); 
     } 
    } 
} 
+3

'if (" "+ kType ==" C ")' ??? Почему не просто 'if (kType == 'C')'? –

+0

@barakmanos Чтобы сделать весь код бессмысленным? – GhostCat

+1

Кроме того: вы хотите, чтобы мы провели ** наше ** время, чтобы помочь вам. Итак, ** вы ** потратите 1 минуту, чтобы правильно форматировать/отступать исходный код; вместо того, чтобы сбрасывать этот ** беспорядок ** на нас. – GhostCat

ответ

1

Это не будет.

if(""+kType=="C"){ 

этот код всегда даст вам ложь.

Вы (почти) never сравнить строки, используя ==; вы должны использовать метод equals(). И тогда, конечно, когда ваш блок if действительно введен, существуют различные условия, которые могут привести к выбросу этих IllegalArgumentExceptions.