私は3つのJavaクラスを持っています。スタック - スタックを実装します。Stackserver - Stack オブジェクトを作成し、ユーザー アクションに基づいて結果を返すサーバーを実装します。 StackClient - アクションの要求を送信し、サーバーから結果を受信するクライアントを実装します。
アクションは、プッシュ、ポップ、表示、および終了です。
アクションを入力すると、常に無効な操作と表示されます。誰かがプログラムの欠陥を見つけることができますか?
スタック クラス
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 クラス
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 クラス
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);
}
}
}
}