java 将元素从一个数组转移到另一个数组

svmlkihl  于 2023-03-28  发布在  Java
关注(0)|答案(3)|浏览(202)

我尝试创建一个数组,数组中的值大于用户输入的某个阈值,因此我将传输一个总秒数数组,并保留大于阈值的值。我可以适当地传输所需的值,但似乎无法在不打印不包含值的结束元素的情况下打印结果。
下面是我写的代码:

public static int[] overGivenMinutes(int minThres, int arrayValues[]) {
    int[] greaterThanThres = new int[arrayValues.length];
    int j = 0;
    for (int i = 0; i < arrayValues.length; i++) {
        int minutes = arrayValues[i] / 60;
        if (minutes > minThres) {
            greaterThanThres[j++] = arrayValues[i];
        }
    }
    return greaterThanThres;
}

当用户输入30分钟标记时,它将打印:

Time[00] = 56:38
Time[01] = 34:27
Time[02] = 51:04
Time[03] = 40:07
Time[04] = 43:34
Time[05] = 00:00
Time[06] = 00:00
Time[07] = 00:00
Time[08] = 00:00
Time[09] = 00:00

我试图找出我需要做什么来删除元素5-9,因为他们是空的,我不知道如何。任何帮助是非常感谢。

mwg9r5ms

mwg9r5ms1#

你在开始定义数组长度,所以你只剩下空值,你能做的就是使用java.util.List的一个实现,比如ArrayList

ArrayList<Integer> greaterThanThres = new ArrayList<Integer>();

当你想添加一个元素时,只需将它推到列表中。

greaterThanThres.add(arrayValues[i]);

这是一个替代方案。或者你可以简单地在最后再次循环你的数组,并根据你的条件清理它。

8ehkhllq

8ehkhllq2#

Bill Mair's answer有一个正确的想法-你需要返回一个没有“悬空”元素的较小的数组。然而,通过流式传输和过滤数组,然后将其收集到一个数组中,比创建一个新数组然后返回它的部分副本更容易实现这一点:

public static int[] overGivenMinutes(int minThres, int[] arrayValues){
    return Arrays.stream(arrayValues).filter(i -> i / 60 > minThres).toArray();
}
uujelgoq

uujelgoq3#

public static int[] overGivenMinutes(int minThres, int arrayValues[]){
    int tmp[] = new int[arrayValues.length];
    int j = 0;
    for (int i = 0; i < arrayValues.length; i++){
        int minutes = arrayValues[i] / 60;
        if (minutes > minThres){
            tmp[j++] = arrayValues[i];
        }
    }
    int greaterThanThres[] = new int[j];
    System.arrayCopy(tmp,0,greaterThanThres,0,j);
    return greaterThanThres;
}

相关问题