0

I have 3 java class. Stack - implements stack. Stackserver - implements server which creates Stack object and return result based on user action StackClient - implements client which sends request for action and receives reslut from server.

action are push, pop, display and exit.

When i enter action it always say Invalid operation. Can anybody find the fault in the program?

Stack class

public class Stack
{
    private int maxSize;
    private int[] stackArray;
private int top,i;

public Stack(int s)
{
        maxSize = s;
        stackArray = new int[maxSize];
        top = -1;
}

public void push(int j) 
{
        stackArray[++top] = j;
}

    public String display()
    {
        i=top;
        String s="";
        while(i>=0)
        {
            s=s+" "+stackArray[i--];
        }
        return s;
    }    

public int pop()
{
        return stackArray[top--];
}

public int peek()
{
        return stackArray[top];
}

public boolean isEmpty()
{
        return (top == -1);
}

public boolean isFull()
{
        return (top == maxSize - 1);
}   
}

StackServer class

import java.net.*;
import java.io.*;

public class StackServer
{

ServerSocket server;
Socket link;
PrintWriter out;
BufferedReader in;

public void run()
{
    try     
    {

    System.out.println("Creating Server Socket.");
        server = new ServerSocket(4000);
    System.out.println("Successfully created Server Socket.");

    Socket link;
    System.out.println("Waiting For Connection.");
    link = server.accept();
    System.out.println("Connection received from " + link.getInetAddress().getHostName());

    out = new PrintWriter(link.getOutputStream(),true);
    in = new BufferedReader(new InputStreamReader(link.getInputStream()));          

    out.println("Eneter Stack Size.");
    int size = Integer.parseInt((in.readLine()).trim());
    Stack stack = new Stack(size);

    while(true)
    {   
        String action="";
        int n;

        out.println("Eneter Stack Operation.");
        action = in.readLine();

        if(action == "push")
        {
            if(stack.isFull())
            {
            out.println("Stack Full. What next?");
            }
            else
            {
            out.println("Enter element: ");
            n = Integer.parseInt((in.readLine()).trim());
            stack.push(n);
            out.println("Pushed item. What next?");
            }

        }
        else if(action == "pop")
        {
            if(stack.isFull())
            {
            out.println("Stack Full. What next?");
            }
            else
            {
                n = stack.pop();
            out.println(n);
            out.println("Pushed item. What next?");
            }
        }
        else if(action == "display")
        {
            out.println(stack.display());
        }
        else if(action == "exit")
        {
            link.close();
            break;
        }
        else
        {
            out.println("Invalid Operation");
        }
        }
            }
        catch(Exception ex)
        {
        System.out.println(ex);
        }
        }

    public static void main(String [] args)
    {
    StackServer s = new StackServer();
    s.run();}
    }

StackClient class

import java.net.*;
import java.io.*;

public class StackClient
{
public static void main(String [] args)
{
    try     
    {
            Socket client;
        System.out.println("Creating Client Socket.");
        client = new Socket("localhost",4000);
    System.out.println("Successfully created Client Socket.");

    BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter out = new PrintWriter(client.getOutputStream(),true);
        String action ="";
        String size,s;

    System.out.println(in.readLine());
    size = read.readLine();
        out.println(size);

    while(true)
    {

        System.out.println(in.readLine());
        action = read.readLine();
        out.println(action);

        if(action.equals("push"))
        {
                System.out.println(in.readLine());
        s=read.readLine();
        System.out.println(in.readLine());  
        }
        else if(action == "pop")
        {
        System.out.println(in.readLine());
        }
        else if(action == "display")
        {
        System.out.println(in.readLine());  
            }
            else if(action == "exit")
        {
                client.close();
        break;
        }
        else
        {
        out.println("Invalid Operation from Client");
        }
    }
    }
    catch(Exception ex)
    {
    System.out.println(ex);
    }
    }
    }   
}
2

1 Answer 1

5

Use String.equals() to compare strings, not ==:

if(action == "push")
...
else if(action == "pop")

== returns true if two objects are the same instance. You can have two different String instances with the same value.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.