我们正在尝试将文件中的一行输入标记为 ADTList “令牌”。它正在读取信息,但列表中的第一个对象被设置为 NULL。我们已经尝试了许多更改,但无法弄清楚这是在哪里发生的。这是代码:
//method to covernt lines of input from a file to individual tokens
public static ADTList tokenizer(String input){
String aToken; //defining variable to create token
ADTList tokens = new ADTList(); //defining return variable
for (int i = 0; i < input.length(); i++){ //loop to iterate through input string
aToken = ""; //clearing variable to hold next string
if (input.charAt(i) == '(' || input.charAt(i) == ')' ||
operator(input.charAt(i))){ //testing for parenthesis or operator
aToken += input.charAt(i); //concatenating character to string
tokens.add(aToken); //adding new string to token list
}else if (Character.isLetter(input.charAt(i))){ //testing for variable letter
aToken += input.charAt(i);
i++; //moving to next character in string
if (i < input.length() && Character.isLetterOrDigit(input.charAt(i))){
do{ //loop to test for end of variable
aToken += input.charAt(i);
i++;
}while (i < input.length() && Character.isLetterOrDigit(input.charAt(i))); //end of variable condition
}
tokens.add(aToken);
i--; //decrementing counter variable
}else if (Character.isDigit(input.charAt(i))){ //testing for number
aToken += input.charAt(i);
i++;
if (i < input.length() && Character.isDigit(input.charAt(i))){
do{ //loop to test for end of variable
aToken += input.charAt(i);
i++;
}while (i < input.length() && Character.isDigit(input.charAt(i))); //end of digit condition
}
tokens.add(aToken);
i--;
}else{
//do nothing
}//end if
}//end loop
return tokens; //returns tokens list to main
}//endFunction
这是输出的快照,显示 NULL 对象位于第一个位置:
- 原函数:a1 * ( b + c )
- 标记化:null, a1, *, (, b, +, c, ),
- 后缀中缀:
后缀到中缀:
原函数:( a * b + c
- 标记化:null, (, a, *, b, +, c,
- 后缀中缀:
- 后缀到中缀:
这是 ADTList 类。这还不是全部,但它确实显示了我们的主项目调用的 add(T item) 方法:
public class ADTList<T> implements ListInterface<T>{
//defining internal variables to be used in interface class
private int numItems;
private T array[];
public ADTList(){
//create an empty array
array = (T[]) new Object [25];
//assign 0 to numItems
numItems=0;
}
public boolean isEmpty(){
// Determines whether a list is empty.
// Precondition: None.
// Postcondition: Returns true if the list is empty,
// otherwise returns false.
if (numItems==0){
return true;
}else{
return false;
}
}
public boolean isFull(){
// Determines whether a list is full.
// Precondition: None.
// Postcondition: Returns true if the list is full,
// otherwise returns false.
return numItems==array.length;
}
public int size(){
// Determines the length of a list.
// Precondition: None.
// Postcondition: Returns the number of items that are
// currently in the list.
return numItems;
}
public boolean add(T item){
// Adds an item to the end of list.
// Precondition: the item should be inserted in the list.
// Postcondition: If insertion is successful, it returns true,
// item is at the end of the list,
// Returns false if the list is full
if (isFull()){
return false;
}else {
array[numItems]=item;
numItems++;
return true;
}
}