2016-10-14 14 views
1

だから、新しい項目を配列の最後(数字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; 
} 
+11

あなたがから 'push'を呼び出す必要があり機能 –

+0

を呼び出していないする必要がありながら、主な方法。 – Linuslabo

+1

Java配列は固定長であることにも注意してください。あなたは何かを最後まで押すことはできません。ここに表示されるコードは、必要な内容の新しい長い配列を作成します。本質的に間違っていることは何もありませんが、それとあなたが尋ねたものとの違いを理解することが重要です。 –

答えて

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; 
} 

ジェネリックプッシュ

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); 
} 
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フレームワークで提供されています。別に

1

実際に言及した他の人のような関数を呼び出すことから、配列への配列2からあなたのforループcopysは、それが他の方法で回避

関連する問題