如何在创建新方法时初始化arrayList

时间:2018-06-15 04:42:09

标签: java arrays arraylist

我正在创建一个程序来查找任何两个数组元素的总和,它等于我需要的给定值。检查适当的补丁时 离。,

import java.util.ArrayList;
import java.util.Arrays;

public class PairedSums {

    public static ArrayList<Integer> pairedOfValues(int[] a,int givenValue){
        Arrays.sort(a);

        ArrayList<Integer> arrayList;
        int n = a.length - 1;
        if (a[0] == givenValue){
            arrayList = new ArrayList<>();
            arrayList.add(a[0]);
            return arrayList;
        }
        else if (a[n] == givenValue){
            arrayList = new ArrayList<>();
            arrayList.add(a[0]);
            return arrayList;
        }
        else {
            int low = 0;
            int high = n;
            while (a[low] < a[high]){
                if (a[low] == givenValue){
                    arrayList = new ArrayList<>();
                    arrayList.add(a[low]);
                    return arrayList;
                }
                else if (a[high] == givenValue){
                    arrayList = new ArrayList<>();
                    arrayList.add(a[high]);
                    return arrayList;
                }
                else if ((low == high )){
                    arrayList = new ArrayList<>();
                    arrayList.add(a[high]);
                    return arrayList;
                }
                if (a[low] == 0){
                    low++;
                }
                else if (a[high] == 0){
                    high--;
                }
                else {
                    int sum = a[low] + a[high];
                    if (sum == givenValue){
                        arrayList = new ArrayList<>();
                        arrayList.add(a[low]);
                        arrayList.add(a[high]);
                        return arrayList;
                    }
                    else {
                        if (sum < givenValue){
                            low++;
                        }
                        else {
                            high--;
                        }
                    }
                }
            }
        }
        return null;
    }

    public static void main(String[] args){
        int[] a = {10, 0, -1, 20, 25, 30};
        int givenValue = 45;
    ArrayList<Integer> arr = pairedOfValues(a,givenValue);
        System.out.println(arr);
    }
}

每次我这样做并手动添加它时,我都会一直初始化数组。我试着创建一个方法

 public static ArrayList<Integer> sum(ArrayList<Integer> arr,int[] a,int i){
        arr = new ArrayList<>();
        arr.add(a[i]);
        return arr;
    }

但是当我在if else语句中声明它时,它表示没有初始化ArrayList变量,这是正确的。有没有办法可以在方法中初始化它,这样我就不必一遍又一遍地初始化它。

1 个答案:

答案 0 :(得分:0)

你的代码是正确的(算法并不完美,但没关系)。我刚刚把你的代码放到我的IDE中并获得了大约10个警告并修复了所有这些代码。如果您必须使用预定义的项目数量创建List,请使用Collections.singletonList()和/或Arrays.asList()。下面是你的代码,格式很少,我觉得它看起来好多了,没有你的问题:

public static List<Integer> pairedOfValues(int[] a, int givenValue) {
    Arrays.sort(a);

    int n = a.length - 1;

    if (a[0] == givenValue || a[n] == givenValue)
        return Collections.singletonList(a[0]);

    int low = 0;
    int high = n;

    while (a[low] < a[high]) {
        if (a[low] == givenValue)
            return Collections.singletonList(a[low]);

        if (a[high] == givenValue || low == high)
            return Collections.singletonList(a[high]);

        if (a[low] == 0)
            low++;
        else if (a[high] == 0)
            high--;
        else {
            int sum = a[low] + a[high];

            if (sum == givenValue)
                return Arrays.asList(a[low], a[high]);

            if (sum < givenValue)
                low++;
            else
                high--;
        }
    }

    return Collections.emptyList();
}

P.S。我认为这个算法不包括情况,当给定arr有多对时。看看我的,它具有相同功能的代码较少(这仅供您进一步调查)。

public static List<Integer> pairedOfValues(int[] arr, int givenValue) {
    if (arr == null || arr.length < 2)
        return Collections.emptyList();

    Arrays.sort(arr);

    List<Integer> res = new ArrayList<>();

    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = i + 1; j < arr.length && arr[i] + arr[j] <= givenValue; j++)
            if (arr[i] + arr[j] == givenValue) {
                res.add(arr[i]);
                res.add(arr[j]);
            }
    }

    return res;

}