麻烦大家帮我看一下了,现在我是把武器的信息显示在Shop这个程序中,请问该怎么写入到Player缓冲区让它能够读取。
我是初学者,如果可以的话也麻烦大家帮我指出一些程序的不足,谢谢大家了。
public class Weapon     //武器类
{
private String name;
private String price;
public Weapon(String n,String p)
{
name = n;
price = p;

}

public String getName()
{
return name;
}

public String getPrice()
{
return price;
}

public String toString()
{
return getName()+"     "+getPrice();
}
}import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;public class Shop 
{
ArrayList<Weapon> al;

public Shop()
{
al = new ArrayList<Weapon>();
}

public static void main(String[] args)
{
Shop shop = new Shop();
shop.addWeapon("AK47","$2500");
shop.addWeapon("M4a1","$3100");
shop.addWeapon("AWP","$4750");
shop.trade();
}

public void trade()
{
ServerSocket server = null;
Socket socket = null;
PrintWriter writer = null;
try {
server = new ServerSocket(5000);
} catch (IOException e) {
e.printStackTrace();
}

while(true)
{
try {
socket = server.accept();
} catch (IOException e) {
e.printStackTrace();
}

String message = "欢迎来到游戏装备商店,下面是本商店提供的武器";
try {
writer = new PrintWriter(socket.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

this.showWeapon();      //如何把武器写入到客户端中,让Player可以看到武器的名字和价格
writer.println(message);
writer.flush();
}
}

public void addWeapon(String name,String price)
{
al.add(new Weapon(name,price));
}

public void showWeapon()
{
Iterator it = al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}}import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;public class Player 
{
public void goShop()
{
InetAddress hostaddress = null;
Socket client = null;
InputStreamReader input = null;
BufferedReader br;
String message = null;
try {
hostaddress = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
client = new Socket(hostaddress,5000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
input = new InputStreamReader(client.getInputStream());
br = new BufferedReader(input);
while((message = br.readLine()) != null )
System.out.println(message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args)
{
Player p = new Player();
p.goShop();
}}

解决方案 »

  1.   

    我的想法是 实现一个WeaponList类,用StringBuffer保存每一个武器的名字和价格,当Weapon每次初始化时候把name 和price 加上去。 不知道是否可行,但觉得过于麻烦了。
      

  2.   

    我也不懂,不过我还是说说我的思路吧:
      1  在shop里面用一个字段来存储,武器类的信息,如:name,price。然后用然后用set/get方法来设置和得到,
      商店里的武器信息
      2 在shop里面没改变武器信息的时候,就set一下武器信息,以便客户端获取时得到的时最新的信息
      3  在客户端若要得到这商店的武器信息,则get方法的到了存储在商店的武器信息,然后在list给用户;