2013-11-30 3 views
1

Я хотел бы выполнить проверку, которая будет принимать из текстового поля число (String), а затем передать его двойной переменной, если ее Int или double, иначе будет создано новое исключение.Подтвердить только на Java Только int и double numbers

Я уже реализовал код, который работает только для номеров Int. не могли бы вы дать мне подсказку, пожалуйста?

protected double validateDiameter() { 
    try { 
     if (stringDiameter != null) { 
    //Checking stringDiameter if its a number by creating a for loop 
      //that check each character of the string. 
      //If the string contains only numbers 
      //the program will continue, if not an exception is thrown. 

      int lengthofdiameter = stringDiameter.length(); 

      int DiameterCount = 0; 

      for (int i = 0; i <= lengthofdiameter - 1; i++) { 
       char t = stringDiameter.charAt(i); 
       if (Character.isDigit(t)) { 
        DiameterCount++; 
       } 
      } 

      if (lengthofdiameter == DiameterCount) { 
       Diameter = Double.parseDouble(stringDiameter); 
       if (Diameter <= 0 && Diameter >= 9) { 
        throw new Exception(""); 
       } 

      } else { 
       throw new Exception(""); 
      } 
     } 
    } catch (Exception e) { 
     Diameter = 0.0; 

     JOptionPane.showMessageDialog(null, 
       "Wrong value on the input area.Please use number." + "\n" + "Check diameter input.", 
       "Error message!", 
       JOptionPane.ERROR_MESSAGE); 
    } 

    return Diameter; 
} 

Спасибо

Обновлено:

Спасибо всем за вашу помощь. Я очень ценю это. Решение, которое работало для меня:

protected double validateDiameter() { 
    try { 
     if (stringDiameter != null) { 
      if (stringDiameter.matches("-?\\d+(\\.\\d+)?")) { 
       Diameter = Double.parseDouble(stringDiameter); 
      } else { 
       throw new Exception(""); 
      } 
      if (Diameter <= 0 || Diameter > 8) { 
       throw new Exception(""); 
      } 
     } else { 
      throw new Exception(""); 
     } 
    } catch (Exception e) { 
     Diameter = 0.0; 

     JOptionPane.showMessageDialog(null, 
       "Wrong value on the input area.Please use number." + "\n" + 
         "Check diameter input.", 
       "Error message!", 
       JOptionPane.ERROR_MESSAGE); 
    } 
    return Diameter; 
} 

ответ

2

My s is stringDiameter; В основном сначала вы пытаетесь проанализировать ввод как Integer; если это не работает, вы можете попробовать дважды, если это по-прежнему не работает, значит, не является ни один из них

String s = "10.2"; 
    try { 
     int i = Integer.parseInt(s); 
     //int routine 
     System.out.println(i); 
    } catch (NumberFormatException e) { 
     if (s.matches("-?\\d+(\\.\\d+)?")) { 
      double d = Double.parseDouble(s); 
      //double routine 
      System.out.println(d); 
     } else { 
      // "Wrong value on the input area.Please use number." + "\n" + "Check      //diameter input.", "Error message!", 
      System.out.println("Wrong"); 
      throw new IllegalArgumentException(); 
     } 
    } 
+0

Оба ваших ответа выглядят прекрасно, и я могу сказать, что они менее сложные, чем мои. Единственная проблема: Новое исчисление выдается, если вход «Джош», «10.Josh» и т. Д., Но входы, такие как «2.F» или «1.30F», приемлемы, и мне это не нужно. Как я могу делать исключения на этих входах? Спасибо за ваше время. Я очень ценю вашу помощь! – user3047017

+0

@ user3047017 посмотреть мой ответ http://stackoverflow.com/a/20306147/1282908 – nexus

+0

Эй, спасибо за ваш ответ, но обработка исключений необходима. – user3047017

1
boolean isDouble(String str) { 
    try { 
     Double.parseDouble(str); 
     return true; 
    } catch (NumberFormatException e) { 
     return false; 
    } 
} 

boolean isInteger(String s) { 
    try { 
     Integer.parseInt(s); 
     return true; 
    } catch(NumberFormatException e) { 
     return false; 
} 

}

Я должен признать, что я немного запутался, что вы на самом деле хотите. Вышеприведенный код проверяет, является ли данная строка двойной или нет, это то, что вы ищете?

+0

Я хотел бы проверьте, является ли входное значение целым или двойным, если true, возвращает это значение. В противном случае создается новое исключение. Ex: 1, 1.10, 1.30, 3 приемлемы, но «текст», «Джош», «123.John» не являются допустимыми значениями. Спасибо за ваш ответ. – user3047017

+0

. Вышеприведенный код аналогичен целым числам, вы просто используете Integer.parseInt() вместо Double. Если оба метода вернут false, вы можете создать исключение - отредактировал мой пост выше. Добро пожаловать. :) – Ben

+0

Я уверен, что он разобран как «Двойник», если он обрабатывается как «Целое», поэтому проверка обоих кажется излишним. – Keppil

1

Оба ответа от Бен и использования user1121883 обработки исключений. Если есть решение необходимо без использования исключений (при проверке), то я рекомендую вам взглянуть на эти ответы (и следующие ответы) здесь:

https://stackoverflow.com/a/5439547/1282908

https://stackoverflow.com/a/1102916/1282908

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