Autor Tema: Duda..intercambiar valores de 2 variables en un método(void)...Java  (Leído 13260 veces)

caludo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Hola!Antes que nada comentar que estoy aprendiendo a programar en Java, y agradezco cualquier
ayuda. Tengo una pequeña duda, en este ejercicio intento hacer el intercambio de los
valores de 2 variables, al hacerlo sin el uso de un método me sale correctamente(es el caso
de las variables num1 y num2) pero si lo hago usando un método(el método "intercambio") no me funciona, no se intercambian
(es el caso de las variables num3 y num4)...en cambio si lo hiciera como el ejemplo de más abajo(usando 2 clases,la clase Prueba
y la clase PruebaMain) si puedo intercambiar 2 variables usando un metodo..Espero que alguien me pueda ayudar con este tema,
gracias de antemano y saludos!


Código: [Seleccionar]
class Estudio{

public static void main(String []args){

int num1=2;
int num2=5;

int num3=10;
int num4=20;



System.out.println("ANTES DEL INTERCAMBIO..num: "+num1+" num1: "+num2);
int prov=num1;
num1=num2;
num2=prov;
System.out.println("DESPUES DEL INTERCAMBIO...num:"+num1+" num1: "+num2);
System.out.println("ANTES DEL INTERCAMBIO..num3: "+num3+" num4 "+num4 );

intercambio(num3,num4);
System.out.println("DESPUES DEL INTERCAMBIO..num3: "+num3+" num4 "+num4 );

}


public static void intercambio(int num,int nume){

int prov=num;
num=nume;
nume=prov;

}


}

   -----------------------------------------------------------------------------
   ------------------------------------------------------------------------
   (OTRO EJEMPLO, USANDO 2 CLASES, AQUI SI ME FUNCIONA USANDO UN METODO)
   
   

Código: [Seleccionar]
class Prueba{

private int a;
private int b;


public Personas(int a,int b){
this.a=a;
this.b=b;

}
public void setValorA(int a){

this.a=a;

}
public void setValorB(int b){
this.b=b;
}


public int getValorA(){
return this.a;
}
public int getValorB(){
return this.b;
}


public void setIntercambio(){

int prov;
prov=a;
a=b;
b=prov;
}
}
---------------------
Código: [Seleccionar]
class PruebaMain{


public static void main(String[]args){

Personas valores=new Personas(3,5);

System.out.println("A:"+valores.getValorA());
System.out.println("B:"+valores.getValorB());

valores.setIntercambio();

System.out.println("Nuevo valor de A:"+valores.getValorA()+" Nuevo valor de B:"+valores.getValorB());
}
}
   
   
   
« Última modificación: 05 de Noviembre 2014, 00:43 por Jorge lopez »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
    • Twitter @Sniperofelite
Re:Duda..intercambiar valores de 2 variables en un método(void)...Java
« Respuesta #1 en: 05 de Noviembre 2014, 02:06 »
 Hola  caludo!

Antes que nada te pongo en conocimiento que cuando vayas a introducir código en el foro, antes presiona el botón # (insertar codigo) que se encuentra arriba del campo de escritura, te saldrán las etiquetas: [code] [/code] y a continuación procede a pegar el codigo en medio de esas etiquetas. Ejemplo: [code]aquíElCódigo ..[/code]. Una vez escrito todo pulsa el botón previsualizar para comprobar si se ve bien y cuando estes conforme con lo previsualizado procede a publicar tu tema.

Respecto a tu duda. Para lograr lo que quieres usando un método tipo procedimiento (void) tienes que tener unos cuantos puntos claros, lo primero es saber que en una clase pueden existir variables generales
(de uso general o global en todo el código de la clase) y variables locales a un método (de uso exclusivo para el método donde son creadas). Un método (tipo funcion o tipo procedimiento) puede interactuar con variables generales o con variables locales, o con ambas al mismo tiempo, algo que debes tener claro es que no basta con pasarle como parámetros las variables num3 y num4 (intercambio(num3,num4);) al método intercambio para conseguir lo que quieres, también hace falta que las variables num3 y num4 estén relacionadas al método "intercambio" para que sufran o implementen los cambios, y también que estén vinculadas al metodo main para poder imprimirlas por pantalla mediante una instrucción "System.out.println();" Como hacer para que ambos métodos puedan usar una misma variable? Pues declaramos esas variables como variables generales de la clase.

Las variables locales de un método no las conoce otro método aunque tengan el mismo nombre (no son las mismas), a diferencia de las variables generales de una clase, donde si un método realiza un cambio en esta, el cambio sera notorio para todos los demás métodos que usen tal variable.

Si en tu clase "Estudio"tenemos las variables generales num3 y num4, las cuales usamos en el cuerpo de el método "intercambio" para que sufran un cambio y luego las usamos en el método main en una instruccion "System.out.println()" pues si conseguirás lo que quieres.

