Java双重比较,而数据结构的一部分

发布于 2025-01-18 13:02:40 字数 3368 浏览 3 评论 0原文

我正在弄乱数据结构,在从头开始在Java中创建动态数组时,我发现我的 delete 方法(在DynamiCarray类中)并不适用于双打。 我已经阅读了一些文档,并且意识到在比较时,Java中的双打对待有所不同。 因此,我找到了仅比较双打的方法,但是当比较是随机数据(对象类型)的一部分时,您该怎么办?

这是我的代码:

----主要

public class Main {

    public static void main(String[] args) {
        
        //ArrayList<String> dynamicArray = new ArrayList<>();
        
        DynamicArray dynamicArray = new DynamicArray();
            
        System.out.println(dynamicArray.isEmpty());
        
        dynamicArray.add(7);
        dynamicArray.add(15);
        dynamicArray.add(13);
        dynamicArray.add("A");
        dynamicArray.add('C');
        dynamicArray.add(3.14159);
        
        System.out.println("size: "+ dynamicArray.size());
        System.out.println("capacity: "+ dynamicArray.capacity());
        
        System.out.println(dynamicArray.toString());
        
        dynamicArray.insert(2, "Hello");
        System.out.println(dynamicArray.toString());
        
    
        
        dynamicArray.delete(3.14159);
        System.out.println("After removing 3.14159: "+ dynamicArray.toString( ));
        dynamicArray.delete(7);
        System.out.println(dynamicArray.toString());
        
    }
}

------ dynamicarray ---

public class DynamicArray {

    final double EPSILON = 0.000001d;
    private int size;
    private int capacity = 7;
    Object[] array; // created an array of Objects named array
    
    
    public DynamicArray() {
        this.array = new Object[capacity];
    }
    
    public DynamicArray(int capacity) {
        this.capacity = capacity;
        this.array = new Object[capacity];
    }
    
    public void add(Object data) {
        if (size >= capacity) {
            grow();
        }
        array[size] = data;
        size++;
    }
    
    public void insert(int index, Object data) {
        if (size >= capacity) {
            grow();
        }
        for (int i = size; i > index; i--) {
            array[i] = array[i-1];
        }
        
        array[index] = data;
        size++;
    }
    
    public void delete(Object data) {

        for(int i = 0; i < size; i++) {
            if(array[i] == data) {
                for(int j = 0; j < (size - i - 1); j++){
                    array[i + j] = array[i + j + 1];
                }
                array[size - 1] = null;
                size--;
                if(size <=(int) (capacity/3)) {
                    shrink();
                }
                break;
            }
        }
        
    }
    
    public int search(Object data) {
        return -1;
    }
    
    public void grow() {
        
    }
    
    public void shrink() {
        
    }
    
    public boolean isEmpty() {
        return size == 0;
    }
    
    public Object peek() {
        
        return array[size-1];
    }
    
    public String toString() {
        String string = "[";
        for (int i = 0; i < capacity; i++) {
            string += array[i] + ", ";
        }
        
        
        if (string != "[") {
            string = string.substring(0,string.length()-2);
        }
        
        return string+"]";
    }
    
    public int size() {
        return size;
    }
    
    public int capacity() {
        return capacity;
    }
}

我缺少什么?

I was messing around with data structures and while creating a Dynamic Array in Java from scratch, I figured out that my delete method (in the DynamicArray class) was not working for doubles.
I've read some documentation and I realized that doubles in Java are treated differently when it comes to comparison.
So I found ways to compare just doubles, but what do you do when the comparison is part of random data (Object type)?

Here is my code:

---Main---

public class Main {

