NinjaLink
February 19th, 2010, 08:45 AM
First I want to say that I am a Java beginner and this is my 2nd program.
I created a program that will do a symbol balance test, but I need someone to help me print the results to the screen because I am getting a blank output whenever I try to find a way to do it. I am also reading into a file. Any help is appreciated please.
test.txt looks like {{}}
For ex,
{ { } } = the symbols are equally balanced
{ [ { } = the symbols are not equally balanced
I need someone to help me find a way to print the results like
{{}} are equally balanced
or
{[}} are not equally balanced
I tried using this and placing it near the bottom of the program in between the last brackets
while (!s.empty())
{
System.out.println(s.pop());
if (failed == true)
{
System.out.println(" symbols do not match");
}
else
{
System.out.println(" The symbols match");
}
Main Program:
import java.io.* ;
public class Stackmain
{
public Stackmain()
{
}
public static boolean main(String expression) throws IOException
{
final char LEFT_PARENT = '(';
final char RIGHT_PARENT = ')';
final char LEFT_CURLY = '{';
final char RIGHT_CURLY = '}';
final char LEFT_SQUARE = '[';
final char RIGHT_SQUARE = ']';
Stack s = new Stack(100);
char ch;
int i = 0;
boolean failed = false;
FileInputStream fstream = new FileInputStream("test.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((ch = (char)br.read()) != (char)-1 )
if (!s.full())
{
for (i=0; !failed && (i < expression.length( )); i++)
{
switch (expression.charAt(i))
{
case LEFT_PARENT:
case LEFT_CURLY:
case LEFT_SQUARE:
s.push(expression.charAt(i));
break;
case RIGHT_PARENT:
if (s.empty() || (s.pop() != LEFT_PARENT))
failed = true;
break;
case RIGHT_CURLY:
if (s.empty() || (s.pop() != LEFT_CURLY))
failed = true;
break;
case RIGHT_SQUARE:
if (s.empty() || (s.pop() != LEFT_SQUARE))
failed = true;
break;
}
}
}
return (s.empty() && !failed);
}
}
Stack Class
class Stack {
private int maxStack;
private int emptyStack;
private int top;
private char[] items;
public Stack(int size) {
maxStack= size;
emptyStack = -1;
top = emptyStack;
items = new char[maxStack];
}
public void push(char c) {
items[++top] = c;
}
public char pop() {
return items[top--];
}
public boolean full() {
return top + 1 == maxStack;
}
public boolean empty() {
return top == emptyStack;
}
}
I created a program that will do a symbol balance test, but I need someone to help me print the results to the screen because I am getting a blank output whenever I try to find a way to do it. I am also reading into a file. Any help is appreciated please.
test.txt looks like {{}}
For ex,
{ { } } = the symbols are equally balanced
{ [ { } = the symbols are not equally balanced
I need someone to help me find a way to print the results like
{{}} are equally balanced
or
{[}} are not equally balanced
I tried using this and placing it near the bottom of the program in between the last brackets
while (!s.empty())
{
System.out.println(s.pop());
if (failed == true)
{
System.out.println(" symbols do not match");
}
else
{
System.out.println(" The symbols match");
}
Main Program:
import java.io.* ;
public class Stackmain
{
public Stackmain()
{
}
public static boolean main(String expression) throws IOException
{
final char LEFT_PARENT = '(';
final char RIGHT_PARENT = ')';
final char LEFT_CURLY = '{';
final char RIGHT_CURLY = '}';
final char LEFT_SQUARE = '[';
final char RIGHT_SQUARE = ']';
Stack s = new Stack(100);
char ch;
int i = 0;
boolean failed = false;
FileInputStream fstream = new FileInputStream("test.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((ch = (char)br.read()) != (char)-1 )
if (!s.full())
{
for (i=0; !failed && (i < expression.length( )); i++)
{
switch (expression.charAt(i))
{
case LEFT_PARENT:
case LEFT_CURLY:
case LEFT_SQUARE:
s.push(expression.charAt(i));
break;
case RIGHT_PARENT:
if (s.empty() || (s.pop() != LEFT_PARENT))
failed = true;
break;
case RIGHT_CURLY:
if (s.empty() || (s.pop() != LEFT_CURLY))
failed = true;
break;
case RIGHT_SQUARE:
if (s.empty() || (s.pop() != LEFT_SQUARE))
failed = true;
break;
}
}
}
return (s.empty() && !failed);
}
}
Stack Class
class Stack {
private int maxStack;
private int emptyStack;
private int top;
private char[] items;
public Stack(int size) {
maxStack= size;
emptyStack = -1;
top = emptyStack;
items = new char[maxStack];
}
public void push(char c) {
items[++top] = c;
}
public char pop() {
return items[top--];
}
public boolean full() {
return top + 1 == maxStack;
}
public boolean empty() {
return top == emptyStack;
}
}