将一个新项目推送到数组的末尾

时间:2016-10-14 16:02:14

标签: java arrays eclipse

所以我想把一个新项目推到数组的末尾(数字1-9)。一位朋友告诉我,我写的代码是正确的,但是当我在eclipse上运行时,没有任何反应。我需要做什么?我应该只在主块下面打印数组吗?谢谢。

public static void main(String[] args) {
    long[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
}

public static long[] push(long[] array, long item) {

    // Add one item to an array
    long cellsToAdd = 1;
    long[] array2 = new long[array.length + 1];

    // copy each item in array2 -> array3
    for (int i = 0; i < array.length; i++) {
        array[i] = array2[i];
    }

    array2[array2.length - 1] = item;

    System.out.println("Array: ");
    // Print the array to the console
    for (long p : array2) {
        System.out.println(p);
    }

    return array2;
}

3 个答案:

答案 0 :(得分:3)

您可以使用System.arraycopy创建新阵列并增加其大小。

由于您使用的是基元long类型,因此您需要为每个基元(intfloatdouble等)复制粘贴此逻辑,如果你想支持这些类型。

public static void main(String[] args) {
    long[] digs = { 0, 1, 2, 3, 5 }                       
    long[] digs2 = push(digs, 6);
    long[] digs3 = pushAll(digs2, new long[] { 7, 8, 9 });

    System.out.println(Arrays.toString(digs));   // [0, 1, 2, 3, 5]
    System.out.println(Arrays.toString(digs2));  // [0, 1, 2, 3, 5, 6]
    System.out.println(Arrays.toString(digs3));  // [0, 1, 2, 3, 5, 6, 7, 8, 9]

    // Generic Example
    Long[] genArr = push(new Long[] { 0L, 1L }, new Long(3L), Long.class);

    // or Long[] genArr = push(new Long[] { 0L, 1L }, new Long(3L));

    System.out.println(Arrays.toString(genArr)); // [0, 1, 3] 
}

public static long[] push(long[] a, long b) {
    long[] result = new long[a.length + 1]; 
    System.arraycopy(a, 0, result, 0, a.length); 
    result[a.length] = b;
    return result;
} 

全部推送

public static long[] pushAll(long[] a, long[] b) {
    long[] result = new long[a.length + b.length]; 
    System.arraycopy(a, 0, result, 0, a.length); 
    System.arraycopy(b, 0, result, a.length, b.length); 
    return result;
}

Generic Push

public static <E> E[] push(E[] a, E b, Class<E> classType) {
    @SuppressWarnings("unchecked")
    E[] result = (E[]) Array.newInstance(classType, a.length + 1);
    System.arraycopy(a, 0, result, 0, a.length); 
    result[a.length] = b;
    return result;
}

可选

// Convenience, so that you don't have to pass in the class.
public static Long[] push(Long[] a, Long b) {
    return push(a, b, Long.class);
}

答案 1 :(得分:1)

除了实际上像其他人提到的那样调用函数之外,你的for循环copys从array2到array,而它应该是相反的方式

答案 2 :(得分:0)

调用方法

您定义了一个方法,但没有调用它。

public static void main(String[] args) {
    long[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    array = MyClassName.push( array , 10L );
}

如果你只是练习学习,那就足够了。但是要知道,Java Collections框架中已经为您提供了这种功能。