2016-11-18 23 views
-2

我試圖從主方法調用addContact方法,使用ArrayList調用phone但它不工作。調用列表中定義的對象的方法

下面的代碼:

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
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並放置在一段時間。現在我創建一個新的實例A並將其添加到列表中。這應該現在工作。請在將來發布更精確的問題。

+0

非常感謝你... – p32929

0

您需要創建列表的一個實例:

的ArrayList < A> =手機新的ArrayList <>();

+0

在哪裏添加這些行? – p32929

+0

在你的主要方法 – L01c

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); 
    } 
} 
0
ArrayList <A> phone; 

應該是: 的ArrayList phone = new ArrayList();

另外,在該線

phone.add().addContact(); 

的add()方法應該包含一個目的添加到ArrayList。

0

你需要返回的對象的

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);     
      } 
0

我不能給工作代碼。只需檢查以下幾點,使您的計劃更好。

  1. 爲什麼在使用添加聯繫方法時使用參數創建構造函數?
  2. 你在哪裏創建對象class Aclass Main
  3. 嘗試檢查如何使用ArrayList class。因爲您沒有正確使用add()
相關問題