Make the following change to the code below. The value is evaluated as \'int\' b
ID: 666212 • Letter: M
Question
Make the following change to the code below. The value is evaluated as 'int' but should have been treated as 'double'.
Also make sure the code check for correct parenthesis.
import java.io.*;
import java.util.*;
class Express
{
private Token token;
Express (Token token) { this.token = token; } // constructor
public int expression ()
{
String oper;
int result;
result = term ();
while ((token.getName ().equals ("plus")) || (token.getName ().equals ("minus")))
{
oper = token.getName ();
token.getToken ();
if (oper.equals ("plus"))
{
result = result + term ();
System.out.print ("+ ");
}
else
{
result = result - term ();
System.out.print ("- ");
}
}
return result;
}
public int term ()
{
String oper;
int result;
result = factor ();
while ((token.getName ().equals ("times")) || (token.getName ().equals ("divide")))
{
oper = token.getName ();
token.getToken ();
if (oper.equals ("times"))
{
result = result * factor ();
System.out.print ("* ");
}
else
{
result = result / factor ();
System.out.print ("/ ");
}
}
return result;
}
public int factor ()
{
int result = 0;
if (token.getName ().equals ("digit"))
{
result = token.getValue ();
System.out.print ("" + token.getValue () + " ");
token.getToken ();
}
else
if (token.getName ().equals ("lparen"))
{
token.getToken ();
result = expression ();
if (token.getName ().equals ("rparen"))
token.getToken ();
else
System.out.print ("Error - missing right parentheses )");
}
else
System.out.print ("Error - invalid token");
return result;
}
}
public class Post
{
public static void main (String [] args)
{
double a1;
a1=0.5;
System.out.println ("Enter an infix expression:");
Scanner scan = new Scanner(System.in);
Token token = new Token ();
token.getToken ();
Express express = new Express (token);
int result = express.expression ();
// String input = scan.nextLine();
System.out.println("Evaluated Output is " + result + ' ');
} // main method
}
class Token
{
private int value = 0;
private String name, tokenString;
BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
StringTokenizer tokens;
public String getName ()
{
return name;
}
public int getValue ()
{
return value;
}
Token ()
{
try
{
tokenString = stdin.readLine ();
tokens = new StringTokenizer (tokenString, "+-*/() ", true);
} catch
(IOException e)
{System.out.println (" Error wrong input");}
} // constructor
public void getToken ()
{
char ch = ' ';
if (tokens.hasMoreTokens ())
{
String token = tokens.nextToken ();
ch = token.charAt (0);
while (ch == ' ')
{
token = tokens.nextToken ();
ch = token.charAt (0);
}
if (('0' <= ch) && (ch <= '9'))
{
name = "digit";
try
{ value = Integer.parseInt (token);
} catch (NumberFormatException e) {value = 0;}
}
else
{ switch (ch)
{
case '+': name = "plus"; break;
case '-': name = "minus"; break;
case '*': name = "times"; break;
case '/': name = "divide"; break;
case '(': name = "lparen"; break;
case ')': name = "rparen"; break;
default: name = "other";
}
}
}
else name = "other";
}
}
Explanation / Answer
Ans:
/* class Expression
Carol Wolf
Fall 2001
The following is a Java application that uses recursive descent to evaluate an infix expression. At the same time it generates the corresponding postfix expression. The Token class is used to store the name and value of each operator and operand in the expression. The three methods: expression, term, and factor, evaluate the expression and print the symbols in the postfix expression. */
import java.io.*;
import java.util.*;
public class Expressions
{
public static void main (String [] args)
{
System.out.println ("Enter an infix expression:");
Token token = new Token ();
token.getToken ();
Express express = new Express (token);
int result = express.expression ();
System.out.println ("= " + result);
} // main method
} // class Expressions
class Token
{
private int value = 0;
private String name, tokenString;
BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
StringTokenizer tokens;
Token ()
{
try
{
tokenString = stdin.readLine ();
tokens = new StringTokenizer (tokenString, "+-*/() ", true);
} catch (IOException e) {System.out.println ("Input error");}
} // constructor
public void getToken ()
{
char ch = ' ';
if (tokens.hasMoreTokens ())
{
String token = tokens.nextToken ();
ch = token.charAt (0);
while (ch == ' ')
{
token = tokens.nextToken ();
ch = token.charAt (0);
}
if (('0' <= ch) && (ch <= '9'))
{
name = "digit";
try
{ value = Integer.parseInt (token);
} catch (NumberFormatException e) {value = 0;}
}
else
{ switch (ch)
{
case '+': name = "plus"; break;
case '-': name = "minus"; break;
case '*': name = "times"; break;
case '/': name = "divide"; break;
case '(': name = "lparen"; break;
case ')': name = "rparen"; break;
default: name = "other";
} //switch
} // else
}
else name = "other";
} //method getToken
public String getName () { return name; }
public int getValue () { return value; }
} // class Token
class Express
{
private Token token;
Express (Token token) { this.token = token; } // constructor
public int expression ()
{
String oper;
int result;
result = term ();
while ((token.getName ().equals ("plus")) || (token.getName ().equals ("minus")))
{
oper = token.getName ();
token.getToken ();
if (oper.equals ("plus"))
{
result = result + term ();
System.out.print ("+ ");
}
else
{
result = result - term ();
System.out.print ("- ");
}
}
return result;
} // method expression
public int term ()
{
String oper;
int result;
result = factor ();
while ((token.getName ().equals ("times")) || (token.getName ().equals ("divide")))
{
oper = token.getName ();
token.getToken ();
if (oper.equals ("times"))
{
result = result * factor ();
System.out.print ("* ");
}
else
{
result = result / factor ();
System.out.print ("/ ");
}
}
return result;
} // method term
public int factor ()
{
int result = 0;
if (token.getName ().equals ("digit"))
{
result = token.getValue ();
System.out.print ("" + token.getValue () + " ");
token.getToken ();
}
else
if (token.getName ().equals ("lparen"))
{
token.getToken ();
result = expression ();
if (token.getName ().equals ("rparen"))
token.getToken ();
else
System.out.print ("Error - missing right paren");
}
else
System.out.print ("Error - invalid token");
return result;
} // method factor
} // class Express
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.