/**
Generics technique in Java allows us to build one class of a
certain type T (anytype, wrapped as <T>). This class will
lays the role of reference to any other kind of type such as char,
String, Integer, Double, or any other built object.
In this example, we take a linked list, the Generics Node <T>
class will be used to build a FIFO linked list. We will have the choice
to fill out this list by values of any type. For this program, we use
String type.
*/
import java.io.*;
import java.util.*;
//The main class: The Node class: ----------------
class Node <T> {//The main class of refernece
//Two variables
public T Data;//the value of the node
public Node <T> Next;
// The node itself. This is the key of the linked list.
public Node (){//Constructor
}
public Node (T TheData){//Constructor
Data = TheData;
}
public T getData() {//To get a value
return Data;
}
public Node<T> getNext() {//To get a node
return Next;
}
public void setData (T TheData) {//To set a value
Data = TheData;
}
public void setNext (Node<T> Next){//To set a node
//Node Next = ThisNext;
this.Next= Next; //Move on the list
}
public void showType() {
// Just a method to test the type of the value Data
System.out.println("Type of T is " + Data.getClass().getName());
}
}//End of the class Node
// Class to use the class Node: ---------------------
public class LifoList {// A class to use the class Node
public static void main (String [] args) throws IOException {
Node ThisList = ReadData();
Display (ThisList);
}
public static Node ReadData()throws IOException {
//Initialisation:
char TheResponse;
//=================== Change here: ========== start===
//Change String to another TYPE in 1,2,3,4
String Data;//1
Node<String> Head = null;//2
Node<String> tempo = null;//3
//======================================== end ======
do {//Using Scanner method for the inputs to fill out the list
Scanner in = new Scanner(System.in);
System.out.print("\n\tEnter a data: --> ");
//=================== Change here: ========== start =====
//Change nextLine() in Data = in.nextLine();
//to nextInt(), nextLong(), nextFloat(),
//nextDouble(), or next();
Data = in.nextLine();
tempo = new Node<String> (Data);//4
//============================================== end =======
tempo.setNext(Head);
Head = tempo;
//Read the inputs using the above calss ReadUtilities
TheResponse = ReadChar ("\n\tDo you want to continue ? y/n: --> ");
TheResponse = (char) ( TheResponse + 'A' - 'a');
} while(TheResponse == 'Y');
return Head;
}
static void Display (Node ThisList){
if (ThisList != null){
System.out.println ("\n\tIn the LIFO (First In First Out)
order, the list contains :");
System.out.println ("\n");
int rank = 0;
while(ThisList != null){
System.out.println ("\n\t" + ++rank + ")\t" + ThisList.getData());
ThisList = ThisList.getNext();// Move on the list
}
}else
System.out.println ("The list is empty \n");
}
// Method to read keybord character:
static char ReadChar(String info) throws IOException {
BufferedReader TheInput =
new BufferedReader ( new InputStreamReader(System.in));
System.out.print(info);
return TheInput.readLine().charAt(0);
}
}//End of LifoList
|