Phone directory remove directory | Member | | Join Date: Nov 2008 Location: Cleveland, Ohio
Posts: 55
| |
I am trying to write a code for a Phone Directory program. This program is suppose to allow the user to enter a name or directory and then program can either add, save or even delete an entry. Also this program has more then one class and also uses an interface. Right now I am working on
ArrayBasedPD class. I am trying to write a code for the remove method (line 158) that allows the user to enter a name, once the program sees that the name is in the directory, it deletes it. The way I tried to do it was simply do the opposite of the Add method, instead of incrementing the size of the array, I would decrement it, because I would believe that when decrementing the size that an entry is being deleted.
This may be kinda confusinf to understand since their are more Classes for this program, such as the Class phone directory is an interface that is being implemented by theArrayBasedPD class (this one). - package CH01;
-
-
import java.io.*;
-
-
/** This is an implementation of the PhoneDirectory interface that uses
-
* an array to store the data.
-
* @author Koffman & Wolfgang
-
*/
-
-
public class ArrayBasedPD implements PhoneDirectory {
-
-
// Data Fields
-
-
/** The initial capacity of the array */
-
private static final int INITIAL_CAPACITY = 100;
-
-
/** The current capacity of the array */
-
private int capacity = INITIAL_CAPACITY;
-
-
/** The current size of the array (number of directory entries) */
-
private int size = 0;
-
-
/** The array to contain the directory data */
-
private DirectoryEntry[] theDirectory =
-
new DirectoryEntry[capacity];
-
-
/** The data file that contains the directory data */
-
private String sourceName = null;
-
-
/** Boolean flag to indicate whether the directory was
-
modified since it was either loaded or saved. */
-
private boolean modified = false;
-
-
/** Method to load the data file.
-
pre: The directory storage has been created and it is empty.
-
If the file exists, it consists of name-number pairs
-
on adjacent lines.
-
post: The data from the file is loaded into the directory.
-
@param sourceName The name of the data file
-
*/
-
public void loadData(String sourceName) {
-
// Remember the source name.
-
this.sourceName = sourceName;
-
try {
-
// Create a BufferedReader for the file.
-
BufferedReader in = new BufferedReader(
-
new FileReader(sourceName));
-
String name;
-
String number;
-
-
// Read each name and number and add the entry to the array.
-
while ( (name = in.readLine()) != null) {
-
// Read name and number from successive lines.
-
if ( (number = in.readLine()) == null) {
-
break; // No number read, exit loop.
-
}
-
// Add an entry for this name and number.
-
add(name, number);
-
}
-
-
// Close the file.
-
in.close();
-
}
-
catch (FileNotFoundException ex) {
-
// Do nothing — no data to load.
-
return;
-
}
-
catch (IOException ex) {
-
System.err.println("Load of directory failed.");
-
ex.printStackTrace();
-
System.exit(1);
-
}
-
}
-
-
/** Add an entry or change an existing entry.
-
@param name The name of the person being added or changed
-
@param number The new number to be assigned
-
@return The old number or, if a new entry, null
-
*/
-
public String addOrChangeEntry(String name, String number) {
-
String oldNumber = null;
-
int index = find(name);
-
if (index > -1) {
-
oldNumber = theDirectory[index].getNumber();
-
theDirectory[index].setNumber(number);
-
}
-
else {
-
add(name, number);
-
}
-
modified = true;
-
return oldNumber;
-
}
-
-
/** Look up an entry.
-
@param name The name of the person
-
@return The number. If not in the directory, null is returned
-
*/
-
public String lookupEntry(String name) {
-
int index = find(name);
-
if (index > -1) {
-
return theDirectory[index].getNumber();
-
}
-
else {
-
return null;
-
}
-
}
-
-
/** Method to save the directory.
-
pre: The directory has been loaded with data.
-
post: Contents of directory written back to the file in the
-
form of name-number pairs on adjacent lines.
-
modified is reset to false.
-
*/
-
public void save() {
-
if (modified) { // If not modified, do nothing.
-
try {
-
// Create PrintWriter for the file.
-
PrintWriter out = new PrintWriter(
-
new FileWriter(sourceName));
-
-
// Write each directory entry to the file.
-
for (int i = 0; i < size; i++) {
-
// Write the name.
-
out.println(theDirectory[i].getName());
-
// Write the number.
-
out.println(theDirectory[i].getNumber());
-
}
-
-
// Close the file and reset modified.
-
out.close();
-
modified = false;
-
}
-
catch (Exception ex) {
-
System.err.println("Save of directory failed");
-
ex.printStackTrace();
-
System.exit(1);
-
}
-
}
-
}
-
-
/** Find an entry in the directory.
-
@param name The name to be found
-
@return The index of the entry with the requested name.
-
If the name is not in the directory, returns -1
-
*/
-
private int find(String name) {
-
for (int i = 0; i < size; i++) {
-
if (theDirectory[i].getName().equals(name)) {
-
return i;
-
}
-
}
-
return -1; // Name not found.
-
}
-
/**remove Entry
-
* @param name The name of the person to be deleted
-
*
-
*/
-
public void remove(String name) {
-
int i = find(name);
-
if(i <= -1)
-
System.out.println("Entry not found; cannot delete!");
-
else
-
theDirectory[size] = new DirectoryEntry(name);
-
size--;
-
-
modified = true;
-
}
-
-
-
-
/** Add an entry to the directory.
-
@param name The name of the new person
-
@param number The number of the new person
-
*/
-
private void add(String name, String number) {
-
if (size >= capacity) {
-
reallocate();
-
}
-
theDirectory[size] = new DirectoryEntry(name, number);
-
size++;
-
}
-
-
/** Allocate a new array to hold the directory. */
-
private void reallocate() {
-
capacity *= 2;
-
DirectoryEntry[] newDirectory = new DirectoryEntry[capacity];
-
System.arraycopy(theDirectory, 0, newDirectory, 0,
-
theDirectory.length);
-
theDirectory = newDirectory;
-
}
-
-
-
}
| | Lives Here | | Join Date: Sep 2006
Posts: 12,070
| | | re: Phone directory remove directory
Looks like you got some code from somewhere that you don't really understand what it does.
Better start with Sun's Java tutorial.
|  | Expert | | Join Date: Mar 2007
Posts: 10,611
| | | re: Phone directory remove directory
That remove() method doesn't make sense to me: -
public void remove(String name) {
-
int i = find(name);
-
if(i <= -1)
-
System.out.println("Entry not found; cannot delete!");
-
else
-
theDirectory[size] = new DirectoryEntry(name);
-
size--;
-
-
modified = true;
-
}
-
I read it as: try to find that name; if not found print a message otherwise make a new entry? and decrement the size of it all?
kind regards,
Jos
| | Member | | Join Date: Nov 2008 Location: Cleveland, Ohio
Posts: 55
| | | re: Phone directory remove directory
Ok if that is what is wrong, then How can I make it delete the entry? I thought decrementing the size of the array would be deleting an entry out of the array. Or do I just decrement the size? Im confused.
|  | Expert | | Join Date: Mar 2007
Posts: 10,611
| | | re: Phone directory remove directory Quote:
Originally Posted by falconsx23 Ok if that is what is wrong, then How can I make it delete the entry? I thought decrementing the size of the array would be deleting an entry out of the array. Im confused. For starters: you can't resize an array once you have instantiated one. Better use an ArrayList, you can delete any element from it given the index value of the element.
kind regards,
Jos
| | Member | | Join Date: Nov 2008 Location: Cleveland, Ohio
Posts: 55
| | | re: Phone directory remove directory
Well besides making an array list, is there anyway that I can remove an entry. I was thinking of another idea where I could overwrite an element in the array. Like it searches for a name, once the array is found, it takes the name before the found name and replaces moves it up. For instance:
Bob, Ray, Jill
Ray was found, but the remove method allows Bob to replace Ray, thus making it
Bob, Bob, Jill
|  | Expert | | Join Date: Mar 2007
Posts: 10,611
| | | re: Phone directory remove directory Quote:
Originally Posted by falconsx23 Well besides making an array list, is there anyway that I can remove an entry. I was thinking of another idea where I could overwrite an element in the array. Like it searches for a name, once the array is found, it takes the name before the found name and replaces moves it up. For instance:
Bob, Ray, Jill
Ray was found, but the remove method allows Bob to replace Ray, thus making it
Bob, Bob, Jill The ArrayList class object can do that for you with its 'remove()' method; read the API documentation.
kind regards,
Jos
|  | | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 226,223 network members.
|