しかし私は、私も仕事それを得るように見えることはできません、オブジェクトの配列からオブジェクトを削除しようとしています。私は、Javaに新たなんだとあなたは、単にアレイの.remove()の操作を行うことができないことに気づきました。私はあなたがArrayListのを使用することができます知っているが、Javaでは配列から要素を削除する方法はありますか?私は私がやったことは、アレイ内のオブジェクト参照の値はnullアサインし、配列が固定長であるので、あなたが技術的には、それを行うことはできません知っています。私は私の配列を印刷するときに、この作品は、しかし、私はこのエラーを取得します。
エラー
java.lang.NullPointerException
オブジェクトのデフ
public class Dog {
//Iniatilising instance variables
private String name;
private String breed;
private Gender gender;
private int age;
...
テストクラスの定数
public class TestDog {
//Create a constant value for MAX
static final int MAX = 10;
//Define a constant PROMPT
static final String PROMPT = "---->";
//Define a constant SPACES
static final String SPACES = " ";
//String array of menu options
static final String options[] = {"Add new Dog","Display details for a Dog",
"Update details for a Dog","List all Dogs","Delete all Dogs","Delete one Dog","Quit"};
//Define a constant QUIT
static final int QUIT = options.length;
//Create an array capable of managing up to MAX Dog instances
static Dog pets[] = new Dog[MAX];
static Dog empty[] = new Dog[MAX];
//Define a value 'count' to indicate number of objects in array
static int count = 0;
//A menu title
static String title = "Dog Manager";
//Define a menu using title & options
static Menu myMenu = new Menu(title,options);
//Define a Scanner
static Scanner input = new Scanner(System.in);
テストクラスの削除方法
public static void deleteOneDog() {
System.out.println("\nOK - Delete one dog");
boolean noDogs = false;
if (count == 0) {
System.out.println(PROMPT+"Sorry, there are no dogs.");
noDogs = true;
}
else {
System.out.println("We have the following Dogs:");
for(int index=0; index<count;index++) {
System.out.println(SPACES+(index+1)+". " + pets[index].getName());
if (!noDogs) {
System.out.println(PROMPT + "Enter selected dog name: ");
String name = input.nextLine();
for (int i = 0;i<count;i++) {
//Find dog and delete it
if (pets[i].getName().contentEquals(name)) {
pets[i] = null;
}
}
}
}
}
}
Javaで配列から要素を削除する直接的な方法はありません。JavaオブジェクトのArrayが、それはへの任意のメソッドを提供していないadd()
、remove()
または配列の要素を検索します。これは、コレクションクラスが好きな理由ですArrayList
とHashSetのは非常に人気があります。
にもかかわらず
おかげでのApache CommonsのUtilsのは、あなたが使用することができ
ArrayUtils
、より簡単にそれを自分で行うことにより、より配列から要素を削除するには、クラスを。覚えておくべきことの一つは、配列を使用して、配列を作成したら、あなたはそのサイズ、削除または配列のサイズを小さくしない項目を削除する手段を変更することはできません、Javaでサイズを固定していることです。これは、実際には、Javaで配列とArrayListの間の主な違いです。
何をする必要がある新しい配列を作成し、使用して新しい配列にこの配列の残りのコンテンツをコピーしているSystem.arrayCopy()
か、他の手段。実際には、あなたが使用する他のすべてのAPIや機能は、これを行うが、その後、あなたは車輪の再発明する必要はありません。
import java.util.Arrays;
import org.apache.commons.lang.ArrayUtils;
....
//let's create an array for demonstration purpose
int[] test = new int[] { 101, 102, 103, 104, 105};
System.out.println("Original Array : size : "
+ test.length );
System.out.println("Contents : " + Arrays.toString(test));
// let's remove or delete an element from an Array
// using Apache Commons ArrayUtils
test = ArrayUtils.remove(test, 2); //removing element at index 2
// Size of an array must be 1 less than the original array
// after deleting an element
System.out.println("Size of the array after
removing an element : " + test.length);
System.out.println("Content of Array after
removing an object : " + Arrays.toString(test));