java - 将 ArrayList 折叠为单个整数

标签 java arrays arraylist linked-list modulo

我正在开发一个 Java 代码,以通过示例将元素折叠到数组中

A[0] = 2A[1] = 7A[2] = 9A[ 3] = 7

然后按照这个格式折叠

A[0] = (A[0] + A[3]) mod 10 = 9

A[1] = (A[1] + A[2]) mod 10 = 6

再对折一次,直到变成单一的

A[0] = (A[0] + A[1]) mod 10 = 5

以下是不完整的代码:

import java.util.ArrayList;
import java.util.List;
import java.lang.Math;

public class ArrayFolder {

    public static void main(String[] args) {

        //ArrayList
        int[] A = {
            2,
            7,
            9,
            7
        };

        //To define a new Array later
        List<Integer> intList = new ArrayList<Integer>();

        //To print the ArrayList A
        for (int x = 0; x < A.length; x++) {
            System.out.println("A[" + x + "]= " + A[x]);
        }

        //Function to fold the ArrayList into half
        int res = 0;
        int result = 0;

        //if A.length is Even
        if (A.length % 2 == 0) {
            for (int i = 0; i < A.length / 2; i++) {
                res = A[i] + A[A.length - 1 - i];
                result = res % 10;
                intList.add(result);
            }
        }

        //if A.length is Odd
        else {
            for (int i = 0; i < A.length / 2; i++) {
                res = A[i] + A[A.length - 1 - i];
                result = res % 10;
                intList.add(result);
            }
            result = A[A.length / 2];
            intList.add(result);
        }

        //add the int to New ArrayList
        Integer[] intArray = new Integer[intList.size()];
        intArray = intList.toArray(intArray);
        System.out.println("\nNew Array ");

        for (Integer s: intArray) {
            System.out.println(s);
        }

    }
}

编译结果

A[0]= 2
A[1]= 7
A[2]= 9
A[3]= 7

New Array
9
6

我找不到有效的方法来继续循环该函数,因此当实现单个 Integer 时代码将停止折叠。

我的问题是,是否有任何有效的方法来循环该过程,以便以后它可以使用更大的数组元素?

请提供逻辑或代码,以便我可以继续我的代码。

非常感谢

最佳答案

您可以将折叠算法放入一个单独的方法中,该方法返回折叠数组并调用此方法,直到获得单个整数,例如如下所示:

import java.util.ArrayList;
import java.util.List;

public class ArrayFolder {

    public static void main(String[] args) {

        //ArrayList
        Integer[] A = {
            2,
            7,
            9,
            7
        };

        while (A.length > 1) {
            A = fold(A);
        }

        System.out.println("A[0]= " + A[0]);

    }

    private static Integer[] fold(Integer[] A) {
        List<Integer> intList = new ArrayList<>();
        //To print the ArrayList A
        for (int x = 0; x < A.length; x++) {
            System.out.println("A[" + x + "]= " + A[x]);
        }

        //Loop to fold the ArrayList into half
        for (int i = 0; i < A.length / 2; i++) {
            int res = A[i] + A[A.length - 1 - i];
            int result = res % 10;
            intList.add(result);
        }
        
        //if A.length is odd
        if (A.length % 2 != 0) {
            intList.add(A[A.length / 2]);
        }
        System.out.println("\n");
        
        return intList.toArray(new Integer[intList.size()]);
    }
}

您还可以使用递归方法,即折叠方法将调用自身进行进一步折叠,直到达到一个整数。

import java.util.ArrayList;
import java.util.List;

public class ArrayFolder {

    public static void main(String[] args) {

        //ArrayList
        final Integer[] A = {
            2,
            7,
            9,
            7
        };

        fold(A);
    }

    private static void fold(Integer[] A) {
        if (A.length > 0) {
            List<Integer> intList = new ArrayList<>();
            //To print the ArrayList A
            for (int x = 0; x < A.length; x++) {
                System.out.println("A[" + x + "]= " + A[x]);
            }

            //Loop to fold the ArrayList into half
            for (int i = 0; i < A.length / 2; i++) {
                int res = A[i] + A[A.length - 1 - i];
                int result = res % 10;
                intList.add(result);
            }

            //if A.length is odd
            if (A.length > 1 && A.length % 2 != 0) {
                intList.add(A[A.length / 2]);
            }
            System.out.println("\n");
        
            fold(intList.toArray(new Integer[intList.size()]));
        }
    }
}

关于java - 将 ArrayList 折叠为单个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66892270/

相关文章:

java - 创建对象的列表/数组列表并对列表进行排序 (Java)

java - 将文本文件中的唯一单词添加到 ArrayList 的程序

java - SQL 仅插入特定列

java - 如何从gson获取嵌套数据?

java - 什么是NullPointerException,我该如何解决?

java - Spring 是否允许替换引用 bean 中的属性?

C++变量数组保留问题

arrays - 在Elasticsearch中轻松检索数组的最后一个元素的信息

python - 相当于 numpy.unique 的 2D

java - 在观察者模式上使用 ArrayList