Устраненная проблема после чтения ввода с клавиатуры - PullRequest
0 голосов
/ 06 марта 2020

edit: ArrayList не нужен для воспроизведения «ошибки». Извините за эту задержку, но знайте, что это должно быть намного яснее.

Почему:

c2.number.equals (c3.number) = false

Я действительно ожидал правда здесь. Должно быть, что-то не так с моим методом equals?

С какой стати мне нужно писать больше текста ...

package com.example.mypackage;

        import java.util.ArrayList;
        import java.util.Scanner;


class Contact {
    public String name;
    public String number;

    public Contact(String name, String number) {
        this.name = name;
        this.number = number;
    }

    public void print(){
        System.out.println(name+number);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        } else if (obj == null) {
            return false;
        } else if (obj instanceof Contact) {
            Contact contact = (Contact) obj;
            if ((contact.name == this.name && contact.number == this.number)) {
                return true;
            }
        }
        return false;
    }


}


public class Main {
    private static Scanner scanner = new Scanner(System.in);



    public static void main(String[] args) {

        Contact c1 = new Contact("ben", "1");
        c1.print();

        Contact c2 = new Contact("ben", "1");
        c2.print();

        System.out.println("name : ");
        String name=scanner.nextLine();
        System.out.println("number");
        String number=scanner.nextLine();
        Contact c3=new Contact(name, number);
        c3.print();

        System.out.println("c1.equals(c2) = "+c1.equals(c2));
        System.out.println("c3 instanceof Contact = "+(c3 instanceof Contact));
        System.out.println("c2.name.equals(c3.name) =  "+c2.name.equals(c3.name));
        System.out.println("c2.number.equals(c3.number) = "+c2.number.equals(c3.number));
        System.out.println("c2.number.equals(c3.number) = "+c3.equals(c2));
    }
}

Вывод:

ben1
ben1
name : 
ben
number
1
ben1
c1.equals(c2) = true
c3 instanceof Contact = true
c2.name.equals(c3.name) =  true
c2.number.equals(c3.number) = true
c2.number.equals(c3.number) = false

Process finished with exit code 0

Почему:

c2.number.equals (c3.number) = false

Я действительно ожидал, что истина здесь. Должно быть, что-то не так с моим методом equals?

С какой стати мне нужно писать больше текста ...

Почему:

c2.number.equals ( c3.number) = false

Я действительно ожидал истины здесь. Должно быть, что-то не так с моим методом equals?

С какой стати мне нужно написать больше текста ...

Почему:

c2.number.equals ( c3.number) = false

Я действительно ожидал, что правда здесь. Должно быть, что-то не так с моим методом equals?

С какой стати мне нужно писать больше текста ...

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Ах, наконец, я понял. Ошибка в методе equals.

Я должен использовать «equals ()» вместо «==». По некоторым причинам это сравнение работает с c1 и c2, но не с c3.

0 голосов
/ 06 марта 2020

-1 возвращается, если он не был найден в списке.

Вы забыли myList.add () это?

Единственное добавление, которое я вижу, это когда вы добавили c1 .

Вам нужно myList.add (c3) после того, как вы получите ввод, или он не будет в списке, чтобы найти индекс.

...