A continuación dejo una nueva clase creada a partir del código de tu clase "Estudio", te sugiero que la analices teniendo en cuenta lo que te he comentado.

Código: [Seleccionar]
public class IntercambiarValores
{
  private static int num3=10;//Variable general o global para toda la clase
  private static int num4=20;//Variable general o global para toda la clase
  public static void main(String []args)
  {   
       int num1=2;//Variable local solo para uso del método main
       int num2=5;//Variable local solo para uso del método main
       int prov;//Variable local solo para uso del método main
       
       System.out.println("Valor inicial de las variables num1 y num2:\nnum1 = " + num1 +"\nnum2 = "+num2);
       
       prov = num1;
       num1=num2;
       num2=prov;
       
       System.out.println("\nValor actual de las variables num1 y num2:\nnum1 = " + num1 +"\nnum2 = "+num2);
       System.out.println("\nValor inicial de las variables num3 y num4:\nnum3 = " + num3 +"\nnum4 = "+num4);
       
       intercambio(num3,num4);
       
       System.out.println("\nValor actual de las variables num3 y num4:\nnum3 = " + num3 +"\nnum4 = "+num4);

  }

  private static void intercambio(int num/*//Variable local solo para uso del método intercambio*/,int nume/*//Variable local solo para uso del método intercambio*/)
  { 
     int prov;//Variable local solo para uso del método intercambio
     prov = num;//Una variable local y una general
     num3 = num4; //Ambas variables generales o globales para el de el código en general de la clase
     num4 = prov;//Una variable general y una variable local
  }
}

Cualquier duda no dudes en preguntar.

Saludos!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}
By: https://twitter.com/SniperOfElite

caludo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Re:Duda..intercambiar valores de 2 variables en un método(void)...Java
« Respuesta #2 en: 05 de Noviembre 2014, 17:12 »
Muchisimas gracias por la aclaración, la verdad que me ha ayudado mucho. Pero tengo otra pequeña duda->¿Se puede crear un método donde pueda intercambiar cualquier pareja de variable en general?O sea,  cualquier pareja de variable que yo le pueda pasar al método, que este sirva para intercambiarlas.Por ejemplo en tu código el método "intercambio" intercambia exclusivamente los valores de num3 y num4, pero si quisiera además intercambiar num1 y num2 tendría que hacer otro método especificamente para num1 y num2, entonces mi pregunta es si posible que el método te intercambie cualquier par de valores que le puedas introducir.

PS.No sabía que se podía adjuntar el código en el Foro, la verdad es que era la primera vez que escribía aquí.Una vez más gracias por todo

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
    • Twitter @Sniperofelite
Re:Duda..intercambiar valores de 2 variables en un método(void)...Java
« Respuesta #3 en: 05 de Noviembre 2014, 22:00 »
 Si, esto puede ser posible aunque un poco mas complejo que cuando creamos un método tipo procedimiento para que realice una tarea o proceso en relación a una/s variable/s especifica/s como es el caso del anterior código.

A continuación dejo un código el cual he diseñado haciendo uso de la clase Field del paquete java.reflect. y de la clase Scanner del paquete java.util.

public class IntercambiarValores
Código: [Seleccionar]
import java.lang.reflect.Field;
import java.util.Scanner;
public class IntercambiarValores
{
  public static void main(String []args)
  { 
     Scanner sc = new Scanner(System.in);
     Integer objeto1, objeto2;//Variables locales
     System.out.println("Este programa intercambia el valor entre dos objetos tipo Integer.\n\nPor favor indique el valor del objeto 1: ");
     objeto1 = sc.nextInt();
     
     System.out.println("\nPor favor indique el valor del objeto 2: ");
     objeto2 = sc.nextInt();
       
     System.out.println("\nValor inicial de las variables objeto1 y objeto2:\nobjeto1 = " + objeto1 +"\nobjeto2 = "+objeto2 + "\n");
       
     intercambio(objeto1, objeto2);
     System.out.println("\nValor actual de las variables objeto1 y objeto2:\nobjeto1 = " + objeto1 +"\nobjeto2 = "+objeto2 + "\n");
     
     System.out.println("\n\nSe ha realizado el intercambio de valores exitosamente.\n\nHasta luego!");
  }
   
  private static void intercambio(Integer obj1, Integer obj2)
  {
     try
     {
       Integer auxiliar = new Integer(obj2);
       Field valor = Integer.class.getDeclaredField("value");
       valor.setAccessible(true);
       valor.set(obj2, obj1);
       valor.set(obj1, auxiliar);
       valor.setAccessible(false);
     }
        catch(Exception e)
     {
       e.printStackTrace();
     }   
  }
}

Saludos!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}
By: https://twitter.com/SniperOfElite

caludo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Re:Duda..intercambiar valores de 2 variables en un método(void)...Java
« Respuesta #4 en: 05 de Noviembre 2014, 23:27 »
Muchisimas gracias, me has sido de gran ayuda la verdad!Saludos y hasta la próxima!!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".