Member 14000163 Ответов: 1

Java: убедитесь, что вход сканера является целым числом или целочисленной дробью


Я работаю над калькулятором дробей для курса, который я беру на Java. В соответствии с ограничениями проекта мне нужно проверить, что пользовательский сканер вводит либо положительное, либо отрицательное целое число (a)[без десятичных точек], либо положительную или отрицательную целочисленную дробь (a/b)[опять же, без десятичных точек, b должен быть положительным и максимум одним "/"]. Если пользователь вводит что-то другое, кроме приемлемого ввода, мне нужно продолжать запрашивать их на консоли с "недопустимым вводом. Пожалуйста, введите (a) или (a/b), где a и b-целые числа, А b-не ноль: ".

Что я уже пробовал:

Гугл, тестирую по, генераторы регулярное выражение, строка.играм("регулярное выражение"), рисунок.компиляцию.

1 Ответов

Рейтинг:
8

CPallini

Просто ищите '/- символ, а затем проверить целые числа соответствующим образом. Попробуй:

class Valid
{
  public static boolean valid(String input)
  {
    int index = input.indexOf('/'); // search the '/' separator
    if ( index == -1 )
    {
      // there is NO separator, a signed integer is allowed
      try
      {
        Integer.parseInt(input);
      }
      catch( NumberFormatException e )
      {
        return false;
      }
    }
    else
    {
      // there is the separator, just a positive integer divisor is allowed
      int d;
      try
      {
        Integer.parseInt( input.substring(0, index) );
        d = Integer.parseInt( input.substring(index+1));

        if ( d <= 0) return false;
      }
      catch( NumberFormatException e )
      {
        return false;
      }
    }
    return true;
  }

  public static void main( String args[])
  {
    // a little test...
    String arr[] = { "10", "-10", "4/7", "-2/3", "5/-3", "7.5", "12/2/3", "12/0"};
    for (String s : arr)
    {
      System.out.printf("valid(%s) =  %b\n", s, valid(s));
    }
  }
}


Member 14000163

Спасибо! Это, кажется, работает совершенно правильно.

CPallini

Добро пожаловать.

Member 14000163

Теперь у меня все работает, кроме преобразования строкового ввода в объект "дробь". В настоящее время я работаю над тем, чтобы выяснить, как это сделать. Еще раз спасибо за помощь.

CPallini

Добро пожаловать снова.
Вот вам предложение:
https://stackoverflow.com/questions/474535/best-way-to-represent-a-fraction-in-java

Member 14000163

Спасибо. Я все проверю. Я смог сделать это с помощью String.split("/") и оператора if, else/if. Я проверю эту ссылку, если у нее есть лучший, более чистый или более короткий путь.