数字提取器

时间:2014-12-10 17:20:07

标签: java arrays arraylist

问题:该方法有一个参数为整数。将整数以相反的顺序分解为单个数字的序列。结果将是一个包含相反顺序的单个数字的数组。

测试仪: digitExtractor(16384)→{4,8,3,6,1}

digitExtractor(123)→{3,2,1}

digitExtractor(23)→{3,2}

digitExtractor(-123)→{-1,2,3}(我对此有问题)

public int[] digitExtractor(int number)
{
   int[] arr;
   ArrayList<Integer> digits = new ArrayList<Integer>();
   if(number == 0)
   {
      digits.add(number);
   }
   if(number < 0)
   {
      number *= -1;
   }
   while (number != 0)
   {
      digits.add(number % 10);
      number /= 10;
   }
   arr = new int[digits.size()];
   for(int i = 0; i < digits.size(); i++)
   {
      arr[i] = digits.get(i);
   }
   return arr;
}

我的代码有效,但负数除外。我不知道如何解决它。有什么提示吗?

2 个答案:

答案 0 :(得分:0)

阅读我的评论,试试这个:

public int[] digitExtractor(int number)
{
   int[] arr;
   boolean flag=false;
   ArrayList<Integer> digits = new ArrayList<Integer>();
   if(number == 0)
   {
      digits.add(number);
   }
   if(number < 0)
   {
      number *= -1;
      flag=true;
   }
   while (number != 0)
   {
      digits.add(number % 10);
      number /= 10;
   }
   arr = new int[digits.size()];
   for(int i = 0; i < digits.size(); i++)
   {
      arr[i] = digits.get(i);
   }
   if(flag){
       arr[digits.size()-1]*=-1;
   }
   return arr;
}

答案 1 :(得分:0)

另一种方法:

public static int[] digitExtractor(int number) {
    boolean negative = number < 0;
    String myNumber = String.valueOf(number);
    myNumber = new StringBuilder(myNumber).reverse().toString();
    int size = negative ? myNumber.length() - 1 : myNumber.length();
    int[] arr = new int[size];

    for (int i = 0; i < size; i++) {
        arr[i] = Character.getNumericValue(myNumber.charAt(i));
    }

    if (negative) {
        arr[size - 1] = 0 - arr[size - 1];
    }
    return arr;
}