Java StringToNUMBER - вернуть 0, если строка содержит что-либо кроме цифр и начальное «-» для отрицательных чисел - PullRequest
1 голос
/ 24 февраля 2020

Мне нужно реализовать следующую функцию в Java: publi c int stringToNumber (String input) без использования Integer или любого другого класса или метода, который анализирует строку. Мне нужно l oop над символами строки.

Я попытался создать класс, который использует al oop для преобразования строки в целое число.

Теперь я пытаюсь вычислить как я могу вернуть 0, если строка содержит что-либо кроме цифр и начальное «-» для отрицательных чисел.

Также я пытаюсь вернуть 0, если число слишком велико или слишком мало для целого числа (Integer.MIN_SIZE в Integer.MAX_SIZE или от -2 ^ 31 до 2 ^ 31 - 1).

Ниже приведен код, который я до сих пор .... Любая помощь будет принята с благодарностью

public class StringToNumber {


public static void main(String[] args) {
StringToNumber stn = new StringToNumber();
for (String arg : args) {
  int number = stn.stringToNumber(arg);
  System.out.format("Input number: %s, parsed number: %d %n", arg, number);
} 
}

public int stringToNumber(String stn) {
  int number = 0, factor = 1;
  for (int n = stn.length()-1; n >= 0; n--) {
      number += (stn.charAt(n) - '0') * factor;
      factor *= 10;
     }

  return number;
}
}

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Проверьте, работает ли приведенный ниже код

public int stringToNumber(String stn) {
              int number = 0, factor = 1;
              int negative = 0;
              if(stn.charAt(0)=='-') {
                  negative =1;
              }
              for (int n = negative; n < stn.length(); n++) {
                  int digit = stn.charAt(n)-'0';
                  if(digit<0 || digit>9)
                      return 0;
                  if((negative==0) && (Integer.MAX_VALUE-digit)/10 <number) 
                      return 0;
                  else if ((negative==1) && (Integer.MAX_VALUE-digit+1)/10 <number) 
                      return 0;
                  number = number*10+ (stn.charAt(n)-'0');
                 }

              if(negative == 1) {
                  return -1*number;
              }
              return number;
            }
0 голосов
/ 24 февраля 2020

Возможно, лучший способ справиться с этим - использовать Integer#parseInt(), который принимает строковый ввод и либо возвращает целочисленный результат, либо выдает исключение, если ввод не может быть приведен к целому числу:

public int stringToNumber(String stn) {
    int result;
    try {
        result = Integer.parseInt(stn);
    }
    catch (NumberFormatException e) {
        System.out.println("String input cannot be converted to integer: " + stn);
        result = 0;   // return 0 as the failure value
    }

    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...