如何从另一个 class 中获取布尔值?
How to take a boolean value from another class?
我有一个 UDP 服务,可以告诉我们号码是否为 'capicua'。我有一个服务器 Class,它带有一个布尔值,它在 is 或 isnt 时设置它的值。当我从 class 客户端打电话告诉我即使使用 getter、setter 或返回实际的 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;
}
您可以按如下方式使用单例 class(您可以将单例 class 重命名为您想要的任何其他名称。)
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;
}
}
然后在class服务器和class客户端中,这样做:
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);
}
}
简单的解释一下,单例class就是一个class只能有一个实例。因此,SharedValues class 的同一个实例将被 class 服务器和 class 客户端访问。如果您因此将 Servidor 中的值设置为 setCapicua(false),那么在 class Client 中,如果您调用 getCapicua()。但是,您必须意识到,在 Client 和 Servidor 中,实例化都是 SharedValues sharedValues = SharedValues.getInstance();
请 不要 使用 SharedValues sharedValues = new SharedValues();
这将提供 [=26= 的新实例] SharedValues 并不会起到作用。
我有一个 UDP 服务,可以告诉我们号码是否为 'capicua'。我有一个服务器 Class,它带有一个布尔值,它在 is 或 isnt 时设置它的值。当我从 class 客户端打电话告诉我即使使用 getter、setter 或返回实际的 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;
}
您可以按如下方式使用单例 class(您可以将单例 class 重命名为您想要的任何其他名称。)
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;
}
}
然后在class服务器和class客户端中,这样做:
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);
}
}
简单的解释一下,单例class就是一个class只能有一个实例。因此,SharedValues class 的同一个实例将被 class 服务器和 class 客户端访问。如果您因此将 Servidor 中的值设置为 setCapicua(false),那么在 class Client 中,如果您调用 getCapicua()。但是,您必须意识到,在 Client 和 Servidor 中,实例化都是 SharedValues sharedValues = SharedValues.getInstance();
请 不要 使用 SharedValues sharedValues = new SharedValues();
这将提供 [=26= 的新实例] SharedValues 并不会起到作用。