gpt4 book ai didi

java - 如何从另一个类获取 boolean 值?

转载 作者:行者123 更新时间:2023-12-02 09:49:16 24 4
gpt4 key购买 nike

我有一个 UDP 服务,它告诉我们一个号码是否是“capicua”。我有一个带有 boolean 值的服务器类,可以在存在或不存在时设置其值。当我从类 Client 调用告诉我即使使用 getter、setter 或返回实际的 boolean 值也无法获取 boolean 值时,您会怎么想?

//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;
}

最佳答案

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

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 的新实例,但不会达到目的。

关于java - 如何从另一个类获取 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56431841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com