我正在尝试使用名为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()
?
答案 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)
我无法提供正常工作的代码。只需检查以下几点,即可让您的计划更好。
class A
中为class Main
创建了对象。ArrayList class
。因为您没有正确使用 add()。