如何使用数组列表元素进行计算。

时间:2014-10-08 11:58:10

标签: java android arraylist integer

我有一个整数数组列表。它将始终包含5个整数。现在假设它包含数字10031.现在我想在元素中进行这个计算。

在此号码中添加数字,直到您留下1位或2位数字。

  

1 ..... 0 ..... 0 ..... 3 ..... 1

     

... 1 ..... 0 ...... 3 .... 4

     

....... 1 ..... 3 ..... 7

     

........... 4 .... 10(当发生这种情况时,分成1 + 0)

     

.............. 5..1 = 51.结果是51。

我想要一个两位数的结果。请帮忙。

4 个答案:

答案 0 :(得分:2)

我认为如果你自己解决了这个问题,那对你来说可能会更好,但这是你的选择。 评论中的所有解释。

public static int countTriangle(List<Integer> list) {
    if (list.size() == 0) {
        //  if list is empty return 0
        return 0;
    } else if (list.size() == 1) {
        //  if list contains only single element return this element
        return list.get(0);
    } else if (list.size() == 2) {
        //  if list contains two elements, return them connected
        //  for example we have list of 5 and 1
        //  we multiple 5 with 10 (50) and then add 1 to it,
        //  so the output of 5 and 1 will be 51
        return list.get(0) * 10 + list.get(1);
    }
    //  create new list for the next triangle's line
    List<Integer> newList = new ArrayList<Integer>();
    //  iterate over every element of existing list
    for (int i = 0; i < list.size() - 1; i++) {
        //  a = current element + next element (last iteration will be with last but one element)
        int a = list.get(i) + list.get(i+1);
        //  if a has two digits or more
        if (a >= 10) {
            //  translate it to String
            String s = String.valueOf(a);
            //  take every char of a String, translate it to number and add to new list
            //  for example if a = 157 then three new elements will be added to new list (1, 5, 7)
            for (int j = 0; j < s.length(); j++) {
                newList.add(Integer.valueOf(String.valueOf(s.charAt(j))));
            }
        //  if a has single digit
        } else {
            //  add this to new list
            newList.add(a);
        }
    }
    //  call this function with new list (next line)
    return countTriangle(newList);
}

答案 1 :(得分:2)

public static int yourFunction(ArrayList<Integer> list){
    String numbers = ""; // fill a string with your numbers

    for(Integer i : list){
        numbers += String.valueOf(i);
    } // could be nicer with java8 lambda function


    String tmp_numbers; // temporary string needed
    while(numbers.length() > 2){
        tmp_numbers = "";
        for(int i = 0; i < numbers.length()-1; ++i){
            // add two following numbers
            // substring to read digit by digit
            int v = Integer.parseInt(numbers.substring(i,i+1)); // first digit
                v += Integer.parseInt(numbers.substring(i+1,i+2)); // + second
            tmp_numbers = tmp_numbers + String.valueOf(v); // and fill the tmp string with it
        }
        numbers = tmp_numbers; // set the tmp string to our new beginning
    }
    return Integer.parseInt(numbers);
}

答案 2 :(得分:1)

public void test() {
    ArrayList<Integer> test = new ArrayList<Integer>();
    test.add(1);
    test.add(0);
    test.add(0);
    test.add(3);
    test.add(1);
    ArrayList<Integer> ret = doTheMagic(test);
    for (Integer i : ret)
        System.out.println(i);
    System.out.println(transformInDigit(ret));
}

private int transformInDigit(final ArrayList<Integer> values) {
    int ret = 0;
    int size = values.size();
    for (int i = 0; i < values.size(); i++)         
        ret+=values.get(i)*Math.pow(10, size-i-1);
    return ret;
}

private ArrayList<Integer> doTheMagic(final ArrayList<Integer> values) {
    int size = values.size();
    if (size<=2)
        return values;
    ArrayList<Integer> ret = new ArrayList<Integer>();
    for (int i = 0; i < size - 1; i++) {
        Integer newVal = values.get(i)+values.get(i+1);
        if (newVal < 10)
            ret.add(newVal);
        else {
            ret.add(newVal / 10);
            ret.add(newVal % 10);
        }
    }
    return doTheMagic(ret);
}

答案 3 :(得分:0)

因为你总是拥有相同数量的数字,所以你可以在没有循环的情况下做到这一点。 在第一步,您计算第一个元素+第二个元素,并将结果保存在新数组的第一个索引中。然后是第二个+第三个,结果是新数组的第二个索引。等等。然后你对新数组中的结果做同样的事情,直到得到结果。

此外,您必须在每次计算后计算交叉和。为此,您可以执行以下操作:

public int crossSum(int n) {
    int sum = 0;
        while(n > 0) {
            int digit = n%10;
            sum += digit;
            n /= 10;
        }
    return sum;
 }`

在最后一步中,您不计算交叉总和。当只有一个数字时,显示结果,前面有一个零。所以你得到两位数的结果。