    public static void main(String[] args) {
        
        //ArrayList<String> dynamicArray = new ArrayList<>();
        
        DynamicArray dynamicArray = new DynamicArray();
            
        System.out.println(dynamicArray.isEmpty());
        
        dynamicArray.add(7);
        dynamicArray.add(15);
        dynamicArray.add(13);
        dynamicArray.add("A");
        dynamicArray.add('C');
        dynamicArray.add(3.14159);
        
        System.out.println("size: "+ dynamicArray.size());
        System.out.println("capacity: "+ dynamicArray.capacity());
        
        System.out.println(dynamicArray.toString());
        
        dynamicArray.insert(2, "Hello");
        System.out.println(dynamicArray.toString());
        
    
        
        dynamicArray.delete(3.14159);
        System.out.println("After removing 3.14159: "+ dynamicArray.toString( ));
        dynamicArray.delete(7);
        System.out.println(dynamicArray.toString());
        
    }
}

---DynamicArray---

public class DynamicArray {

    final double EPSILON = 0.000001d;
    private int size;
    private int capacity = 7;
    Object[] array; // created an array of Objects named array
    
    
    public DynamicArray() {
        this.array = new Object[capacity];
    }
    
    public DynamicArray(int capacity) {
        this.capacity = capacity;
        this.array = new Object[capacity];
    }
    
    public void add(Object data) {
        if (size >= capacity) {
            grow();
        }
        array[size] = data;
        size++;
    }
    
    public void insert(int index, Object data) {
        if (size >= capacity) {
            grow();
        }
        for (int i = size; i > index; i--) {
            array[i] = array[i-1];
        }
        
        array[index] = data;
        size++;
    }
    
    public void delete(Object data) {

        for(int i = 0; i < size; i++) {
            if(array[i] == data) {
                for(int j = 0; j < (size - i - 1); j++){
                    array[i + j] = array[i + j + 1];
                }
                array[size - 1] = null;
                size--;
                if(size <=(int) (capacity/3)) {
                    shrink();
                }
                break;
            }
        }
        
    }
    
    public int search(Object data) {
        return -1;
    }
    
    public void grow() {
        
    }
    
    public void shrink() {
        
    }
    
    public boolean isEmpty() {
        return size == 0;
    }
    
    public Object peek() {
        
        return array[size-1];
    }
    
    public String toString() {
        String string = "[";
        for (int i = 0; i < capacity; i++) {
            string += array[i] + ", ";
        }
        
        
        if (string != "[") {
            string = string.substring(0,string.length()-2);
        }
        
        return string+"]";
    }
    
    public int size() {
        return size;
    }
    
    public int capacity() {
        return capacity;
    }
}

Am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷你仙 2025-01-25 13:02:40

Java中的对象必须使用equals()进行比较,而不是==

public void delete(Object data) {

    for(int i = 0; i < size; i++) {
        if(array[i] == data) {
            for(int j = 0; j < (size - i - 1); j++){

if(array[i] == data) 将比较对象引用,而不是对象的值。

Objects in Java must be compared with equals(), not ==.

public void delete(Object data) {

    for(int i = 0; i < size; i++) {
        if(array[i] == data) {
            for(int j = 0; j < (size - i - 1); j++){

The if(array[i] == data) will compare object references, not the objects' values.

神妖 2025-01-25 13:02:40

您可以使用对象的等价方法,这样您就不需要使用比较,但是应该检查零值。

public void delete(Object data) {

    for(int i = 0; i < size; i++) {
        if(array[i]!=null &&  array[i].equals(data)) {
            for(int j = 0; j < (size - i - 1); j++){
                array[i + j] = array[i + j + 1];
            }
            array[size - 1] = null;
            size--;
            if(size <=(int) (capacity/3)) {
                shrink();
            }
            break;
        }
    }
}

you can use equals method of object, this way you don't need to use comparisons but you should check for null values.

public void delete(Object data) {

    for(int i = 0; i < size; i++) {
        if(array[i]!=null &&  array[i].equals(data)) {
            for(int j = 0; j < (size - i - 1); j++){
                array[i + j] = array[i + j + 1];
            }
            array[size - 1] = null;
            size--;
            if(size <=(int) (capacity/3)) {
                shrink();
            }
            break;
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文