task30.task3002 не проходит тестирование РЕШЕНА

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

Осваиваем методы класса Integer
Используя метод Integer.parseInt(String, int) реализуй логику метода convertToDecimalSystem, который должен переводить переданную строку в десятичное число и возвращать его в виде строки.

Требования:
1. Метод convertToDecimalSystem (String), возвращающий String, должен существовать.
2. Метод convertToDecimalSystem (String), возвращающий String, должен иметь модификаторы доступа: public, static.
3. Метод convertToDecimalSystem (String), возвращающий String, должен переводить переданную строку в десятичное число и возвращать его в виде строки.
4. Метод convertToDecimalSystem (String) должен вызывать метод Integer.parseInt(String, int).
5. Метод main (String[]), возвращающий void, должен иметь модификаторы доступа: public, static.

Четвёртый пункт ни в какую не проходит, хотя метод вызывается.

package com.javarush.task.task30.task3002;

/* 
Осваиваем методы класса Integer
*/
public class Solution {

    public static void main(String[] args) {
        System.out.println(convertToDecimalSystem("0x16")); //22
        System.out.println(convertToDecimalSystem("012"));  //10
        System.out.println(convertToDecimalSystem("0b10")); //2
        System.out.println(convertToDecimalSystem("62"));   //62
    }

    public static String convertToDecimalSystem(String s) {
        //напишите тут ваш код
        String result ="";
        String tmp;
      if (s.startsWith("0x")){
          tmp = s.substring(2,s.length());
          result = String.valueOf(Integer.parseInt(tmp,16));
      }
      else if (s.startsWith("0b")){
          tmp = s.substring(2,s.length());
          result = String.valueOf(Integer.parseInt(tmp,2));
      }
      else if (s.startsWith("0")){
          tmp = s.substring(1,s.length());
          result = String.valueOf(Integer.parseInt(tmp,8));
      }
      else
          result = s;
        return result;
    }
}

5 комментариев

Alvisid
  • Alvisid
  • 0
  • Комментарий отредактирован 2017-05-16 08:37:54 пользователем Alvisid
По той же причине не проходит и следующее решение
public class Solution {
    public static void main(String[] args) {
        System.out.println(convertToDecimalSystem("0x16")); //22
        System.out.println(convertToDecimalSystem("012"));  //10
        System.out.println(convertToDecimalSystem("0b10")); //2
        System.out.println(convertToDecimalSystem("62"));   //62
    }

    public static String convertToDecimalSystem(String s) {
        //напишите тут ваш код
        int rad = 10;

        if (s.startsWith("0x")){
            s = s.substring(2);
            rad = 16;
        } else if (s.startsWith("0b")){
            s = s.substring(2);
            rad = 2;
        } else if (s.startsWith("0")){
            s = s.substring(1);
            rad = 8;
        }

        int num = Integer.parseInt(s, rad);
        s = Integer.toString(num);

        return s;
    }
}
Alvisid
Готов разбить голову об монитор. Задача РЕШЕНА. При парсинге в восьмеричной системе исчисления не отрезайте старший разряд в котором «0». Хотя при парсинге что 012, что 12 дают одинаковый результат, валидатору 12 не нравится. Может кто объяснит в чём проблема. Надеюсь кому — нибудь поможет.
lichMax
предполагаю, что парсинг просто не учитывает нули, которые идут перед числом. Иногда же числа пишут с нулями перед ними (типа 01, 02, 03), и это (в данном случае) не относится к восьмеричной системе.
Alvisid
  • Alvisid
  • 0
  • Комментарий отредактирован 2017-05-17 16:21:55 пользователем Alvisid
проблема не в том как он парсит, результат правильный. А в том что валидатору кажется, что метод convertToDecimalSystem (String) в принципе не вызывает Integer.parseInt(String, int)
lichMax
даа, валидатор такой валидатор.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.