Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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 正在尝试从main中静态方法中的对象运行公共方法,但不起作用_Java - Fatal编程技术网

Java 正在尝试从main中静态方法中的对象运行公共方法,但不起作用

Java 正在尝试从main中静态方法中的对象运行公共方法,但不起作用,java,Java,好的,我有一个我正在创建的叫做手机的小程序。它有3个类:Main.java、Contact.java和MobilePhone.java java使用scanner执行静态方法,通过电话菜单显示和返回信息。java是一个简单的类,它将姓名和号码存储为联系人。MobilePhone.java有as ArrayList,它将Contact类中的对象存储为contacts,然后有几个方法,如addContact();removeContact();queryContact();修改联系人();等等 我遇

好的,我有一个我正在创建的叫做手机的小程序。它有3个类:Main.java、Contact.java和MobilePhone.java

java使用scanner执行静态方法,通过电话菜单显示和返回信息。java是一个简单的类,它将姓名和号码存储为联系人。MobilePhone.java有as ArrayList,它将Contact类中的对象存储为contacts,然后有几个方法,如addContact();removeContact();queryContact();修改联系人();等等

我遇到的问题是,我在Main.java中运行这些静态方法,其中一些方法调用MobilePhone.java中的公共非静态方法,它们似乎没有执行方法中的所有代码。下面是一个例子:

在Main.java中,我有一个名为addContact()的方法;看起来是这样的: 注意mobilePhone(区分大小写)是新mobilePhone类别的名称

private static void addContact(){
    System.out.println("Enter name: ");
    String name = scanner.nextLine();
    System.out.println("Enter number: ");
    String number = scanner.nextLine();
    Contact newContact = Contact.createContact(name, number);
    mobilePhone.addContact(newContact);
}
mobilePhone.addContact();看起来像这样:

public void addContact(Contact contact){
    for(int i = 0; i < this.contacts.size(); i++){
        if(this.contacts.get(i).equals(contact)){
            System.out.println("Contact already exists.");
        } else {
            this.contacts.add(contact);
            System.out.println("New contact: " + contact.getName() + " - "
                    + contact.getNumber() + " added.");
        }
    }
}
public void addContact(联系人){
对于(int i=0;i
发生的情况是扫描仪正在从Main.addContact()获取输入;但是当它到达mobilePhone.addContact(newContact)线路时;它似乎没有在该函数中执行任何操作。看起来是这样的,因为在任何情况下都不会从System.out.println()打印任何内容

我有另一个函数,用于打印ArrayList中的所有对象,名为printContacts();而且它也不是打印:

public void printContacts() {
    System.out.println("Contacts List: ");
    for(int i = 0; i < contacts.size(); i++){
        System.out.println("#" + (i+1) +". " + this.contacts.get(i).getName()
                + " - " + this.contacts.get(i).getNumber());
    }
}
public void printContacts(){
System.out.println(“联系人列表”);
对于(int i=0;i

我想不出是什么问题。我没有收到错误,我只是没有收到我想要的返回信息。

MobilePhone.addContact()
中,您有在
for
循环中添加联系人的代码-因此,每次已经存在的另一个联系人不相等时,它都会添加联系人

开始时,没有联系人(我假设),所以它添加联系人…从不。因此,无法添加任何联系人。您观察到的所有其他问题都可能是此问题的后果-例如,如果您无法添加任何内容,则将永远不会有任何内容可打印

修正:

public void addContact(联系人){
对于(int i=0;i
MobilePhone.addContact()
中,您有在
for
循环中添加联系人的代码-因此,每当已经存在的另一个联系人不相等时,它都会添加联系人

开始时,没有联系人(我假设),所以它添加联系人…从不。因此,无法添加任何联系人。您观察到的所有其他问题都可能是此问题的后果-例如,如果您无法添加任何内容,则将永远不会有任何内容可打印

修正:

public void addContact(联系人){
对于(int i=0;i
除非重写equals()方法,否则不能使用equals()方法比较两个对象。默认情况下,两个对象的equals()方法仅在同一实例中返回true。(字符串在这里是个例外。)

在您的情况下,由于您可能添加到列表中的潜在新联系人对象与任何现有联系人对象不同,因此它将失败

有两种可能的修复方法:

1.     if(this.contacts.get(i).getName().equals(contact.getName())) 
是检查您添加的联系人是否确实相同的一种方法

  • 您可以在
    Contact
    对象上使用自定义实现重写equals()方法

    Contact {           
    @Override
     public boolean equals(Object obj) {
     if (obj == null) {
       return false;
     }    
    if(this.name.equals(obj.getName()))
      return true;
    else
      return false;
       }
     }
    
  • 你甚至可以通过姓名和电话号码或任何你想要的方式在支票上加上一张支票。请注意在hashCode()上使用自定义equals()方法的含义

    有关更多信息,请参阅此链接

    除非重写equals()方法,否则不能使用equals()方法比较两个对象。默认情况下,两个对象的equals()方法仅在同一实例中返回true。(字符串在这里是个例外。)

    在您的情况下,由于您可能添加到列表中的潜在新联系人对象与任何现有联系人对象不同,因此它将失败

    有两种可能的修复方法:

    1.     if(this.contacts.get(i).getName().equals(contact.getName())) 
    
    是检查您添加的联系人是否确实相同的一种方法

  • 您可以在
    Contact
    对象上使用自定义实现重写equals()方法

    Contact {           
    @Override
     public boolean equals(Object obj) {
     if (obj == null) {
       return false;
     }    
    if(this.name.equals(obj.getName()))
      return true;
    else
      return false;
       }
     }
    
  • 你甚至可以通过姓名和电话号码或任何你想要的方式在支票上加上一张支票。请注意在hashCode()上使用自定义equals()方法的含义

    有关更多信息,请参阅此链接

    使用调试器,逐行查看实际运行的代码
    循环在第一次调用
    mobilePhone.addContact
    时经过了多少次迭代?使用调试器,查看实际运行的代码行