如何从另一个类中获取布尔值?

时间:2019-06-03 17:16:50

标签: java udp datagram

我有一个UDP服务,它可以告诉我们数字是否为'capicua'。我有一个带有布尔值的服务器类,它在is或isnt时设置其值。当我从“客户”类打电话告诉我布尔值时,即使使用getter,setters或返回实际的booelan值,我也无法接受,您怎么看?

//CLIENT CLASS
//TIPICO INFINITY LOOP
        while(true) {
            System.out.println("Introduce un numero de "
                    + "al menos 2 cifras para ver si son capicúas. ");

            //METEMOS EN OUT ALL CONTENT 
            out =intToByteArray(Integer.parseInt(introducirDatos("Numero : "))) ;
            //ESCAPE
            if(byteArrayToInt(out)== 0) {
                System.out.println("Cerramos conexión...");
                break;
            }
            System.out.println("Enviando " + out.length + " bytes al servidor");
            envio = new DatagramPacket(out, out.length, IPServer, port );
            socket.send(envio);
//-------------------------------------------------------------------
            recibo = new DatagramPacket(in, in.length);
            System.out.println("Esperando datagrama...");
            socket.receive(recibo);

            IPOrigin = recibo.getAddress();
            int originPort = recibo.getPort();
            System.out.println("Procedente de: " + IPOrigin + ":" + originPort);

            boolean capicua = Servidor.isCapicua();
            System.out.println(capicua);



        }
        socket.close();
class Servidor{
static boolean capicua = true;

while (true) {

            System.out.println("Esperando datagrama...");

            // CONSTUIMOS NUESTRO DATAGRAMPACKET CON LOS DATOS DEL ARRAY DE BYTES
            recibo = new DatagramPacket(in, in.length);
            // RELLENAMOS EL SOCKET CON ALL CONTENT FROM RECIBO
            socket.receive(recibo);
            // ALMACENAMOS EN 'NUMERO' ALL CONTENT
            numero = new Integer(Cliente.byteArrayToInt(recibo.getData()));

            IPOrigin = recibo.getAddress();
            int port = recibo.getPort();
            System.out.println("Origen: " + IPOrigin + ":" + port);
            System.out.println("Mensaje recibido: " + numero);
            // VISUALIZMOS DATOS
            visualizar(recibo, socket);

            // AQUI ES DONDE TOCAMOS LA INFO RECIBIDA PARA DEVOLVER LA INFO ADULTERADA
            String answr = Integer.toString(capicuar(numero));

            if (numero == capicuar(numero)) {
                capicua = false;
            }
            System.out.println(capicua);

            // METEMOS LA INFO MODIFICADA EN DGP PARA ENVIAR
            // byte[] respuesta = Cliente.intToByteArray(answr);
            out = answr.getBytes();
            // PREPARAMOS EL ENVIO
            envio = new DatagramPacket(out, out.length, IPOrigin, port);
            // ENVIAMOS Y VUELTA A EMPEZAR

            socket.send(envio);
}
public static boolean isCapicua() {
        return capicua;
    }

    public static void setCapicua(boolean capicua) {
        Servidor.capicua = capicua;
    }

1 个答案:

答案 0 :(得分:1)

您可以按如下方式使用单例类(可以将单例类重命名为您想要的任何其他名称。)

public class SharedValues{

     private static SharedValues sharedValues = new SharedValues();
     //will always return the same instance of this class
     public static SharedValues getInstance() {
        return sharedValues;
     }

     private boolean capicua;

     public void setCapicua(boolean capicua)
     {
         this.capicua = capicua;
     }

     public boolean getCapicua()
     {
        return this.capicua;
     }
}

然后在Servidor类和Client类中,执行以下操作:

class Servidor {
    SharedValues sharedValues = SharedValues.getInstance();

    //make sure this while loop code is in a function
    while(true)
    {
        if (numero == capicuar(numero)) {
            sharedValues.setCapicua(false);

        }
    }
}


class Client {
    SharedValues sharedValues = SharedValues.getInstance();

    //make sure this while loop code is in a function
    while(true)
    {
        boolean capicua = sharedValues.getCapicua();
        System.out.println(capicua);
    }
}

为简单说明,单例类是只能有一个实例的类。因此,类Servidor和类Client都将访问SharedValues类的相同实例。如果您将Servidor中的值设置为 setCapicua(false),则在Client类中,如果调用 getCapicua(),则该值将为false。但是,您必须意识到,在Client和Servidor中,实例化都是SharedValues sharedValues = SharedValues.getInstance();。请请勿使用SharedValues sharedValues = new SharedValues();,这将提供类SharedValues的新实例,并且将不为目的。