gpt4 book ai didi

java - 如何在不创建新数组或不使用 ArrayLists 的情况下从数组中删除元素? java

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:39 25 4
gpt4 key购买 nike

我正在尝试从对象数组中删除一个对象,但我似乎无法让它发挥作用。我是 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 中,当数组被初始化时,它会保留初始化所需的内存,它需要保存与声明的数组数据类型相对应的数据。

所以删除一个数组元素是你不能做的

您可以做的简单事情是通过覆盖需要从数组中删除的数组元素来将其他数组元素向左移动。这意味着声明一个新变量来保存数组当前保存的元素数。

然后删除数组元素变得如此简单。

  • 从要删除的元素开始向左移动元素。

  • 将变量减 1

    当你想获取当前数组元素时,你可以简单地通过引用变量 no of elements 遍历数组。

关于java - 如何在不创建新数组或不使用 ArrayLists 的情况下从数组中删除元素? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58352267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com