Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用数组列表元素进行计算。?_Java_Android_Arraylist_Integer - Fatal编程技术网

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

Java 如何使用数组列表元素进行计算。?,java,android,arraylist,integer,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 我想要两位数的结果。请帮忙。我认为如果你自己解决这项任务会更好,但这是你的选择。 评论中的所有解释 public static int countTriangle(List<Integer> list) {

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

将数字添加到此数字中,直到剩下1或2位数字

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

…1…0…3…4

…1…3…7

…4…10(发生这种情况时,分为1+0)

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


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

我认为如果你自己解决这项任务会更好,但这是你的选择。 评论中的所有解释

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);
}
public static int countTriangle(列表){
if(list.size()==0){
//如果列表为空,则返回0
返回0;
}else if(list.size()==1){
//如果列表仅包含单个元素,则返回此元素
返回列表。获取(0);
}else if(list.size()==2){
//若列表包含两个元素,则返回它们已连接
//例如,我们有5和1的列表
//我们将5乘以10(50),然后再加上1,
//因此,5和1的输出将为51
返回列表。获取(0)*10+列表。获取(1);
}
//为下一个三角形的直线创建新列表
List newList=newarraylist();
//迭代现有列表的每个元素
对于(int i=0;i=10){
//把它翻译成字符串
字符串s=String.valueOf(a);
//获取字符串的每个字符,将其转换为数字并添加到新列表中
//例如,如果a=157,则三个新元素将添加到新列表中(1、5、7)
对于(int j=0;j
公共无效测试(){
ArrayList测试=新的ArrayList();
测试。添加(1);
测试。添加(0);
测试。添加(0);
测试。添加(3);
测试。添加(1);
ArrayList ret=doTheMagic(测试);
for(整数i:ret)
系统输出打印LN(i);
System.out.println(transformInDigit(ret));
}
private int transformingit(最终ArrayList值){
int-ret=0;
int size=values.size();
对于(int i=0;ipublic static int-yourFunction(ArrayList列表){
String number=“;//用数字填充字符串
for(整数i:列表){
数字+=字符串的值(i);
}//使用java8 lambda函数可能会更好
字符串tmp_编号;//需要临时字符串
while(number.length()>2){
tmp_编号=”;
对于(int i=0;i
因为你总是有相同数量的数字,所以你可以不用循环就可以做到这一点。 在第一步中,计算第一个元素+第二个元素,并将结果保存在新数组的第一个索引中。然后计算第二个元素+第三个元素,并将结果保存在新数组的第二个索引中。依此类推。然后对新数组中的结果执行相同的操作,直到得到结果为止

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

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

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

就个人而言,我希望您先表现出一些努力;您能公布哪些不起作用的结果吗?我也不清楚实际的计算规则是什么。@DaveNewton它是就像一个帕斯卡三角形向下,除了你需要把两个数字切成两个一位数的数字,如果这个方案还剩下2个或1个数字,那么把这两个数字合并成一个数字——这是我的猜测。这基本上只是列表操作,如果允许你有第二个
临时
列表,其中y你计算新的结果,然后替换原来的结果,这实际上非常简单-你只需添加
i
i+1
,添加到另一个列表中,检查是否有大于10的数字,将它们分成两个数字(先除以10,然后将剩余部分作为新元素添加到该元素之后),然后检查列表中是否有2个或更少的元素,如果是,则只需将它们的数字设为5*10+1。这感觉像是一项作业,我相信你可以完成。
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);
}
public int crossSum(int n) {
    int sum = 0;
        while(n > 0) {
            int digit = n%10;
            sum += digit;
            n /= 10;
        }
    return sum;
 }`