2014-10-01 1 views
-1

새 배열 요소를 만들면 배열 인덱스에 저장되고 배열 인덱스는 다음 배열 요소로 증가합니다.새 배열 요소 만들기 아래 배열 인덱스에 복사

그러나 나는 다른 결과를 얻고 있습니다. 배열 요소는 모든 이전 배열 인덱스로 복사됩니다.

import java.util.Scanner; 
import java.io.*; 


public class VectorOfContacts implements ProjTwo 
{ 
    private int size; 
    private int capacity; 
    private int incrementCapacity; 
    Contact[] contacts; 
    File file = new File("contacts.txt"); 
    Scanner input = new Scanner(System.in); 

    public VectorOfContacts() 
    { 
    size = 0; 
    capacity = 10; 
    incrementCapacity = capacity; 
    contacts = new Contact[capacity];  
    } 

    public int getSize() 
    { 
    return size; 
    } 

    public int getCapacity() 
    { 
    return capacity; 
    } 

    public void setSize() 
    { 
    this.size = size; 
    } 

    public void setCapacity() 
    { 
    this.capacity = capacity; 
    } 


    //public VectorOfContacts(int inCapacity) 
    //{ 
    //inCapacity = 100; 
    //incrementCapacity = inCapacity; 
    //} 

    public void readInitialFromFile() 
    { 
    Contact c = new Contact(); 
    String temp = null; 
    try{ 
     Scanner input = new Scanner(file); 
     for (int i = 0 ; i < size; i++) 
     { 
      temp = input.nextLine(); 
      String[] part = input.nextLine().split(":"); 
      System.out.println(part); 
      String name = part[0]; 
      long number = Long.parseLong(part[1]); 
      String comment = part[2]; 
      c.setName(name); 
      c.setPhoneNumber(number); 
      c.setComment(comment); 
      contacts[i] = c; 
      contacts[size] = contacts[i]; 
     } 
     input.close(); 
     }catch(FileNotFoundException e){ 
     System.out.println("File not found."); 
     System.exit(0); 
     } 
    } 

    public void writeFinalToFile() 
    { 
    try{ 
     PrintWriter output = new PrintWriter(file); 
     for (int i = 0; i < size; i++) 
     { 
      output.println(contacts[i]); 
     } 
     output.close(); 
    }catch(FileNotFoundException a){ 
     System.out.println("Something is wrong."); 
     System.exit(0); 
    } 
    System.exit(0); 


    } 

    public void addContact(Contact c) 
    { 
    addElement(c);  
    } 

    public void deleteContact(String nm) 
    { 
    System.out.println("Delete which name?"); 
    nm = input.nextLine(); 
    for(int i = 0; i < size; i++) 
    { 

     if(contacts[i].getName() == nm); 
     { 
      contacts[i] = contacts[i+1]; 
     } 
    } 
    System.out.println("Deletion confirmed"); 
    } 

    public void showByName(String nm) 
    { 
    nm = input.nextLine(); 
    for (int i = 0; i < size; i++) 
    { 
     if (nm.startsWith(contacts[i].getName())) 
     { 
      System.out.println(contacts[i]); 
     } 
    } 
    } 

    public void showByPhoneNumber(long pN) 
    { 
    pN = input.nextLong(); 
    for (int i = 0; i < size; i++) 
    { 
     if (contacts[i].getPhoneNumber() == pN) 
     { 
      System.out.println(contacts[i]); 
     } 
    } 

    } 

    public void showByComment(String c) 
    { 
    c = input.nextLine(); 
    for (int i = 0; i < size; i++) 
    { 
     if (c.startsWith(contacts[i].getComment())) 
     { 
      System.out.println(contacts[i]); 
     } 
    } 
    } 

    public boolean isFull() 
    { 
    if (size == capacity) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
    } 


    public boolean isEmpty() 
    { 
    if (size == 0) 
     return true; 
    else 
     return false; 
    } 

    public void addElement(Contact item) 
    { 
    if (isFull() == true) 
    incrementCapacity(); 
    contacts[size] = item; 
    size++; 
    System.out.println("size" + size); 
    for (int i = 0; i < size; i++) 
    { 
     System.out.println(contacts[i]); 
    } 
    } 

    public void incrementCapacity() 
    { 
    Contact[] temp_contacts = new Contact[capacity + incrementCapacity]; 
    for(int i = 0; i < size; i++) 
    { 
     temp_contacts[i] = contacts[i]; 
    } 
    capacity = capacity + incrementCapacity; 
    contacts = temp_contacts; 
    } 

}

이들은 결국 당신은 모든 인덱스에 대해 하나 개의 객체를 인쇄

size1 
test:1234:1 

size2 
no:5555:2 
no:5555:2 

size3 
jaja:1666:test 
jaja:1666:test 
jaja:1666:test 
+0

어떻게이 기능을 사용할 수 있습니까? incrementCapacity는 int이지만 메서드로 사용합니다 ('incrementCapacity()')?. 목록을 사용하지 않을 이유가 있습니까? – dusky

+0

정확히 incrementCapacity()가 수행하는 작업. –

+0

incrementCapacity는 관련이 없지만 배열의 크기가 용량과 같으면 용량이 증가합니다. – user3062918

답변

2

결과, 당신은 다음 사용해야합니다 :

for (int i = 0; i < size; i++){ 
    System.out.println(contacts[i]); 
} 
+0

불행히도 결과는 같습니다. – user3062918

+0

@ user3062918 게시물 [MCVE] (http://stackoverflow.com/help/mcve) 도움을 받으십시오. – alex2410

0

당신은 LOF을 향상시킬 수 사물의.

  • 공공
  • 클래스 VectorOfContacts 모든 항목을 노출하지 마십시오 많은 것들을 않습니다. 그것을 여러 클래스로 나누어야합니다.
  • 사용하여 자바 프레임 워크 (Array.copy(), ArrayList를, ...)
  • 이 경우 (참)하지 말라 반환 사실 그렇지 않은 경우는 false
  • 쓰기 테스트 readInitialFromFile 당신에

루프 바깥쪽에 연락처가 생성됩니다. 그래서 모든 연락처의 동일한 객체를 재사용합니다.

이러한 설정자는 아무 것도하지 않으므로 인수가 누락되었습니다. 하지만 어쨌든 공개가되어서는 안됩니다.

public void setSize() 
{ 
    this.size = size; 
} 

public void setCapacity() 
{ 
    this.capacity = capacity; 
} 

isFull 및 IsEmpty 함수는 공개 안하고 많이 짧아

private boolean isFull() { 
    return size == capacity; 
} 

private boolean isEmpty() { 
    return size == 0; 
} 

먼저 코드를 정리하십시오 수 있습니다.