调用List中定义的对象方法

时间:2016-11-18 13:21:41

标签: java arraylist methods

我正在尝试使用名为phone的 ArrayList 从main方法调用addContact方法,但它无效。

以下是代码:

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

class A {

    String name;
    int num;
    Scanner sc = new Scanner(System.in);

    public A(String name, int num) {
        this.name= name;
        this.num= num;
    }

    public void addContact() {
        sc.nextLine();
        System.out.println("Enter name:");
        name = sc.nextLine();
        System.out.println("Enter number:");
        num = sc.nextInt();
    }
}

public class Main {
    static void menu() {
        System.out.println("1. add");
        System.out.println("2. break");
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        ArrayList <A> phone;

        while(true) {
            menu();
            int c = sc.nextInt();
            if(c==1) {
                phone.add().addContact();
                //I'm trying to call addContact()
            } else if(c==2) {
                break;
            }
        }
    }
}

为什么我不能只拨打phone.add().addContact()

6 个答案:

答案 0 :(得分:0)

您需要创建列表的实例:

的ArrayList&LT a取代; phone = new ArrayList&lt;&gt;();

答案 1 :(得分:0)

你的问题从这里开始:

 ArrayList <A> phone;

仅声明该列表;但并没有定义它。因此,当您尝试运行代码时,会遇到 NullPointerException

你需要

 ArrayList <A> contacts = new ArrayList<>();

代替。我也自由地给该变量一个合理的名称。 (这个列表是关于存储内容,它不存储电话;它也不是一个电话......只是一个联系信息列表)

但还有更多。你看,你的抽象错了。您的联系类(A只是该类的可怕的名称)应处理扫描程序以获取其数据。

相反,你想做类似的事情:

class Contact {
   private final String name;
   private final int number;

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

然后,主要方法中,您执行以下操作:

 boolean loop = true;

 while (loop) {
  ... have user enter a name and a number
  if (name.equals("STOP")) {
    loop = false;
  } else {
    Contact contact = new Contact(name, number);
    phones.add(contact);
  }
}

答案 2 :(得分:0)

  ArrayList <A> phone;

应该是:     ArrayList phone = new ArrayList();

此外,此行中的add()方法

phone.add().addContact();

应包含要添加到ArrayList的A对象。

答案 3 :(得分:0)

你需要返回A的对象

 public A  addContact() {
            sc.nextLine();
            System.out.println("Enter name:");
            name = sc.nextLine();
            System.out.println("Enter number:");
            num = sc.nextInt();
    return new A(name,num);
        }

 if(c==1)
            {
                phone.add(addContact);                
            }

答案 4 :(得分:0)

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

class A {
String name;
int num;
Scanner sc = new Scanner(System.in);

public A(String name, int num) {
    this.name= name;
    this.num= num;
}

}

public class Main {
static void menu()  
{
    System.out.println("1. add");
    System.out.println("2. break");

}

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    ArrayList <A> phone = new Arraylist<A>();

    while(true)
    {
        menu();
        int c = sc.nextInt();
        if(c==1)
        {
            System.out.println("Enter name:");
            String name = sc.nextLine();
            System.out.println("Enter number:");
            int num = sc.nextInt(); 
            phone.add(new A(name,num));

        }
        else if(c==2)
        {
            break;
        }
    }

}

}

刚刚删除了你的addContact并放入了while。现在我创建一个新的A实例并将其添加到列表中。这应该现在有效。请在将来发布更准确的问题。

答案 5 :(得分:0)

我无法提供正常工作的代码。只需检查以下几点,即可让您的计划更好。

  1. 使用添加联系方式时,为什么要使用参数创建构造函数。
  2. 您在class A中为class Main创建了对象。
  3. 尝试检查如何使用ArrayList class。因为您没有正确使用 add()