Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助从普通对象数组中删除特定对象吗_Java_Arrays - Fatal编程技术网

Java 需要帮助从普通对象数组中删除特定对象吗

Java 需要帮助从普通对象数组中删除特定对象吗,java,arrays,Java,Arrays,我被一个家庭作业问题困住了。。。到目前为止,仅使用数组我在通过将数组中的对象设置为空对象来删除该对象时遇到问题..我有3种方法,一种方法用于添加对象,一种方法用于从数组返回特定对象,一种方法用于删除..到目前为止,添加和返回对象方法都可以工作..但删除方法不行..一些帮助人员 这是数组和方法的类…我正在一个主方法中测试这些方法 public class Book { public void addContact(Contact[] contactBook) {

我被一个家庭作业问题困住了。。。到目前为止,仅使用数组我在通过将数组中的对象设置为空对象来删除该对象时遇到问题..我有3种方法,一种方法用于添加对象,一种方法用于从数组返回特定对象,一种方法用于删除..到目前为止,添加和返回对象方法都可以工作..但删除方法不行..一些帮助人员

这是数组和方法的类…我正在一个主方法中测试这些方法

public class Book {

    public void addContact(Contact[] contactBook)
    {
        int slots = 0;
        for(Contact i : contactBook)
            if (i == null)
                slots++;

        if(slots == 0)
            System.out.println("Contact book full..can't add anymore!");

        else
        {
            String name = Keyboard.readString("Enter name: ");
            int id = Keyboard.readInt("Enter "+name+"'s id: ");
            String classroom = Keyboard.readString("Enter "+name+"'s class: ");
            int number = Keyboard.readInt("Enter "+name+"'s mobile: ");

            for (int i = 0; i < contactBook.length; i++)
            {
                if(contactBook[i] == null){
                    contactBook[i] = new Contact(name,id,number,classroom);
                    break;
                }
            }
        }//end else

    }//end method

    public Contact getContact(Contact[] contactList)
    {
        Contact contact = null;
        int id = Keyboard.readInt("Enter student id: ");

        try
        {
            for(Contact i : contactList)
            {
                if(i.id == id)
                {
                    contact =i;
                    break;
                }
            }
        }
        catch(NullPointerException e)
        {
            System.out.println("Student ID:"+id+" does not exist..");
        }

        return contact;
    }//end getContact

    public void deleteContact(Contact[] contactList)
    {
        Contact delete = getContact(contactList);

        for(Contact i : contactList)
        {
            if(i!=null)
                if(delete.id == i.id)
                {
                    i = null;
                    break;
                }
        }
    }//end delete

    public static void main(String args[])
    {
        Contact[] contacts = new Contact[200];
        Book newBook = new Book();

        newBook.addContact(contacts);

        for (Contact i : contacts)
            if(i != null)
                System.out.println(i);

        newBook.deleteContact(contacts);

        for (Contact i : contacts)
            if(i != null)
                System.out.println(i);
    }
}

我认为你不能用这种方式使用增强的for循环。您应该只使用普通for循环并执行
contactList[i]=null
,其中i是索引。这里有一些

在适当的情况下,每个 尽管增强的for循环可以使代码更加清晰,但它不能用于某些常见情况

  • 只有访问权限。元素不能是 分配给,如不增加 集合中的每个元素
  • 只有单一结构。不是 可能穿越两个 立即构造(如进行比较) 两个阵列
  • 只有一个元素。仅用于 单元素访问,例如,不访问 比较连续的元素
  • 只有前进。有可能 只向前迭代一次 步骤。至少有Java5。不要使用 如果您需要与 Java5之前的版本

迭代器将引用的副本返回给联系人对象。您正在将此副本设置为null,而不是存储在数组中的对象

使用类似以下内容:

for(int i=0; i<contactList.size; i++) {
    if(delete.id == contactList[i].id) {
        contactList[i] = null;
        break;
    }
}

for(int i=0;i改用ArrayList)。它将为您提供更多命令来操作对象数组。您可以轻松地从ArrayList中删除对象。我不允许使用ArrayList..:(这真的很糟糕。嗯!!那么你可以采用从文件中删除内容的方式。也就是说,创建另一个大小为1的数组。将所有内容(不包括你要删除的对象)复制到新数组中。嗯……这是个好主意……谢谢!所以我只能将增强for循环中的变量指定给另一个变量?@Shizmumaru18,请参阅我的编辑,它是现在有一些基本的指导方针
for(int i=0; i<contactList.size; i++) {
    if(delete.id == contactList[i].id) {
        contactList[i] = null;
        break;
    }
}