/* file: node.java
* Basic Algorithms, Fall 1999, Yap
*
* interface: nodeInterface
* class node implements nodeInterface
*
*/
import java.io.*; // to use DataInputStream
interface nodeInterface {
//==================================================
// basic methods
//==================================================
public void setItem(Object i);
public void setItem(node n); // use only n.item
public void setNext(node n);
public node getNext();
public Object getItem();
public void printItem();
public void print(); // Prints each item of list
// in its own line
//==================================================
// methods for File I/O
//==================================================
public int readString(DataInputStream dis);
// WE WILL PROVIDE THIS FUNCTION (but study it!)
// Reads a new string into this->item
// Returns the number of bytes read (-1 is EOF)
public int readFromFile(String fn);
// WE WILL PROVIDE THIS FUNCTION (but study it!)
// Creates a list of nodes whose items are the
// input lines of the file "fn"
// Returns the number of nodes in list
// If the returned value is <0, error in opening files
} //nodeInterface
// THE SKELETON OF AN IMPLEMENTATION...
public class node implements nodeInterface {
//==================================================
// variables
//==================================================
private Object item;
private node next;
//==================================================
// constructors
//==================================================
node()
{ this(null,null); }
node(Object e, node n)
{ item=e; next=n; }
//==================================================
// basic methods
//==================================================
// DO YOUR IMPLEMENTATION HERE
//==================================================
// methods for File I/O
//==================================================
public int readString(DataInputStream dis)
// reads a new string into this->item
// returns the number of bytes read (-1 is EOF)
// COMMENT:
// (1) This method is basically the same as the
// deprecated java.io method called readLine.
// We prefer to avoid deprecated methods.
// (2) The code below assumes that the input file is
// an ASCII file in which each line is terminated
// by the sequence "\r\n". Please write your
// own variant (called "myReadString") if your
// operating system has a different convention.
// For instance, on Linux, the terminating sequence
// is "\n".
{
byte[] cc = new byte[100];
byte c;
boolean EOF_FLAG = false;
int i = 0;
try{
while( !EOF_FLAG )
{
c = dis.readByte();
if (c == '\r')
{
EOF_FLAG = true;
dis.readByte(); // following '\r' is '\n',
} // which we just discard
else { cc[i] = c; i++; }
}
} catch(Exception e) { item = null; return -1; };
item = new String(cc, 0, i);
return i;
} //readString
//==================================================
// readFromFile( fn ) : constructs a list from a file "fn"
//==================================================
public int readFromFile(String fn)
// returns the number of nodes in list
// the first node in the read-in list is "this"
// if the returned value is <0, error in opening files
{
FileInputStream is = null;
DataInputStream dis = null;
try
{ is = new FileInputStream(fn);
dis = new DataInputStream(is);
} catch (Exception e)
{ System.out.println("Fail to Open");
return -1;
}
int count = 0;
node curr = new node();
node last = this;
if (curr.readString(dis) < 0)
{
return -1;
} else
{
++count;
last.setItem(curr);
curr = new node();
while (curr.readString(dis) >= 0) // allow 0 length item
{ last.setNext(curr);
last = last.getNext();
curr = new node();
++count;
}
}
return count;
} //readFromFile
public static void main(String[] args)
{
// Takes an command line argument "fn" that is a file name
// If command line argument is omitted, "fn" defaults to "input.0"
// A list is created from "fn" (one line per list item)
// (Empty line is allowed, duplicated list items allowed)
// The created list is printed.
}
} //class node